[kernel] r15991 - in dists/sid/linux-2.6/debian: . config/kernelarch-x86 patches/features/all/rt28x0 patches/series
Ben Hutchings
benh at alioth.debian.org
Sun Jul 18 03:00:45 UTC 2010
Author: benh
Date: Sun Jul 18 03:00:16 2010
New Revision: 15991
Log:
rt2860sta, rt2870sta: Apply changes from Linux 2.6.33 and 2.6.34
rt3090sta: Replace with rt2860sta (Closes: #588863)
Added:
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0001-Staging-rt28x0-updates-from-vendor-s-V2.1.0.0-driver.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0002-Staging-rt28x0-remove-unused-code-from-common-dfs.c.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0003-Staging-rt2860-add-RT3090-chipset-support.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0004-Staging-remove-no-longer-needed-rt3090-driver.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0005-Staging-rt28x0-remove-unused-eewrite-methods.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0006-Staging-rt28x0-remove-unused-code-from-common-ee_efu.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0007-Staging-rt28x0-remove-private-RTPRIV_IOCTL_SET-ioctl.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0008-Staging-rt28x0-remove-private-RTPRIV_IOCTL_GSITESURV.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0009-Staging-rt28x0-remove-private-WEXT-handlers.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0010-Staging-rt28x0-remove-support-for-private-driver-par.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0011-Staging-rt28x0-remove-optional-loading-of-EEPROM-fro.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0012-Staging-rt28x0-fix-some-build-warnings.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0013-Staging-rt28x0-remove-optional-cmm-profile-parameter.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0014-Staging-rt28x0-remove-dead-code-from-rtmp_phy.h.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0015-Staging-rt28x0-remove-unused-SHA256-code.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0016-Staging-rt28x0-remove-dead-code.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0017-Staging-rt28x0-remove-__LINE__-instances.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0018-Staging-rt28x0-run-.c-files-through-Lindent.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0019-Staging-rt28x0-run-common-.c-files-through-Lindent.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0020-Staging-rt28x0-run-sta-.c-files-through-Lindent.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0021-Staging-rt28x0-run-.h-files-through-Lindent.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0022-Staging-rt28x0-fix-comments-in-.c-files.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0023-Staging-rt28x0-fix-comments-in-common-.c-files.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0024-Staging-rt28x0-fix-comments-in-sta-.c-files.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0025-Staging-rt28x0-fix-comments-in-.h-files.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0026-Staging-rt28x0-remove-typedefs-part-one.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0027-Staging-rt28x0-remove-typedefs-part-two.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0028-Staging-rt28x0-remove-typedefs-part-three.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0029-Staging-rt2860-remove-remainders-of-etc-reading-stuf.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0030-Staging-rt2860-remove-superfluous-newlines.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0031-Staging-rt28x0-fix-comments-in-chip-mac_pci.h.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0032-Staging-rt2860-reduce-superfluous-exclamation-marks.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0033-Staging-rt28x0-remove-no-longer-needed-common-cmm_da.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0034-Staging-rt2860-test-off-by-one-in-RtmpAsicSendComman.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0035-Staging-rt2870-rtusb_probe-should-be-in-section-__de.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0036-Staging-rt2870-Remove-unnecessary-forward-declaratio.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0037-Staging-rt2860-Use-skb_tail_pointer.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0038-Staging-rt2860-sta_ioctl.c-Two-branches-the-same-in-.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0039-Staging-rt2870sta-constify-RTUSBMultiWrite-RTUSBFirm.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0040-Staging-rt-2860-2870-sta-Use-request_firmware-to-loa.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0041-Staging-rt2860-correct-onstack-wait_queue_head-decla.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0042-Staging-rt2860-add-Belkin-F5D8055-Wireless-N-USB-Don.patch
dists/sid/linux-2.6/debian/patches/features/all/rt28x0/remove-rt3090-driver.commands
Modified:
dists/sid/linux-2.6/debian/changelog
dists/sid/linux-2.6/debian/config/kernelarch-x86/config
dists/sid/linux-2.6/debian/patches/series/18
Modified: dists/sid/linux-2.6/debian/changelog
==============================================================================
--- dists/sid/linux-2.6/debian/changelog Fri Jul 16 14:58:05 2010 (r15990)
+++ dists/sid/linux-2.6/debian/changelog Sun Jul 18 03:00:16 2010 (r15991)
@@ -5,6 +5,8 @@
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
Modified: dists/sid/linux-2.6/debian/config/kernelarch-x86/config
==============================================================================
--- dists/sid/linux-2.6/debian/config/kernelarch-x86/config Fri Jul 16 14:58:05 2010 (r15990)
+++ dists/sid/linux-2.6/debian/config/kernelarch-x86/config Sun Jul 18 03:00:16 2010 (r15991)
@@ -1086,11 +1086,6 @@
CONFIG_RT2870=m
##
-## file: drivers/staging/rt3090/Kconfig
-##
-CONFIG_RT3090=m
-
-##
## file: drivers/staging/rtl8187se/Kconfig
##
CONFIG_RTL8187SE=m
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0001-Staging-rt28x0-updates-from-vendor-s-V2.1.0.0-driver.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0001-Staging-rt28x0-updates-from-vendor-s-V2.1.0.0-driver.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,79796 @@
+From ff63aac6c30d40f9b4e7d7cdd9ceb708f3b0604b Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+[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; i<TXWI_SIZE; i+=4)
+- RTMP_IO_WRITE32(pAd, pAd->BeaconOffset[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);
+- 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; _busyCnt<MAX_BUSY_COUNT; _busyCnt++) \
++ { \
++ RTMP_IO_READ32(_pAd, _regID, &BbpCsr.word); \
++ if (BbpCsr.field.Busy == BUSY) \
++ continue; \
++ BbpCsr.word = 0; \
++ BbpCsr.field.fRead = 1; \
++ BbpCsr.field.BBP_RW_MODE = 1; \
++ BbpCsr.field.Busy = 1; \
++ BbpCsr.field.RegNum = _bbpID; \
++ RTMP_IO_WRITE32(_pAd, _regID, BbpCsr.word); \
++ if ((_bViaMCU) == TRUE) \
++ { \
++ AsicSendCommandToMcu(_pAd, 0x80, 0xff, 0x0, 0x0); \
++ RTMPusecDelay(1000); \
++ } \
++ for (_secCnt=0; _secCnt<MAX_BUSY_COUNT; _secCnt++) \
++ { \
++ RTMP_IO_READ32(_pAd, _regID, &BbpCsr.word); \
++ if (BbpCsr.field.Busy == IDLE) \
++ break; \
++ } \
++ if ((BbpCsr.field.Busy == IDLE) && \
++ (BbpCsr.field.RegNum == _bbpID)) \
++ { \
++ *(_pV) = (UCHAR)BbpCsr.field.Value; \
++ break; \
++ } \
++ } \
++ if (BbpCsr.field.Busy == BUSY) \
++ { \
++ DBGPRINT_ERR(("BBP(viaMCU=%d) read R%d fail\n", (_bViaMCU), _bbpID)); \
++ *(_pV) = (_pAd)->BbpWriteLatch[_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; _busyCnt<MAX_BUSY_COUNT; _busyCnt++) \
++ { \
++ RTMP_IO_READ32((_pAd), BBP_CSR_CFG, &BbpCsr.word); \
++ if (BbpCsr.field.Busy == BUSY) \
++ continue; \
++ BbpCsr.word = 0; \
++ BbpCsr.field.fRead = 0; \
++ BbpCsr.field.BBP_RW_MODE = 1; \
++ BbpCsr.field.Busy = 1; \
++ BbpCsr.field.Value = _pV; \
++ BbpCsr.field.RegNum = _bbpID; \
++ RTMP_IO_WRITE32((_pAd), BBP_CSR_CFG, BbpCsr.word); \
++ if ((_bViaMCU) == TRUE) \
++ { \
++ AsicSendCommandToMcu(_pAd, 0x80, 0xff, 0x0, 0x0); \
++ if ((_pAd)->OpMode == 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; 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].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; 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)
+- //
+- 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);
+-
+- // 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; i<NUM_OF_TX_RING; i++)
+- {
+- pAd->TxRing[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; 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;
+- }
+-
+- 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; 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;
+-
+- 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);
+-
+- 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 <NUM_OF_TX_RING; index++)
+- {
+- PQUEUE_ENTRY pEntry;
+- PNDIS_PACKET pPacket;
+- PQUEUE_HEADER pQueue;
+-
+- RTMP_IRQ_LOCK(&pAd->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<<TID)))
+ {
+ RTMPInitTimer(pAd, &pBAEntry->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<<TID))
+ {
+@@ -686,7 +685,7 @@ BOOLEAN BARecSessionAdd(
+ pEntry->BADeclineBitmap &= ~(1<<TID);
+
+ // Set BA session mask in WCID table.
+- RT28XX_ADD_BA_SESSION_TO_ASIC(pAd, pEntry->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; 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, 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);
++ 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; 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);
++ RTUSBMultiWrite(pAd, HW_BEACON_BASE0 + i, ptr, 2);
++ ptr += 2;
++ }
++
++ // 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);
++ 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; 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 )
++ {
++ // 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; i<MAX_LEN_OF_SHARE_KEY; i++)
++ {
++ RTMP_IO_WRITE8(pAd, offset + i, pKey[i]);
++ }
++
++ offset += MAX_LEN_OF_SHARE_KEY;
++ if (pTxMic)
++ {
++ for (i=0; i<8; i++)
++ {
++ RTMP_IO_WRITE8(pAd, offset + i, pTxMic[i]);
++ }
++ }
++
++ offset += 8;
++ if (pRxMic)
++ {
++ for (i=0; i<8; i++)
++ {
++ RTMP_IO_WRITE8(pAd, offset + i, pRxMic[i]);
++ }
++ }
++#endif // RTMP_MAC_PCI //
++#ifdef RTMP_MAC_USB
++{
++ offset = SHARED_KEY_TABLE_BASE + (4*BssIndex + KeyIdx)*HW_KEY_ENTRY_SIZE;
++ RTUSBMultiWrite(pAd, offset, pKey, MAX_LEN_OF_SHARE_KEY);
++
++ offset += MAX_LEN_OF_SHARE_KEY;
++ if (pTxMic)
++ {
++ RTUSBMultiWrite(pAd, offset, pTxMic, 8);
++ }
++
++ offset += 8;
++ if (pRxMic)
++ {
++ RTUSBMultiWrite(pAd, offset, pRxMic, 8);
++ }
++}
++#endif // RTMP_MAC_USB //
++
++ //
++ // Update cipher algorithm. WSTA always use BSS0
++ //
++ RTMP_IO_READ32(pAd, SHARED_KEY_MODE_BASE+4*(BssIndex/2), &csr1.word);
++ DBGPRINT(RT_DEBUG_TRACE,("Read: SHARED_KEY_MODE_BASE at this Bss[%d] KeyIdx[%d]= 0x%x \n", BssIndex,KeyIdx, 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;
++ }
++ DBGPRINT(RT_DEBUG_TRACE,("Write: SHARED_KEY_MODE_BASE at this Bss[%d] = 0x%x \n", BssIndex, csr1.word));
++ RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE+4*(BssIndex/2), csr1.word);
++
++}
++
++// IRQL = DISPATCH_LEVEL
++VOID AsicRemoveSharedKeyEntry(
++ IN PRTMP_ADAPTER pAd,
++ IN UCHAR BssIndex,
++ IN UCHAR KeyIdx)
++{
++ //ULONG SecCsr0;
++ SHAREDKEY_MODE_STRUC csr1;
++
++ DBGPRINT(RT_DEBUG_TRACE,("AsicRemoveSharedKeyEntry: #%d \n", BssIndex*4 + KeyIdx));
++
++ RTMP_IO_READ32(pAd, SHARED_KEY_MODE_BASE+4*(BssIndex/2), &csr1.word);
++ if ((BssIndex%2) == 0)
++ {
++ if (KeyIdx == 0)
++ csr1.field.Bss0Key0CipherAlg = 0;
++ else if (KeyIdx == 1)
++ csr1.field.Bss0Key1CipherAlg = 0;
++ else if (KeyIdx == 2)
++ csr1.field.Bss0Key2CipherAlg = 0;
++ else
++ csr1.field.Bss0Key3CipherAlg = 0;
++ }
++ else
++ {
++ if (KeyIdx == 0)
++ csr1.field.Bss1Key0CipherAlg = 0;
++ else if (KeyIdx == 1)
++ csr1.field.Bss1Key1CipherAlg = 0;
++ else if (KeyIdx == 2)
++ csr1.field.Bss1Key2CipherAlg = 0;
++ else
++ csr1.field.Bss1Key3CipherAlg = 0;
++ }
++ DBGPRINT(RT_DEBUG_TRACE,("Write: SHARED_KEY_MODE_BASE at this Bss[%d] = 0x%x \n", BssIndex, csr1.word));
++ RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE+4*(BssIndex/2), csr1.word);
++ ASSERT(BssIndex < 4);
++ ASSERT(KeyIdx < 4);
++
++}
++
++
++VOID AsicUpdateWCIDAttribute(
++ IN PRTMP_ADAPTER pAd,
++ IN USHORT WCID,
++ IN UCHAR BssIndex,
++ IN UCHAR CipherAlg,
++ IN BOOLEAN bUsePairewiseKeyTable)
++{
++ ULONG WCIDAttri = 0, offset;
++
++ //
++ // 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);
++ RTMP_IO_WRITE32(pAd, offset, WCIDAttri);
++}
++
++VOID AsicUpdateWCIDIVEIV(
++ IN PRTMP_ADAPTER pAd,
++ IN USHORT WCID,
++ IN ULONG uIV,
++ IN ULONG uEIV)
++{
++ ULONG offset;
++
++ offset = MAC_IVEIV_TABLE_BASE + (WCID * HW_IVEIV_ENTRY_SIZE);
++
++ RTMP_IO_WRITE32(pAd, offset, uIV);
++ RTMP_IO_WRITE32(pAd, offset + 4, uEIV);
++}
++
++VOID AsicUpdateRxWCIDTable(
++ IN PRTMP_ADAPTER pAd,
++ IN USHORT WCID,
++ IN PUCHAR pAddr)
++{
++ ULONG offset;
++ ULONG Addr;
++
++ offset = MAC_WCID_BASE + (WCID * HW_WCID_ENTRY_SIZE);
++ Addr = pAddr[0] + (pAddr[1] << 8) +(pAddr[2] << 16) +(pAddr[3] << 24);
++ RTMP_IO_WRITE32(pAd, offset, Addr);
++ Addr = pAddr[4] + (pAddr[5] << 8);
++ RTMP_IO_WRITE32(pAd, offset + 4, Addr);
++}
++
++
++/*
++ ========================================================================
++
++ Routine Description:
++ Set Cipher Key, Cipher algorithm, IV/EIV to Asic
++
++ Arguments:
++ pAd Pointer to our adapter
++ WCID WCID Entry number.
++ BssIndex BSSID index, station or none multiple BSSID support
++ this value should be 0.
++ KeyIdx This KeyIdx will set to IV's KeyID if bTxKey enabled
++ pCipherKey Pointer to Cipher Key.
++ bUsePairewiseKeyTable TRUE means saved the key in SharedKey table,
++ otherwise PairewiseKey table
++ bTxKey This is the transmit key if enabled.
++
++ Return Value:
++ None
++
++ Note:
++ This routine will set the relative key stuff to Asic including WCID attribute,
++ Cipher Key, Cipher algorithm and IV/EIV.
++
++ IV/EIV will be update if this CipherKey is the transmission key because
++ ASIC will base on IV's KeyID value to select Cipher Key.
++
++ If bTxKey sets to FALSE, this is not the TX key, but it could be
++ RX key
++
++ 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,
++ 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;
++ 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; i<MAX_LEN_OF_PEER_KEY; i++)
++ {
++ RTMP_IO_WRITE8(pAd, offset + i, pKey[i]);
++ }
++#endif // RTMP_MAC_PCI //
++#ifdef RTMP_MAC_USB
++ 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;
++ RTMP_IO_READ32(pAd, offset + i, &Value);
++ }
++
++ offset += MAX_LEN_OF_PEER_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 //
++#ifdef RTMP_MAC_USB
++ RTUSBMultiWrite(pAd, offset, &pCipherKey->TxMic[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; i<MAX_LEN_OF_MAC_TABLE; i++)
+ {
+-#ifdef RT2860
+- RT28XX_STA_ENTRY_MAC_RESET(pAd, i);
+-#endif
++#ifdef RTMP_MAC_PCI
++ RTMP_STA_ENTRY_MAC_RESET(pAd, i);
++#endif // RTMP_MAC_PCI //
+ if (pAd->MacTab.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 <linux/sched.h>
+ #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;i<TX_RING_SIZE;i++)
+ {
+ pTxD = (PTXD_STRUC) pTxRing->Cell[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;i<MGMT_RING_SIZE;i++)
+ {
+ pTxD = (PTXD_STRUC) pMgmtRing->Cell[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;i<RX_RING_SIZE;i++)
+ {
+ pRxD = (PRT28XX_RXD_STRUC) pRxRing->Cell[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; i<pAdapter->ScanTab.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; i<pAdapter->ScanTab.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; 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)
++ //
++ 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);
++
++ // 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; 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;
++ }
++
++ 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; 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;
++
++ 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);
++
++ 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 <NUM_OF_TX_RING; index++)
++ {
++ PQUEUE_ENTRY pEntry;
++ PNDIS_PACKET pPacket;
++ PQUEUE_HEADER pQueue;
++
++ RTMP_IRQ_LOCK(&pAd->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; i<TXWI_SIZE; i+=4)
++ RTMP_IO_WRITE32(pAd, pAd->BeaconOffset[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);
++ 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; i<BEACON_RING_SIZE; i++) // 2
++ {
++ 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);
++
++ 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; 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)
++ {
++ pMgmtRing = &pAd->MgmtRing;
++ 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));
++ }
++ 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; num<MAX_LEN_OF_BA_REC_TABLE; num++)
++// {
++// NdisAllocateSpinLock(&pAd->BATable.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; 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;
++ //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; i<MAX_LEN_OF_BA_REC_TABLE; i++)
++// {
++// NdisFreeSpinLock(&pAd->BATable.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; i<TXWI_SIZE; i+=4) {
++ RTMP_IO_WRITE32(pAd, pAd->BeaconOffset[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; 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);
++ 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; i<NumOfBcn; i++)
++ {
++ NdisZeroMemory(pBeaconSync->BeaconBuf[i], HW_BEACON_OFFSET);
++ NdisZeroMemory(pBeaconSync->BeaconTxWI[i], TXWI_SIZE);
++
++ 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;
++ }
++ 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; apidx<NumOfBcn; apidx++)
++ {
++ UCHAR CapabilityInfoLocationInBeacon = 0;
++ UCHAR TimIELocationInBeacon = 0;
++
++
++ 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*/);
++
++ }
++}
++
++
++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; 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);
++ }
++
++ 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; i++)
++ {
++ temp1 = *(s1+i);
++ temp2 = *(s2+i);
++
++ if (('a' <= temp1) && (temp1 <= 'z'))
++ temp1 = 'A'+(temp1-'a');
++ if (('a' <= temp2) && (temp2 <= 'z'))
++ temp2 = 'A'+(temp2-'a');
++
++ if (temp1 != temp2)
++ break;
++ }
++
++ if (i == l2)
++ return (char *) s1;
++
++ s1++;
++ }
++
++ return NULL; // not found
++}
++
++//add by kathy
++
++ /**
++ * strstr - Find the first substring in a %NUL terminated string
++ * @s1: The string to be searched
++ * @s2: The string to search for
++ */
++PSTRING rtstrstr(PSTRING s1,const PSTRING s2)
++{
++ INT l1, l2;
++
++ l2 = strlen(s2);
++ if (!l2)
++ return s1;
++
++ l1 = strlen(s1);
++
++ while (l1 >= 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<start_ptr)
++ {
++ os_free_mem(NULL, (PUCHAR)pMemBuf);
++ return (FALSE);
++ }
++
++ NdisMoveMemory(temp_buf2, start_ptr, end_ptr-start_ptr);
++ temp_buf2[end_ptr-start_ptr]='\0';
++ if((start_ptr=rtstrstr(temp_buf2, "=")) == NULL)
++ {
++ os_free_mem(NULL, (PUCHAR)pMemBuf);
++ return (FALSE);
++ }
++ ptr = (start_ptr +1);
++ //trim special characters, i.e., TAB or space
++ while(*start_ptr != 0x00)
++ {
++ if( ((*ptr == ' ') && bTrimSpace) || (*ptr == '\t') )
++ ptr++;
++ else
++ break;
++ }
++ len = strlen(start_ptr);
++
++ memset(dest, 0x00, destsize);
++ strncpy(dest, ptr, ((len >= destsize) ? destsize: len));
++
++ os_free_mem(NULL, (PUCHAR)pMemBuf);
++
++ return TRUE;
++}
++
++
++/*
++ ========================================================================
++
++ Routine Description:
++ Get multiple 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 RTMPGetKeyParameterWithOffset(
++ IN PSTRING key,
++ OUT PSTRING dest,
++ OUT USHORT *end_offset,
++ IN INT destsize,
++ IN PSTRING buffer,
++ IN BOOLEAN bTrimSpace)
++{
++ PSTRING temp_buf1 = NULL;
++ PSTRING temp_buf2 = NULL;
++ PSTRING start_ptr;
++ PSTRING end_ptr;
++ PSTRING ptr;
++ PSTRING offset = 0;
++ INT len;
++
++ if (*end_offset >= MAX_INI_BUFFER_SIZE)
++ return (FALSE);
++
++ os_alloc_mem(NULL, (PUCHAR *)&temp_buf1, MAX_PARAM_BUFFER_SIZE);
++
++ if(temp_buf1 == NULL)
++ return (FALSE);
++
++ os_alloc_mem(NULL, (PUCHAR *)&temp_buf2, MAX_PARAM_BUFFER_SIZE);
++ if(temp_buf2 == NULL)
++ {
++ os_free_mem(NULL, (PUCHAR)temp_buf1);
++ return (FALSE);
++ }
++
++ //find section
++ if(*end_offset == 0)
++ {
++ if ((offset = RTMPFindSection(buffer)) == NULL)
++ {
++ os_free_mem(NULL, (PUCHAR)temp_buf1);
++ os_free_mem(NULL, (PUCHAR)temp_buf2);
++ return (FALSE);
++ }
++ }
++ else
++ offset = buffer + (*end_offset);
++
++ 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)temp_buf1);
++ os_free_mem(NULL, (PUCHAR)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<start_ptr)
++ {
++ os_free_mem(NULL, (PUCHAR)temp_buf1);
++ os_free_mem(NULL, (PUCHAR)temp_buf2);
++ return (FALSE);
++ }
++
++ *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, (PUCHAR)temp_buf1);
++ os_free_mem(NULL, (PUCHAR)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, (PUCHAR)temp_buf1);
++ os_free_mem(NULL, (PUCHAR)temp_buf2);
++ return TRUE;
++}
++
++
++static int rtmp_parse_key_buffer_from_file(IN PRTMP_ADAPTER pAd,IN PSTRING buffer,IN ULONG KeyType,IN INT BSSIdx,IN INT KeyIdx)
++{
++ PSTRING keybuff;
++ //INT i = BSSIdx, idx = KeyIdx, retVal;
++ ULONG KeyLen;
++ //UCHAR CipherAlg = CIPHER_WEP64;
++ CIPHER_KEY *pSharedKey;
++
++ keybuff = buffer;
++ KeyLen = strlen(keybuff);
++ pSharedKey = &pAd->SharedKey[BSSIdx][KeyIdx];
++
++ if(((KeyType != 0) && (KeyType != 1)) ||
++ ((KeyType == 0) && (KeyLen != 10) && (KeyLen != 26)) ||
++ ((KeyType== 1) && (KeyLen != 5) && (KeyLen != 13)))
++ {
++ DBGPRINT(RT_DEBUG_ERROR, ("Key%dStr is Invalid key length(%ld) or Type(%ld)\n",
++ KeyIdx+1, KeyLen, KeyType));
++ return FALSE;
++ }
++ else
++ {
++ return RT_CfgSetWepKey(pAd, buffer, pSharedKey, KeyIdx);
++ }
++
++}
++
++
++static void rtmp_read_key_parms_from_file(IN PRTMP_ADAPTER pAd, PSTRING tmpbuf, PSTRING buffer)
++{
++ STRING tok_str[16];
++ PSTRING macptr;
++ INT i = 0, idx;
++ ULONG KeyType[MAX_MBSSID_NUM];
++ ULONG KeyIdx;
++
++ NdisZeroMemory(KeyType, sizeof(KeyType));
++
++ //DefaultKeyID
++ if(RTMPGetKeyParameter("DefaultKeyID", tmpbuf, 25, buffer, TRUE))
++ {
++ {
++ 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, 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<Length/2; i++)
++ *(pData+2*i) = 0xffff;
++ }
++ else
++ {
++ //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
++ 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.
++ data = data >> (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<Length; i+=2)
++ {
++ eFusePhysicalReadRegisters(pAd,Offset+i, 2, &pOutBuf[i/2]);
++ }
++}
++
++/*
++========================================================================
++
++ Routine Description:
++
++ Arguments:
++
++ Return Value:
++
++ Note:
++
++========================================================================
++*/
++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; i<Length; i+=2)
++ {
++ EFSROM_AOUT = eFuseReadRegisters(pAd, Offset+i, 2, &pOutBuf[i/2]);
++ }
++ return Status;
++}
++
++/*
++========================================================================
++
++ Routine Description:
++
++ Arguments:
++
++ Return Value:
++
++ Note:
++
++========================================================================
++*/
++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 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);
++ break;
++ }
++ }
++ }
++ else
++ {
++ // invalidate the low byte
++ for (i=0; i<8; i++)
++ {
++ if( ( (InBuf[2] >> i) & 0x01) == 0)
++ {
++ InBuf[2] |= (0x1 <<i);
++ break;
++ }
++ }
++ }
++ eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 0);
++ }
++ }
++ while (!bWriteSuccess&&Loop<2);
++ if(!bWriteSuccess)
++ DBGPRINT(RT_DEBUG_ERROR,("Efsue Write Failed!!\n"));
++ return TRUE;
++}
++
++
++/*
++========================================================================
++
++ 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; i<Length; i+=2)
++ {
++ eFusePhysicalWriteRegisters(pAd, Offset+i, 2, &pValueX[i/2]);
++ }
++ }
++}
++
++
++/*
++========================================================================
++
++ Routine Description:
++
++ Arguments:
++
++ Return Value:
++
++ Note:
++
++========================================================================
++*/
++NTSTATUS eFuseWrite(
++ IN PRTMP_ADAPTER pAd,
++ IN USHORT Offset,
++ IN PUCHAR pData,
++ IN USHORT length)
++{
++ int i;
++ USHORT* pValueX = (PUSHORT) pData; //value ...
++
++ // The input value=3070 will be stored as following
++ // Little-endian S | S Big-endian
++ // addr 1 0 | 0 1
++ // Ori-V 30 70 | 30 70
++ // After swapping
++ // 30 70 | 70 30
++ // Casting
++ // 3070 | 7030 (x)
++ // The swapping should be removed for big-endian
++ for(i=0; i<length; i+=2)
++ {
++ eFuseWriteRegisters(pAd, Offset+i, 2, &pValueX[i/2]);
++ }
++
++ return TRUE;
++}
++
++
++
++
++/*
++========================================================================
++
++ Routine Description:
++
++ Arguments:
++
++ Return Value:
++
++ Note:
++
++========================================================================
++*/
++INT set_eFuseGetFreeBlockCount_Proc(
++ IN PRTMP_ADAPTER pAd,
++ IN PSTRING arg)
++{
++ USHORT i;
++ USHORT LogicalAddress;
++ USHORT 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);
++ 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; i<EFUSE_USAGE_MAP_END/2; i++)
++ {
++ InBuf[0] = 2*i;
++ InBuf[1] = 2;
++ InBuf[2] = 0x0;
++
++ eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2);
++ if(i%4==0)
++ printk("\nBlock %x:",i/8);
++ printk("%04x ",InBuf[2]);
++ }
++ return TRUE;
++}
++
++
++INT set_eFuseLoadFromBin_Proc(
++ IN PRTMP_ADAPTER pAd,
++ IN PSTRING arg)
++{
++ PSTRING src;
++ RTMP_OS_FD srcf;
++ RTMP_OS_FS_INFO osfsInfo;
++ INT retval, memSize;
++ PSTRING buffer, memPtr;
++ INT i = 0,j=0,k=1;
++ USHORT *PDATA;
++ USHORT DATA;
++
++ memSize = 128 + MAX_EEPROM_BIN_FILE_SIZE + sizeof(USHORT) * 8;
++ memPtr = kmalloc(memSize, MEM_ALLOC_FLAG);
++ if (memPtr == NULL)
++ return FALSE;
++
++ NdisZeroMemory(memPtr, memSize);
++ src = memPtr; // kmalloc(128, MEM_ALLOC_FLAG);
++ buffer = src + 128; // kmalloc(MAX_EEPROM_BIN_FILE_SIZE, MEM_ALLOC_FLAG);
++ PDATA = (USHORT*)(buffer + MAX_EEPROM_BIN_FILE_SIZE); // kmalloc(sizeof(USHORT)*8,MEM_ALLOC_FLAG);
++
++ if(strlen(arg)>0)
++ 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;j<i;j++)
++ {
++ DBGPRINT(RT_DEBUG_TRACE, ("%02X ",buffer[j]&0xff));
++ if((j+1)%2==0)
++ PDATA[j/2%8]=((buffer[j]<<8)&0xff00)|(buffer[j-1]&0xff);
++ if(j%16==0)
++ {
++ k=buffer[j];
++ }
++ else
++ {
++ k&=buffer[j];
++ if((j+1)%16==0)
++ {
++ DBGPRINT(RT_DEBUG_TRACE, (" result=%02X,blk=%02x\n",k,j/16));
++ if(k!=0xff)
++ eFuseWriteRegistersFromBin(pAd,(USHORT)j-15, 16, PDATA);
++ else
++ {
++ if(eFuseReadRegisters(pAd,j, 2,(PUSHORT)&DATA)!=0x3f)
++ eFuseWriteRegistersFromBin(pAd,(USHORT)j-15, 16, PDATA);
++ }
++ /*
++ for(l=0;l<8;l++)
++ printk("%04x ",PDATA[l]);
++ printk("\n");
++ */
++ NdisZeroMemory(PDATA,16);
++ }
++ }
++ }
++
++ return TRUE;
++
++closeFile:
++ if (srcf)
++ RtmpOSFileClose(srcf);
++
++recoverFS:
++ RtmpOSFSInfoChange(&osfsInfo, FALSE);
++
++
++ if (memPtr)
++ kfree(memPtr);
++
++ return retval;
++}
++
++
++static NTSTATUS eFuseWriteRegistersFromBin(
++ IN PRTMP_ADAPTER pAd,
++ IN USHORT Offset,
++ IN USHORT Length,
++ IN USHORT* pData)
++{
++ USHORT i;
++ USHORT eFuseData;
++ USHORT LogicalAddress, BlkNum = 0xffff;
++ UCHAR EFSROM_AOUT,Loop=0;
++ EFUSE_CTRL_STRUC eFuseCtrlStruc;
++ USHORT efuseDataOffset;
++ UINT32 data,tempbuffer;
++ USHORT addr,tmpaddr, InBuf[3], tmpOffset;
++ UINT32 buffer[4];
++ BOOLEAN bWriteSuccess = TRUE;
++ BOOLEAN bNotWrite=TRUE;
++ BOOLEAN bAllocateNewBlk=TRUE;
++
++ DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegistersFromBin Offset=%x, pData=%04x:%04x:%04x:%04x\n", Offset, *pData,*(pData+1),*(pData+2),*(pData+3)));
++
++ do
++ {
++ //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.
++ Loop++;
++ 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
++ 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);
++ break;
++ }
++ }
++ }
++ else
++ {
++ // invalidate the low byte
++ for (i=0; i<8; i++)
++ {
++ if( ( (InBuf[2] >> i) & 0x01) == 0)
++ {
++ InBuf[2] |= (0x1 <<i);
++ break;
++ }
++ }
++ }
++ eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 0);
++ }
++
++ }
++ while(!bWriteSuccess&&Loop<2);
++
++ return TRUE;
++}
++
++
++int rtmp_ee_efuse_read16(
++ IN RTMP_ADAPTER *pAd,
++ IN USHORT Offset,
++ OUT USHORT *pValue)
++{
++ if(pAd->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<Length/2; i++)
+- *(pData+2*i) = 0xffff;
+- }
+- else
+- {
+- //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
+- 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.
+- data = data >> (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<Length; i+=2)
+- {
+- eFusePhysicalReadRegisters(pAd,Offset+i, 2, &pOutBuf[i/2]);
+- }
+-}
+-
+-/*
+- ========================================================================
+-
+- Routine Description:
+-
+- Arguments:
+-
+- Return Value:
+-
+- IRQL =
+-
+- Note:
+-
+- ========================================================================
+-*/
+-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; i<Length; i+=2)
+- {
+- EFSROM_AOUT = eFuseReadRegisters(pAd, Offset+i, 2, &pOutBuf[i/2]);
+- }
+- return Status;
+-}
+-
+-/*
+- ========================================================================
+-
+- Routine Description:
+-
+- Arguments:
+-
+- Return Value:
+-
+- IRQL =
+-
+- Note:
+-
+- ========================================================================
+-*/
+-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, (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.
+- 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)
+- 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.
+- 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);
+- break;
+- }
+- }
+- }
+- else
+- {
+- // invalidate the low byte
+- for (i=0; i<8; i++)
+- {
+- if( ( (InBuf[2] >> i) & 0x01) == 0)
+- {
+- InBuf[2] |= (0x1 <<i);
+- break;
+- }
+- }
+- }
+- eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 0);
+- }
+- }
+- while(!bWriteSuccess);
+-
+- return TRUE;
+-}
+-
+-/*
+- ========================================================================
+-
+- Routine Description:
+-
+- Arguments:
+-
+- Return Value:
+-
+- IRQL =
+-
+- Note:
+-
+- ========================================================================
+-*/
+-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 ...
+- // 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; i<Length; i+=2)
+- {
+- eFusePhysicalWriteRegisters(pAd, Offset+i, 2, &pValueX[i/2]);
+- }
+-}
+-
+-
+-/*
+- ========================================================================
+-
+- Routine Description:
+-
+- Arguments:
+-
+- Return Value:
+-
+- IRQL =
+-
+- Note:
+-
+- ========================================================================
+-*/
+-NTSTATUS eFuseWrite(
+- IN PRTMP_ADAPTER pAd,
+- IN USHORT Offset,
+- IN PUCHAR pData,
+- IN USHORT length)
+-{
+- int i;
+-
+- USHORT* pValueX = (PUSHORT) pData; //value ...
+- //The input value=3070 will be stored as following
+- // Little-endian S | S Big-endian
+- // addr 1 0 | 0 1
+- // Ori-V 30 70 | 30 70
+- //After swapping
+- // 30 70 | 70 30
+- //Casting
+- // 3070 | 7030 (x)
+- //The swapping should be removed for big-endian
+- for(i=0; i<length; i+=2)
+- {
+- eFuseWriteRegisters(pAd, Offset+i, 2, &pValueX[i/2]);
+- }
+-
+- return TRUE;
+-}
+-
+-/*
+- ========================================================================
+-
+- Routine Description:
+-
+- Arguments:
+-
+- Return Value:
+-
+- IRQL =
+-
+- Note:
+-
+- ========================================================================
+-*/
+-INT set_eFuseGetFreeBlockCount_Proc(
+- IN PRTMP_ADAPTER pAd,
+- IN PUCHAR arg)
+-{
+- USHORT i;
+- USHORT LogicalAddress;
+- USHORT 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);
+- 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; i<EFUSE_USAGE_MAP_END/2; i++)
+- {
+- InBuf[0] = 2*i;
+- InBuf[1] = 2;
+- InBuf[2] = 0x0;
+-
+- eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2);
+- if(i%4==0)
+- printk("\nBlock %x:",i/8);
+- printk("%04x ",InBuf[2]);
+- }
+- return TRUE;
+-}
+-INT set_eFuseLoadFromBin_Proc(
+- IN PRTMP_ADAPTER pAd,
+- IN PUCHAR arg)
+-{
+- CHAR *src;
+- struct file *srcf;
+- INT retval;
+- mm_segment_t orgfs;
+- UCHAR *buffer;
+- UCHAR BinFileSize=0;
+- INT i = 0,j=0,k=1;
+- USHORT *PDATA;
+- USHORT DATA;
+- BinFileSize=strlen("RT30xxEEPROM.bin");
+- src = kmalloc(128, MEM_ALLOC_FLAG);
+- NdisZeroMemory(src, 128);
+-
+- if(strlen(arg)>0)
+- {
+-
+- 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;j<i;j++)
+- {
+- DBGPRINT(RT_DEBUG_TRACE, ("%02X ",buffer[j]));
+- if((j+1)%2==0)
+- PDATA[j/2%8]=((buffer[j]<<8)&0xff00)|(buffer[j-1]&0xff);
+- if(j%16==0)
+- {
+- k=buffer[j];
+- }
+- else
+- {
+- k&=buffer[j];
+- if((j+1)%16==0)
+- {
+-
+- DBGPRINT(RT_DEBUG_TRACE, (" result=%02X,blk=%02x\n",k,j/16));
+-
+- if(k!=0xff)
+- eFuseWriteRegistersFromBin(pAd,(USHORT)j-15, 16, PDATA);
+- else
+- {
+- if(eFuseReadRegisters(pAd,j, 2,(PUSHORT)&DATA)!=0x3f)
+- eFuseWriteRegistersFromBin(pAd,(USHORT)j-15, 16, PDATA);
+- }
+- /*
+- for(l=0;l<8;l++)
+- printk("%04x ",PDATA[l]);
+- printk("\n");
+- */
+- NdisZeroMemory(PDATA,16);
+-
+-
+- }
+- }
+-
+-
+- }
+-
+-
+- kfree(PDATA);
+- kfree(buffer);
+- kfree(src);
+- return TRUE;
+-}
+-NTSTATUS eFuseWriteRegistersFromBin(
+- IN PRTMP_ADAPTER pAd,
+- IN USHORT Offset,
+- IN USHORT Length,
+- IN USHORT* pData)
+-{
+- USHORT i;
+- USHORT eFuseData;
+- USHORT LogicalAddress, BlkNum = 0xffff;
+- UCHAR EFSROM_AOUT,Loop=0;
+- EFUSE_CTRL_STRUC eFuseCtrlStruc;
+- USHORT efuseDataOffset;
+- UINT32 data,tempbuffer;
+- USHORT addr,tmpaddr, InBuf[3], tmpOffset;
+- UINT32 buffer[4];
+- BOOLEAN bWriteSuccess = TRUE;
+- BOOLEAN bNotWrite=TRUE;
+- BOOLEAN bAllocateNewBlk=TRUE;
+-
+- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegistersFromBin Offset=%x, pData=%04x:%04x:%04x:%04x\n", Offset, *pData,*(pData+1),*(pData+2),*(pData+3)));
+-
+- do
+- {
+- //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.
+- Loop++;
+- 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
+- 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);
++ default:
++ DBGPRINT(RT_DEBUG_ERROR, ("RtmpChipOpsEepromHook() failed!\n"));
+ break;
+ }
+- }
+- }
+- else
+- {
+- // invalidate the low byte
+- for (i=0; i<8; i++)
+- {
+- if( ( (InBuf[2] >> i) & 0x01) == 0)
+- {
+- InBuf[2] |= (0x1 <<i);
+- break;
+- }
+- }
+- }
+- eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 0);
+- }
+-
+- }
+- while(!bWriteSuccess&&Loop<2);
+
+- return TRUE;
++ return 0;
+ }
+-#endif
+diff --git a/drivers/staging/rt2860/common/md5.c b/drivers/staging/rt2860/common/md5.c
+deleted file mode 100644
+index ad883ca..0000000
+--- a/drivers/staging/rt2860/common/md5.c
++++ /dev/null
+@@ -1,1415 +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.c
+-
+- Abstract:
+-
+- Revision History:
+- Who When What
+- -------- ---------- ----------------------------------------------
+- Name Date Modification logs
+- jan 10-28-03 Initial
+- Rita 11-23-04 Modify MD5 and SHA-1
+- Rita 10-14-05 Modify SHA-1 in big-endian platform
+- */
+-#include "../rt_config.h"
+-
+-/**
+- * md5_mac:
+- * @key: pointer to the key used for MAC generation
+- * @key_len: length of the key in bytes
+- * @data: pointer to the data area for which the MAC is generated
+- * @data_len: length of the data in bytes
+- * @mac: pointer to the buffer holding space for the MAC; the buffer should
+- * have space for 128-bit (16 bytes) MD5 hash value
+- *
+- * md5_mac() determines the message authentication code by using secure hash
+- * MD5(key | data | key).
+- */
+-void md5_mac(u8 *key, size_t key_len, u8 *data, size_t data_len, u8 *mac)
+-{
+- MD5_CTX context;
+-
+- MD5Init(&context);
+- MD5Update(&context, key, key_len);
+- MD5Update(&context, data, data_len);
+- MD5Update(&context, key, key_len);
+- MD5Final(mac, &context);
+-}
+-
+-/**
+- * hmac_md5:
+- * @key: pointer to the key used for MAC generation
+- * @key_len: length of the key in bytes
+- * @data: pointer to the data area for which the MAC is generated
+- * @data_len: length of the data in bytes
+- * @mac: pointer to the buffer holding space for the MAC; the buffer should
+- * have space for 128-bit (16 bytes) MD5 hash value
+- *
+- * hmac_md5() determines the message authentication code using HMAC-MD5.
+- * This implementation is based on the sample code presented in RFC 2104.
+- */
+-void hmac_md5(u8 *key, size_t key_len, u8 *data, size_t data_len, u8 *mac)
+-{
+- MD5_CTX context;
+- u8 k_ipad[65]; /* inner padding - key XORd with ipad */
+- u8 k_opad[65]; /* outer padding - key XORd with opad */
+- u8 tk[16];
+- int i;
+-
+- //assert(key != NULL && data != NULL && mac != NULL);
+-
+- /* if key is longer than 64 bytes reset it to key = MD5(key) */
+- if (key_len > 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; i<MAX_LEN_OF_SUPPORTED_RATES; i++)
+@@ -3067,6 +2951,14 @@ VOID MlmeUpdateTxRates(
+ 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;
+@@ -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; 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, 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);
+- 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; i<TXWI_SIZE; i+=2) // 16-byte TXWI field
+- {
+- RTUSBMultiWrite(pAd, HW_BEACON_BASE0 + i, ptr, 2);
+- ptr += 2;
+- }
+-
+- // start right after the 16-byte TXWI field
+- ptr = pAd->BeaconBuf;
+- 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; 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 .
+- //========================================================
+- 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; i<MAX_LEN_OF_SHARE_KEY; i++)
+- {
+- RTMP_IO_WRITE8(pAd, offset + i, pKey[i]);
+- }
+-#endif
+-#ifdef RT2870
+- RTUSBMultiWrite(pAd, offset, pKey, MAX_LEN_OF_SHARE_KEY);
+-#endif
+- offset += MAX_LEN_OF_SHARE_KEY;
+- 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 += 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, pRxMic, 8);
+-#endif
+- }
+-
+-
+- //
+- // Update cipher algorithm. WSTA always use BSS0
+- //
+- RTMP_IO_READ32(pAd, SHARED_KEY_MODE_BASE+4*(BssIndex/2), &csr1.word);
+- DBGPRINT(RT_DEBUG_TRACE,("Read: SHARED_KEY_MODE_BASE at this Bss[%d] KeyIdx[%d]= 0x%x \n", BssIndex,KeyIdx, 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;
+- }
+- DBGPRINT(RT_DEBUG_TRACE,("Write: SHARED_KEY_MODE_BASE at this Bss[%d] = 0x%x \n", BssIndex, csr1.word));
+- RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE+4*(BssIndex/2), csr1.word);
+-
+-}
+-
+-// IRQL = DISPATCH_LEVEL
+-VOID AsicRemoveSharedKeyEntry(
+- IN PRTMP_ADAPTER pAd,
+- IN UCHAR BssIndex,
+- IN UCHAR KeyIdx)
+-{
+- //ULONG SecCsr0;
+- SHAREDKEY_MODE_STRUC csr1;
+-
+- DBGPRINT(RT_DEBUG_TRACE,("AsicRemoveSharedKeyEntry: #%d \n", BssIndex*4 + KeyIdx));
+-
+- RTMP_IO_READ32(pAd, SHARED_KEY_MODE_BASE+4*(BssIndex/2), &csr1.word);
+- if ((BssIndex%2) == 0)
+- {
+- if (KeyIdx == 0)
+- csr1.field.Bss0Key0CipherAlg = 0;
+- else if (KeyIdx == 1)
+- csr1.field.Bss0Key1CipherAlg = 0;
+- else if (KeyIdx == 2)
+- csr1.field.Bss0Key2CipherAlg = 0;
+- else
+- csr1.field.Bss0Key3CipherAlg = 0;
+- }
+- else
+- {
+- if (KeyIdx == 0)
+- csr1.field.Bss1Key0CipherAlg = 0;
+- else if (KeyIdx == 1)
+- csr1.field.Bss1Key1CipherAlg = 0;
+- else if (KeyIdx == 2)
+- csr1.field.Bss1Key2CipherAlg = 0;
+- else
+- csr1.field.Bss1Key3CipherAlg = 0;
+- }
+- DBGPRINT(RT_DEBUG_TRACE,("Write: SHARED_KEY_MODE_BASE at this Bss[%d] = 0x%x \n", BssIndex, csr1.word));
+- RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE+4*(BssIndex/2), csr1.word);
+- ASSERT(BssIndex < 4);
+- ASSERT(KeyIdx < 4);
+-
+-}
+-
+-
+-VOID AsicUpdateWCIDAttribute(
+- IN PRTMP_ADAPTER pAd,
+- IN USHORT WCID,
+- IN UCHAR BssIndex,
+- IN UCHAR CipherAlg,
+- IN BOOLEAN bUsePairewiseKeyTable)
+-{
+- ULONG WCIDAttri = 0, offset;
+-
+- //
+- // 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);
+- RTMP_IO_WRITE32(pAd, offset, WCIDAttri);
+-}
+-
+-VOID AsicUpdateWCIDIVEIV(
+- IN PRTMP_ADAPTER pAd,
+- IN USHORT WCID,
+- IN ULONG uIV,
+- IN ULONG uEIV)
+-{
+- ULONG offset;
+-
+- offset = MAC_IVEIV_TABLE_BASE + (WCID * HW_IVEIV_ENTRY_SIZE);
+-
+- RTMP_IO_WRITE32(pAd, offset, uIV);
+- RTMP_IO_WRITE32(pAd, offset + 4, uEIV);
+-}
+-
+-VOID AsicUpdateRxWCIDTable(
+- IN PRTMP_ADAPTER pAd,
+- IN USHORT WCID,
+- IN PUCHAR pAddr)
+-{
+- ULONG offset;
+- ULONG Addr;
+-
+- offset = MAC_WCID_BASE + (WCID * HW_WCID_ENTRY_SIZE);
+- Addr = pAddr[0] + (pAddr[1] << 8) +(pAddr[2] << 16) +(pAddr[3] << 24);
+- RTMP_IO_WRITE32(pAd, offset, Addr);
+- Addr = pAddr[4] + (pAddr[5] << 8);
+- RTMP_IO_WRITE32(pAd, offset + 4, Addr);
+-}
+-
+-
+-/*
+- ========================================================================
+-
+- Routine Description:
+- Set Cipher Key, Cipher algorithm, IV/EIV to Asic
+-
+- Arguments:
+- pAd Pointer to our adapter
+- WCID WCID Entry number.
+- BssIndex BSSID index, station or none multiple BSSID support
+- this value should be 0.
+- KeyIdx This KeyIdx will set to IV's KeyID if bTxKey enabled
+- pCipherKey Pointer to Cipher Key.
+- bUsePairewiseKeyTable TRUE means saved the key in SharedKey table,
+- otherwise PairewiseKey table
+- bTxKey This is the transmit key if enabled.
+-
+- Return Value:
+- None
+-
+- Note:
+- This routine will set the relative key stuff to Asic including WCID attribute,
+- Cipher Key, Cipher algorithm and IV/EIV.
+-
+- IV/EIV will be update if this CipherKey is the transmission key because
+- ASIC will base on IV's KeyID value to select Cipher Key.
+-
+- If bTxKey sets to FALSE, this is not the TX key, but it could be
+- RX key
+-
+- 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,
+- IN PCIPHER_KEY pCipherKey,
+- IN BOOLEAN bUsePairewiseKeyTable,
+- IN BOOLEAN bTxKey)
+-{
+- ULONG offset;
+- UCHAR IV4 = 0;
+- PUCHAR pKey = pCipherKey->Key;
+- 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; i<MAX_LEN_OF_PEER_KEY; i++)
+- {
+- RTMP_IO_WRITE8(pAd, offset + i, pKey[i]);
+- }
+-#endif
+-#ifdef RT2870
+- RTUSBMultiWrite(pAd, offset, &pCipherKey->Key[0], MAX_LEN_OF_PEER_KEY);
+-#endif // RT2870 //
+- for (i=0; i<MAX_LEN_OF_PEER_KEY; i+=4)
+- {
+- UINT32 Value;
+- RTMP_IO_READ32(pAd, offset + i, &Value);
+- }
+-
+- offset += MAX_LEN_OF_PEER_KEY;
+-
+- // MIC KEY
+- if (pTxMic)
+- {
+-#ifdef RT2860
+- for (i=0; i<8; i++)
+- {
+- RTMP_IO_WRITE8(pAd, offset+i, pTxMic[i]);
+- }
+-#endif
+-#ifdef RT2870
+- RTUSBMultiWrite(pAd, offset, &pCipherKey->TxMic[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; 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].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; i<MAX_BUSY_COUNT; i++)
++ {
++ RTMP_IO_READ32(pAd, RF_CSR_CFG, &rfcsr.word);
++
++ if (rfcsr.field.RF_CSR_KICK == BUSY)
++ {
++ continue;
++ }
++ rfcsr.word = 0;
++ rfcsr.field.RF_CSR_WR = 0;
++ rfcsr.field.RF_CSR_KICK = 1;
++ rfcsr.field.TESTCSR_RFACC_REGNUM = regID;
++ RTMP_IO_WRITE32(pAd, RF_CSR_CFG, rfcsr.word);
++ for (k=0; k<MAX_BUSY_COUNT; k++)
++ {
++ RTMP_IO_READ32(pAd, RF_CSR_CFG, &rfcsr.word);
++
++ if (rfcsr.field.RF_CSR_KICK == IDLE)
++ break;
++ }
++ if ((rfcsr.field.RF_CSR_KICK == IDLE) &&
++ (rfcsr.field.TESTCSR_RFACC_REGNUM == regID))
++ {
++ *pValue = (UCHAR)rfcsr.field.RF_CSR_DATA;
++ break;
++ }
++ }
++ if (rfcsr.field.RF_CSR_KICK == BUSY)
++ {
++ DBGPRINT_ERR(("RF read R%d=0x%x fail, i[%d], k[%d]\n", regID, rfcsr.word,i,k));
++ return STATUS_UNSUCCESSFUL;
++ }
++
++ return STATUS_SUCCESS;
++}
++
++
++VOID NICInitRFRegisters(
++ IN RTMP_ADAPTER *pAd)
++{
++ if (pAd->chipOps.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 <linux/bitrev.h>
+-#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; j<MAC_ADDR_LEN; j++)
+ {
+@@ -1389,9 +780,7 @@ VOID NICReadEEPROMParameters(
+ 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",
+- pAd->PermanentAddress[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; Index<NUM_MAC_REG_PARMS; Index++)
+ {
+-#ifdef RT3070
+- if ((MACRegTable[Index].Register == TX_SW_CFG0) && (IS_RT3070(pAd) || IS_RT3071(pAd)))
++#ifdef RT30xx
++ if ((MACRegTable[Index].Register == TX_SW_CFG0) && (IS_RT3070(pAd) || IS_RT3071(pAd) || IS_RT3572(pAd)))
+ {
+ MACRegTable[Index].Value = 0x00000400;
+ }
+-#endif // RT3070 //
++#endif // RT30xx //
+ RTMP_IO_WRITE32(pAd, (USHORT)MACRegTable[Index].Register, MACRegTable[Index].Value);
+ }
+-#endif // RT2870 //
+
+ {
+ for (Index = 0; Index < NUM_STA_MAC_REG_PARMS; Index++)
+ {
+-#ifdef RT2860
+- RTMP_IO_WRITE32(pAd, STAMACRegTable[Index].Register, STAMACRegTable[Index].Value);
+-#endif
+-#ifdef RT2870
+ RTMP_IO_WRITE32(pAd, (USHORT)STAMACRegTable[Index].Register, STAMACRegTable[Index].Value);
+-#endif
+ }
+ }
++#endif // RTMP_MAC_USB //
+
+- // Initialize RT3070 serial MAc registers which is different from RT2870 serial
+- if (IS_RT3090(pAd))
++#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);
+
+@@ -2197,7 +1668,7 @@ NDIS_STATUS NICInitializeAsic(
+ {
+ if (pAd->NicConfig2.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; i<MAX_FIRMWARE_IMAGE_SIZE; i+=4)
+- RTMP_IO_WRITE32(pAd, FIRMWARE_IMAGE_BASE + i, 0);
++ return status;
++}
+
+-}/* End of NICEraseFirmware */
+
+ /*
+ ========================================================================
+
+ Routine Description:
+- Load 8051 firmware RT2561.BIN file into MAC ASIC
++ erase 8051 firmware image in MAC ASIC
+
+ Arguments:
+ Adapter Pointer to our adapter
+
+- Return Value:
+- NDIS_STATUS_SUCCESS firmware image load ok
+- NDIS_STATUS_FAILURE image not found
+-
+ IRQL = PASSIVE_LEVEL
+
+ ========================================================================
+ */
+-NDIS_STATUS NICLoadFirmware(
++VOID NICEraseFirmware(
+ IN PRTMP_ADAPTER pAd)
+ {
+- NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
+- PUCHAR pFirmwareImage;
+- ULONG FileLength, Index;
+- //ULONG firm;
+- UINT32 MacReg = 0;
+-#ifdef RT2870
+- UINT32 Version = (pAd->MACVersion >> 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_index<SHARE_KEY_NUM; key_index++)
+ {
+@@ -3314,19 +2578,17 @@ VOID UserCfgInit(
+ }
+ }
+
+-#ifdef RT2870
+ pAd->EepromAccess = 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; index<pAd->CommonCfg.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 <linux/bitrev.h>
++
++//#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; i<MAX_FIRMWARE_IMAGE_SIZE; i+=4)
++ RTMP_IO_WRITE32(pAd, FIRMWARE_IMAGE_BASE + i, 0);
++
++ return 0;
++}
++
++/*
++ ========================================================================
++
++ Routine Description:
++ Load 8051 firmware file into MAC ASIC
++
++ Arguments:
++ Adapter Pointer to our adapter
++
++ Return Value:
++ NDIS_STATUS_SUCCESS firmware image load ok
++ NDIS_STATUS_FAILURE image not found
++
++ IRQL = PASSIVE_LEVEL
++
++ ========================================================================
++*/
++NDIS_STATUS RtmpAsicLoadFirmware(
++ IN PRTMP_ADAPTER pAd)
++{
++
++ NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
++ PUCHAR pFirmwareImage;
++ 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))
++ {
++ 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 <TIMER_QUEUE_SIZE_MAX; i++)
++ {
++ pQNode->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 <linux/usb.h>
++
++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 <linux/wireless.h>
+
++#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 at UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL terminationc
++//#define MAX_NUM_OF_CHS 49 // 14 channels @2.4G + 12 at UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL terminationc
++#define MAX_NUM_OF_CHS 54 // 14 channels @2.4G + 12 at UNII(lower/middle) + 16 at HiperLAN2 + 11 at 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 <linux/pci.h>
++
++//
++// 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 <linux/module.h>
+ #include <linux/kernel.h>
+-
+ #include <linux/spinlock.h>
+ #include <linux/init.h>
+ #include <linux/string.h>
+@@ -69,60 +64,80 @@
+ #define __KERNEL_SYSCALLS__
+ #include <linux/unistd.h>
+ #include <asm/uaccess.h>
++#include <asm/types.h>
++#include <asm/unaligned.h> // 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 <linux/err.h>
++#include <linux/kthread.h>
++#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; index<pAd->CommonCfg.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 <linux/pci.h>
++
++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; i++)
+- {
+- temp1 = *(s1+i);
+- temp2 = *(s2+i);
+-
+- if (('a' <= temp1) && (temp1 <= 'z'))
+- temp1 = 'A'+(temp1-'a');
+- if (('a' <= temp2) && (temp2 <= 'z'))
+- temp2 = 'A'+(temp2-'a');
+-
+- if (temp1 != temp2)
+- break;
+- }
+-
+- if (i == l2)
+- return (char *) s1;
+-
+- s1++;
+- }
+-
+- return NULL; // not found
+-}
+-
+-//add by kathy
+-
+- /**
+- * strstr - Find the first substring in a %NUL terminated string
+- * @s1: The string to be searched
+- * @s2: The string to search for
+- */
+-char * rtstrstr(const char * s1,const char * s2)
+-{
+- INT l1, l2;
+-
+- l2 = strlen(s2);
+- if (!l2)
+- return (char *) s1;
+-
+- l1 = strlen(s1);
+-
+- while (l1 >= 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<start_ptr)
+- {
+- os_free_mem(NULL, temp_buf1);
+- os_free_mem(NULL, temp_buf2);
+- return (FALSE);
+- }
+-
+- 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( (*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;
+-}
+-
+-/*
+- ========================================================================
+-
+- 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
++#include "rt_config.h"
+
+- Return Value:
+- TRUE Success
+- FALSE Fail
+
+- Note:
+- This routine get the value with the matched key (case case-sensitive).
+- It is called for parsing SSID and any key string.
+- ========================================================================
+-*/
+-INT RTMPGetCriticalParameter(
+- IN PCHAR key,
+- OUT PCHAR dest,
+- IN INT destsize,
+- IN PCHAR buffer)
++NDIS_STATUS RTMPReadParametersHook(
++ IN PRTMP_ADAPTER pAd)
+ {
+- UCHAR *temp_buf1 = NULL;
+- UCHAR *temp_buf2 = NULL;
+- CHAR *start_ptr;
+- CHAR *end_ptr;
+- CHAR *ptr;
+- CHAR *offset = 0;
+- INT len;
++ PSTRING src = NULL;
++ RTMP_OS_FD srcf;
++ RTMP_OS_FS_INFO osFSInfo;
++ INT retval = NDIS_STATUS_FAILURE;
++ PSTRING buffer;
+
+- //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<start_ptr)
+- {
+- os_free_mem(NULL, temp_buf1);
+- os_free_mem(NULL, temp_buf2);
+- return (FALSE);
+- }
++ buffer = kmalloc(MAX_INI_BUFFER_SIZE, MEM_ALLOC_FLAG);
++ if(buffer == NULL)
++ return NDIS_STATUS_FAILURE;
++ memset(buffer, 0x00, MAX_INI_BUFFER_SIZE);
+
+- 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 tab
+- /* We cannot trim space(' ') for SSID and key string. */
+- while(*ptr != 0x00)
+ {
+- //if( (*ptr == ' ') || (*ptr == '\t') )
+- if( (*ptr == '\t') )
+- ptr++;
+- else
+- break;
++ src = STA_PROFILE_PATH;
+ }
+-
+- 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;
+-}
+-
+-/*
+- ========================================================================
+-
+- Routine Description:
+- Get multiple 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 RTMPGetKeyParameterWithOffset(
+- IN PCHAR key,
+- OUT PCHAR dest,
+- OUT USHORT *end_offset,
+- IN INT destsize,
+- IN PCHAR buffer,
+- IN BOOLEAN bTrimSpace)
+-{
+- UCHAR *temp_buf1 = NULL;
+- UCHAR *temp_buf2 = NULL;
+- CHAR *start_ptr;
+- CHAR *end_ptr;
+- CHAR *ptr;
+- CHAR *offset = 0;
+- INT len;
+-
+- if (*end_offset >= MAX_INI_BUFFER_SIZE)
+- return (FALSE);
+-
+- os_alloc_mem(NULL, &temp_buf1, MAX_PARAM_BUFFER_SIZE);
+-
+- if(temp_buf1 == NULL)
+- return (FALSE);
+-
+- 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(*end_offset == 0)
++ if (src && *src)
+ {
+- if ((offset = RTMPFindSection(buffer)) == NULL)
++ RtmpOSFSInfoChange(&osFSInfo, TRUE);
++ srcf = RtmpOSFileOpen(src, O_RDONLY, 0);
++ if (IS_FILE_OPEN_ERR(srcf))
+ {
+- os_free_mem(NULL, temp_buf1);
+- os_free_mem(NULL, temp_buf2);
+- return (FALSE);
+- }
++ DBGPRINT(RT_DEBUG_ERROR, ("Open file \"%s\" failed!\n", src));
+ }
+ else
+- offset = buffer + (*end_offset);
+-
+- 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<start_ptr)
++ retval =RtmpOSFileRead(srcf, buffer, MAX_INI_BUFFER_SIZE);
++ if (retval > 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; i<MAX_BUSY_COUNT; i++) \
+- { \
+- RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
+- if (BbpCsr.field.Busy == BUSY) \
+- { \
+- continue; \
+- } \
+- BbpCsr.word = 0; \
+- BbpCsr.field.fRead = 1; \
+- BbpCsr.field.BBP_RW_MODE = 1; \
+- BbpCsr.field.Busy = 1; \
+- BbpCsr.field.RegNum = _I; \
+- RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
+- for (k=0; k<MAX_BUSY_COUNT; k++) \
+- { \
+- RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
+- if (BbpCsr.field.Busy == IDLE) \
+- break; \
+- } \
+- if ((BbpCsr.field.Busy == IDLE) && \
+- (BbpCsr.field.RegNum == _I)) \
+- { \
+- *(_pV) = (UCHAR)BbpCsr.field.Value; \
+- break; \
+- } \
+- } \
+- if (BbpCsr.field.Busy == BUSY) \
+- { \
+- DBGPRINT_ERR(("DFS BBP read R%d fail\n", _I)); \
+- *(_pV) = (_A)->BbpWriteLatch[_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; i<MAX_BUSY_COUNT; i++) \
+- { \
+- RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
+- if (BbpCsr.field.Busy == BUSY) \
+- { \
+- continue; \
+- } \
+- BbpCsr.word = 0; \
+- BbpCsr.field.fRead = 1; \
+- BbpCsr.field.BBP_RW_MODE = 1; \
+- BbpCsr.field.Busy = 1; \
+- BbpCsr.field.RegNum = _I; \
+- RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
+- AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
+- RTMPusecDelay(1000); \
+- for (k=0; k<MAX_BUSY_COUNT; k++) \
+- { \
+- RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
+- if (BbpCsr.field.Busy == IDLE) \
+- break; \
+- } \
+- if ((BbpCsr.field.Busy == IDLE) && \
+- (BbpCsr.field.RegNum == _I)) \
+- { \
+- *(_pV) = (UCHAR)BbpCsr.field.Value; \
+- break; \
+- } \
+- } \
+- if (BbpCsr.field.Busy == BUSY) \
+- { \
+- DBGPRINT_ERR(("BBP read R%d=0x%x fail\n", _I, BbpCsr.word)); \
+- *(_pV) = (_A)->BbpWriteLatch[_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; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
+- { \
+- RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
+- if (BbpCsr.field.Busy == BUSY) \
+- continue; \
+- BbpCsr.word = 0; \
+- BbpCsr.field.fRead = 0; \
+- BbpCsr.field.BBP_RW_MODE = 1; \
+- BbpCsr.field.Busy = 1; \
+- BbpCsr.field.Value = _V; \
+- BbpCsr.field.RegNum = _I; \
+- RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
+- (_A)->BbpWriteLatch[_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; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
+- { \
+- RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
+- if (BbpCsr.field.Busy == BUSY) \
+- continue; \
+- BbpCsr.word = 0; \
+- BbpCsr.field.fRead = 0; \
+- BbpCsr.field.BBP_RW_MODE = 1; \
+- BbpCsr.field.Busy = 1; \
+- BbpCsr.field.Value = _V; \
+- BbpCsr.field.RegNum = _I; \
+- RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
+- AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
+- if (_A->OpMode == 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, ("<CCX> 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; i<SHARE_KEY_NUM; i++)
+- {
+- if (pAd->SharedKey[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; i<SHARE_KEY_NUM; i++)
+- {
+- if (pAd->SharedKey[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; i<MAX_LEN_OF_MAC_TABLE; i++)
+ {
+ if (pAd->MacTab.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<<UserPriority)) == 0) &&
+ ((pEntry->BADeclineBitmap & (1<<UserPriority)) == 0) &&
+ (pEntry->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; i<MAX_LEN_OF_MAC_TABLE; i++)
++ {
++ PMAC_TABLE_ENTRY pEntry = &pAd->MacTab.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 <paul_lin at ralinktech.com>");
++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; i<rtusb_usb_id_len; i++)
++ {
++ if (dev_p->descriptor.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; 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))
++ {
++ // 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]<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;
++ }
++ }
++ 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 <paul_lin at ralinktech.com>");
+-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 <TIMER_QUEUE_SIZE_MAX; i++)
+- {
+- pQNode->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; i<rtusb_usb_id_len; i++)
+- {
+- if (dev_p->descriptor.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; 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 = 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; i<TXWI_SIZE; i+=4) {
+- RTMP_IO_WRITE32(pAd, pAd->BeaconOffset[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; 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);
+- 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; i<NumOfBcn; i++)
+- {
+- NdisZeroMemory(pBeaconSync->BeaconBuf[i], HW_BEACON_OFFSET);
+- NdisZeroMemory(pBeaconSync->BeaconTxWI[i], TXWI_SIZE);
+-
+- 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;
+- }
+- 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; apidx<NumOfBcn; apidx++)
+- {
+- UCHAR CapabilityInfoLocationInBeacon = 0;
+- UCHAR TimIELocationInBeacon = 0;
+-
+- 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;
+- 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; 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);
+- }
+-
+- 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; i<BEACON_RING_SIZE; i++) // 2
+- {
+- 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);
+-
+- 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; 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)
+- {
+- pMgmtRing = &pAd->MgmtRing;
+- 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));
+- }
+- 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; num<MAX_LEN_OF_BA_REC_TABLE; num++)
+-// {
+-// NdisAllocateSpinLock(&pAd->BATable.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; 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;
+- //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; i<MAX_LEN_OF_BA_REC_TABLE; i++)
+-// {
+-// NdisFreeSpinLock(&pAd->BATable.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; i<MAC_ADDR_LEN; i++)
+- {
+- RTMP_IO_WRITE8(pAd, offset+i, pKey->BSSID[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; i<pKey->KeyLength; 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; i<MAX_BUSY_COUNT; i++)
+- {
+- RTUSBReadMACRegister(pAd, H2M_BBP_AGENT, &BbpCsr.word);
+- if (BbpCsr.field.Busy == BUSY)
+- {
+- continue;
+- }
+- BbpCsr.word = 0;
+- BbpCsr.field.fRead = 1;
+- BbpCsr.field.BBP_RW_MODE = 1;
+- BbpCsr.field.Busy = 1;
+- BbpCsr.field.RegNum = Id;
+- RTUSBWriteMACRegister(pAd, H2M_BBP_AGENT, BbpCsr.word);
+- AsicSendCommandToMcu(pAd, 0x80, 0xff, 0x0, 0x0);
+- for (k=0; k<MAX_BUSY_COUNT; k++)
+- {
+- RTUSBReadMACRegister(pAd, H2M_BBP_AGENT, &BbpCsr.word);
+- if (BbpCsr.field.Busy == IDLE)
+- break;
+- }
+- if ((BbpCsr.field.Busy == IDLE) &&
+- (BbpCsr.field.RegNum == Id))
+- {
+- *pValue = (UCHAR)BbpCsr.field.Value;
+- break;
+- }
+- }
+- if (BbpCsr.field.Busy == BUSY)
+- {
+- DBGPRINT_ERR(("BBP read R%d=0x%x fail\n", Id, BbpCsr.word));
+- *pValue = pAd->BbpWriteLatch[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; BusyCnt<MAX_BUSY_COUNT; BusyCnt++)
+- {
+- RTMP_IO_READ32(pAd, H2M_BBP_AGENT, &BbpCsr.word);
+- if (BbpCsr.field.Busy == BUSY)
+- continue;
+- BbpCsr.word = 0;
+- BbpCsr.field.fRead = 0;
+- BbpCsr.field.BBP_RW_MODE = 1;
+- BbpCsr.field.Busy = 1;
+- BbpCsr.field.Value = Value;
+- BbpCsr.field.RegNum = Id;
+- RTMP_IO_WRITE32(pAd, H2M_BBP_AGENT, BbpCsr.word);
+- AsicSendCommandToMcu(pAd, 0x80, 0xff, 0x0, 0x0);
+- pAd->BbpWriteLatch[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; i<MAX_BUSY_COUNT; i++)
+- {
+- RTMP_IO_READ32(pAd, RF_CSR_CFG, &rfcsr.word);
+-
+- if (rfcsr.field.RF_CSR_KICK == BUSY)
+- {
+- continue;
+- }
+- rfcsr.word = 0;
+- rfcsr.field.RF_CSR_WR = 0;
+- rfcsr.field.RF_CSR_KICK = 1;
+- rfcsr.field.TESTCSR_RFACC_REGNUM = RegID;
+- RTMP_IO_WRITE32(pAd, RF_CSR_CFG, rfcsr.word);
+- for (k=0; k<MAX_BUSY_COUNT; k++)
+- {
+- RTMP_IO_READ32(pAd, RF_CSR_CFG, &rfcsr.word);
+-
+- if (rfcsr.field.RF_CSR_KICK == IDLE)
+- break;
+- }
+- if ((rfcsr.field.RF_CSR_KICK == IDLE) &&
+- (rfcsr.field.TESTCSR_RFACC_REGNUM == RegID))
+- {
+- *pValue = (UCHAR)rfcsr.field.RF_CSR_DATA;
+- break;
+- }
+- }
+- if (rfcsr.field.RF_CSR_KICK == BUSY)
+- {
+- DBGPRINT_ERR(("RF read R%d=0x%x fail, i[%d], k[%d]\n", RegID, rfcsr.word,i,k));
+- return STATUS_UNSUCCESSFUL;
+- }
+-
+- return STATUS_SUCCESS;
+-}
+
+ /*
+ ========================================================================
+@@ -801,10 +553,6 @@ NTSTATUS RTUSBReadEEPROM(
+ {
+ NTSTATUS Status = STATUS_SUCCESS;
+
+- if(pAd->bUseEfuse)
+- 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 <MAX_PARAM_BUFFER_SIZE);
++
++ tmpBuf = (void *)pAd->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 <linux/usb.h>
+-
+-/* 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0002-Staging-rt28x0-remove-unused-code-from-common-dfs.c.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0002-Staging-rt28x0-remove-unused-code-from-common-dfs.c.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,496 @@
+From d040160beeb549525fb1098db3ff84b06d87620d Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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; i<pAd->ChannelListNum; 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0003-Staging-rt2860-add-RT3090-chipset-support.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0003-Staging-rt2860-add-RT3090-chipset-support.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,3191 @@
+From 28cb0d836a8f034fd97351538ccf15d1d40ba0f6 Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+[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; i<MAX_BUSY_COUNT; i++) \
++ { \
++ RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
++ if (BbpCsr.field.Busy == BUSY) \
++ { \
++ continue; \
++ } \
++ BbpCsr.word = 0; \
++ BbpCsr.field.fRead = 1; \
++ BbpCsr.field.BBP_RW_MODE = 1; \
++ BbpCsr.field.Busy = 1; \
++ BbpCsr.field.RegNum = _I; \
++ RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
++ brc = AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
++ if (brc == TRUE) \
++ { \
++ for (k=0; k<MAX_BUSY_COUNT; k++) \
++ { \
++ RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
++ if (BbpCsr.field.Busy == IDLE) \
++ break; \
++ } \
++ if ((BbpCsr.field.Busy == IDLE) && \
++ (BbpCsr.field.RegNum == _I)) \
++ { \
++ *(_pV) = (UCHAR)BbpCsr.field.Value; \
++ break; \
++ } \
++ } \
++ else \
++ { \
++ BbpCsr.field.Busy = 0; \
++ RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
++ } \
++ } \
++ } \
++ 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)) \
++ { \
++ for (i=0; i<MAX_BUSY_COUNT; i++) \
++ { \
++ RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
++ if (BbpCsr.field.Busy == BUSY) \
++ { \
++ continue; \
++ } \
++ BbpCsr.word = 0; \
++ BbpCsr.field.fRead = 1; \
++ BbpCsr.field.BBP_RW_MODE = 1; \
++ BbpCsr.field.Busy = 1; \
++ BbpCsr.field.RegNum = _I; \
++ RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
++ AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
++ for (k=0; k<MAX_BUSY_COUNT; k++) \
++ { \
++ RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
++ if (BbpCsr.field.Busy == IDLE) \
++ break; \
++ } \
++ if ((BbpCsr.field.Busy == IDLE) && \
++ (BbpCsr.field.RegNum == _I)) \
++ { \
++ *(_pV) = (UCHAR)BbpCsr.field.Value; \
++ break; \
++ } \
++ } \
++ } \
++ else \
++ { \
++ DBGPRINT_ERR((" , brt30xxBanMcuCmd = %d, Read BBP %d \n", (_A)->brt30xxBanMcuCmd, (_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; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
++ { \
++ RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
++ if (BbpCsr.field.Busy == BUSY) \
++ continue; \
++ BbpCsr.word = 0; \
++ BbpCsr.field.fRead = 0; \
++ BbpCsr.field.BBP_RW_MODE = 1; \
++ BbpCsr.field.Busy = 1; \
++ BbpCsr.field.Value = _V; \
++ BbpCsr.field.RegNum = _I; \
++ RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
++ brc = AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
++ if (brc == TRUE) \
++ { \
++ (_A)->BbpWriteLatch[_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; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
++ { \
++ RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
++ if (BbpCsr.field.Busy == BUSY) \
++ continue; \
++ BbpCsr.word = 0; \
++ BbpCsr.field.fRead = 0; \
++ BbpCsr.field.BBP_RW_MODE = 1; \
++ BbpCsr.field.Busy = 1; \
++ BbpCsr.field.Value = _V; \
++ BbpCsr.field.RegNum = _I; \
++ RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
++ AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
++ (_A)->BbpWriteLatch[_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<NUM_MAC_REG_PARMS; Index++)
+ {
+ #ifdef RT30xx
+- if ((MACRegTable[Index].Register == TX_SW_CFG0) && (IS_RT3070(pAd) || IS_RT3071(pAd) || IS_RT3572(pAd)))
++ if ((MACRegTable[Index].Register == TX_SW_CFG0) && (IS_RT3070(pAd) || IS_RT3071(pAd) || IS_RT3572(pAd) || IS_RT3090(pAd) || IS_RT3390(pAd)))
+ {
+ MACRegTable[Index].Value = 0x00000400;
+ }
+@@ -1713,6 +1740,11 @@ NDIS_STATUS NICInitializeAsic(
+ // 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
+@@ -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 <linux/pci.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("Jett Chen <jett_chen at ralinktech.com>");
++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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0004-Staging-remove-no-longer-needed-rt3090-driver.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0004-Staging-remove-no-longer-needed-rt3090-driver.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,105373 @@
+From cc0d945aede2b97374a5652bb61677e05932ed6e Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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 <jett_chen at ralinktech.com>");
+ 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; __IdAc<WMM_NUM_OF_AC; __IdAc++) \
+- InitializeQueueHeader(&(__pEntry)->UAPSDQueue[__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; __IdAc<WMM_NUM_OF_AC; __IdAc++) \
+- APCleanupPsQueue((__pAd), &__pSta->UAPSDQueue[__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 <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);
+- }
+- 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 <NUM_OF_TID; i++)
+- {
+- idx = pEntry->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; i<num; i++)
+- {
+- /* get mpdu_blk */
+- mpdu_blk = (struct reordering_mpdu *) mem;
+- /* initial mpdu_blk */
+- NdisZeroMemory(mpdu_blk, sizeof(struct reordering_mpdu));
+- /* next mpdu_blk */
+- mem += sizeof(struct reordering_mpdu);
+- /* insert mpdu_blk into freelist */
+- ba_enqueue(freelist, mpdu_blk);
+- }
+-
+- return(TRUE);
+-}
+-
+-//static int blk_count=0; // sample take off, no use
+-
+-static struct reordering_mpdu *ba_mpdu_blk_alloc(PRTMP_ADAPTER pAd)
+-{
+- struct reordering_mpdu *mpdu_blk;
+-
+- NdisAcquireSpinLock(&pAd->mpdu_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<<TID)) && (isForced == FALSE))
+- {
+- // try again after 3 secs
+- DelayTime = 3000;
+-// DBGPRINT(RT_DEBUG_TRACE, ("DeCline BA from Peer\n"));
+-// return;
+- }
+-
+-
+- Idx = pEntry->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<<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)
+-{
+- 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<<TID);
+- RTMPCancelTimer(&pBAEntry->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<<TID))
+- {
+- RTMPCancelTimer(&pBAEntry->RECBATimer, &Cancelled);
+- }
+- else
+- {
+- RTMPInitTimer(pAd, &pBAEntry->RECBATimer, GET_TIMER_FUNCTION(BARecSessionIdleTimeout), pBAEntry, TRUE);
+- }
+-
+-
+- // Set Bitmap flag.
+- pEntry->RXBAbitmap |= (1<<TID);
+- pEntry->BARecWcidArray[TID] = Idx;
+-
+- pEntry->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
+- {
+- 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; 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;
+- 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; i<NUM_OF_TID; i++)
+- {
+- BAOriSessionTearDown(pAd, Wcid, i, FALSE, FALSE);
+- BARecSessionTearDown(pAd, Wcid, i, FALSE);
+- }
+-}
+-
+-
+-/*
+- ==========================================================================
+- 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 BAOriSessionSetupTimeout(
+- IN PVOID SystemSpecific1,
+- IN PVOID FunctionContext,
+- IN PVOID SystemSpecific2,
+- IN PVOID SystemSpecific3)
+-{
+- BA_ORI_ENTRY *pBAEntry = (BA_ORI_ENTRY *)FunctionContext;
+- MAC_TABLE_ENTRY *pEntry;
+- PRTMP_ADAPTER pAd;
+-
+- if (pBAEntry == NULL)
+- return;
+-
+- pAd = pBAEntry->pAdapter;
+-
+-#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<<pFrame->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; i<n-1; i++)
+- {
+- xor_128(X, &input[16*i], Y);
+- rt_aes_set_key(&aesctx, key, 128);
+- rt_aes_encrypt(&aesctx, Y, X);
+- }
+-
+- xor_128(X, M_last, Y);
+- rt_aes_set_key(&aesctx, key, 128);
+- rt_aes_encrypt(&aesctx, Y, X);
+-
+- for (i=0; i<16; i++)
+- {
+- mac[i] = X[i];
+- }
+-
+-}
+-/* ======= The related function of AES-128-CMAC ======= */
+diff --git a/drivers/staging/rt3090/common/cmm_asic.c b/drivers/staging/rt3090/common/cmm_asic.c
+deleted file mode 100644
+index 3d1c808..0000000
+--- a/drivers/staging/rt3090/common/cmm_asic.c
++++ /dev/null
+@@ -1,2753 +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_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;
+-#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; 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, 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);
+- 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; 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 )
+- {
+- // 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; i<MAX_LEN_OF_SHARE_KEY; i++)
+- {
+- RTMP_IO_WRITE8(pAd, offset + i, pKey[i]);
+- }
+-
+- offset += MAX_LEN_OF_SHARE_KEY;
+- if (pTxMic)
+- {
+- for (i=0; i<8; i++)
+- {
+- RTMP_IO_WRITE8(pAd, offset + i, pTxMic[i]);
+- }
+- }
+-
+- offset += 8;
+- if (pRxMic)
+- {
+- for (i=0; i<8; i++)
+- {
+- RTMP_IO_WRITE8(pAd, offset + i, pRxMic[i]);
+- }
+- }
+-#endif // RTMP_MAC_PCI //
+-
+-
+- //
+- // Update cipher algorithm. WSTA always use BSS0
+- //
+- RTMP_IO_READ32(pAd, SHARED_KEY_MODE_BASE+4*(BssIndex/2), &csr1.word);
+- DBGPRINT(RT_DEBUG_TRACE,("Read: SHARED_KEY_MODE_BASE at this Bss[%d] KeyIdx[%d]= 0x%x \n", BssIndex,KeyIdx, 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;
+- }
+- DBGPRINT(RT_DEBUG_TRACE,("Write: SHARED_KEY_MODE_BASE at this Bss[%d] = 0x%x \n", BssIndex, csr1.word));
+- RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE+4*(BssIndex/2), csr1.word);
+-
+-}
+-
+-// IRQL = DISPATCH_LEVEL
+-VOID AsicRemoveSharedKeyEntry(
+- IN PRTMP_ADAPTER pAd,
+- IN UCHAR BssIndex,
+- IN UCHAR KeyIdx)
+-{
+- //ULONG SecCsr0;
+- SHAREDKEY_MODE_STRUC csr1;
+-
+- DBGPRINT(RT_DEBUG_TRACE,("AsicRemoveSharedKeyEntry: #%d \n", BssIndex*4 + KeyIdx));
+-
+- RTMP_IO_READ32(pAd, SHARED_KEY_MODE_BASE+4*(BssIndex/2), &csr1.word);
+- if ((BssIndex%2) == 0)
+- {
+- if (KeyIdx == 0)
+- csr1.field.Bss0Key0CipherAlg = 0;
+- else if (KeyIdx == 1)
+- csr1.field.Bss0Key1CipherAlg = 0;
+- else if (KeyIdx == 2)
+- csr1.field.Bss0Key2CipherAlg = 0;
+- else
+- csr1.field.Bss0Key3CipherAlg = 0;
+- }
+- else
+- {
+- if (KeyIdx == 0)
+- csr1.field.Bss1Key0CipherAlg = 0;
+- else if (KeyIdx == 1)
+- csr1.field.Bss1Key1CipherAlg = 0;
+- else if (KeyIdx == 2)
+- csr1.field.Bss1Key2CipherAlg = 0;
+- else
+- csr1.field.Bss1Key3CipherAlg = 0;
+- }
+- DBGPRINT(RT_DEBUG_TRACE,("Write: SHARED_KEY_MODE_BASE at this Bss[%d] = 0x%x \n", BssIndex, csr1.word));
+- RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE+4*(BssIndex/2), csr1.word);
+- ASSERT(BssIndex < 4);
+- ASSERT(KeyIdx < 4);
+-
+-}
+-
+-
+-VOID AsicUpdateWCIDAttribute(
+- IN PRTMP_ADAPTER pAd,
+- IN USHORT WCID,
+- IN UCHAR BssIndex,
+- IN UCHAR CipherAlg,
+- IN BOOLEAN bUsePairewiseKeyTable)
+-{
+- ULONG WCIDAttri = 0, offset;
+-
+- //
+- // 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);
+- RTMP_IO_WRITE32(pAd, offset, WCIDAttri);
+-}
+-
+-VOID AsicUpdateWCIDIVEIV(
+- IN PRTMP_ADAPTER pAd,
+- IN USHORT WCID,
+- IN ULONG uIV,
+- IN ULONG uEIV)
+-{
+- ULONG offset;
+-
+- offset = MAC_IVEIV_TABLE_BASE + (WCID * HW_IVEIV_ENTRY_SIZE);
+-
+- RTMP_IO_WRITE32(pAd, offset, uIV);
+- RTMP_IO_WRITE32(pAd, offset + 4, uEIV);
+-}
+-
+-VOID AsicUpdateRxWCIDTable(
+- IN PRTMP_ADAPTER pAd,
+- IN USHORT WCID,
+- IN PUCHAR pAddr)
+-{
+- ULONG offset;
+- ULONG Addr;
+-
+- offset = MAC_WCID_BASE + (WCID * HW_WCID_ENTRY_SIZE);
+- Addr = pAddr[0] + (pAddr[1] << 8) +(pAddr[2] << 16) +(pAddr[3] << 24);
+- RTMP_IO_WRITE32(pAd, offset, Addr);
+- Addr = pAddr[4] + (pAddr[5] << 8);
+- RTMP_IO_WRITE32(pAd, offset + 4, Addr);
+-}
+-
+-
+-/*
+- ========================================================================
+-
+- Routine Description:
+- Set Cipher Key, Cipher algorithm, IV/EIV to Asic
+-
+- Arguments:
+- pAd Pointer to our adapter
+- WCID WCID Entry number.
+- BssIndex BSSID index, station or none multiple BSSID support
+- this value should be 0.
+- KeyIdx This KeyIdx will set to IV's KeyID if bTxKey enabled
+- pCipherKey Pointer to Cipher Key.
+- bUsePairewiseKeyTable TRUE means saved the key in SharedKey table,
+- otherwise PairewiseKey table
+- bTxKey This is the transmit key if enabled.
+-
+- Return Value:
+- None
+-
+- Note:
+- This routine will set the relative key stuff to Asic including WCID attribute,
+- Cipher Key, Cipher algorithm and IV/EIV.
+-
+- IV/EIV will be update if this CipherKey is the transmission key because
+- ASIC will base on IV's KeyID value to select Cipher Key.
+-
+- If bTxKey sets to FALSE, this is not the TX key, but it could be
+- RX key
+-
+- 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,
+- 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;
+- 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; i<MAX_LEN_OF_PEER_KEY; i++)
+- {
+- RTMP_IO_WRITE8(pAd, offset + i, pKey[i]);
+- }
+-#endif // RTMP_MAC_PCI //
+- for (i=0; i<MAX_LEN_OF_PEER_KEY; i+=4)
+- {
+- UINT32 Value;
+- RTMP_IO_READ32(pAd, offset + i, &Value);
+- }
+-
+- offset += MAX_LEN_OF_PEER_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 //
+- }
+- 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 //
+- }
+-
+- 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 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; i<MAX_LEN_OF_MAC_TABLE; i++)
+- {
+-#ifdef RTMP_MAC_PCI
+- RTMP_STA_ENTRY_MAC_RESET(pAd, i);
+-#endif // RTMP_MAC_PCI //
+- if (pAd->MacTab.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;i<TX_RING_SIZE;i++)
+- {
+- ptemp= (PULONG)pAd->TxRing[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;i<TX_RING_SIZE;i++)
+- {
+- ptemp= (PULONG)pAd->TxRing[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;i<TX_RING_SIZE;i++)
+- {
+- ptemp= (PULONG)pAd->TxRing[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;i<TX_RING_SIZE;i++)
+- {
+- ptemp= (PULONG)pAd->TxRing[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;i<MGMT_RING_SIZE;i++)
+- {
+- ptemp= (PULONG)pAd->MgmtRing.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;i<RX_RING_SIZE;i++)
+- {
+- ptemp = (UINT32 *)pAd->RxRing.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 <linux/sched.h>
+-#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;i<TX_RING_SIZE;i++)
+- {
+- pTxD = (PTXD_STRUC) pTxRing->Cell[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;i<MGMT_RING_SIZE;i++)
+- {
+- pTxD = (PTXD_STRUC) pMgmtRing->Cell[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;i<RX_RING_SIZE;i++)
+- {
+- pRxD = (PRT28XX_RXD_STRUC) pRxRing->Cell[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<strLen; i++)
+- {
+- if ((pInPutStr[i] < 0x21) ||
+- (pInPutStr[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<<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 (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; i<pAdapter->ScanTab.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; i<MAX_LEN_OF_MAC_TABLE; i++)
+- {
+- if (pAd->MacTab.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; i<MAX_LEN_OF_MAC_TABLE; i++)
+- {
+- PMAC_TABLE_ENTRY pEntry = &pAd->MacTab.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; 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)
+- //
+- 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);
+-
+- // 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; 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;
+- }
+-
+- 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; 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;
+-
+- 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);
+-
+- 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 <NUM_OF_TX_RING; index++)
+- {
+- PQUEUE_ENTRY pEntry;
+- PNDIS_PACKET pPacket;
+- PQUEUE_HEADER pQueue;
+-
+- RTMP_IRQ_LOCK(&pAd->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; i<TXWI_SIZE; i+=4)
+- RTMP_IO_WRITE32(pAd, pAd->BeaconOffset[bcn_idx] + i, 0x00);
+- }
+- else
+- {
+- ptr = (PUCHAR)&pAd->BeaconTxWI;
+-#ifdef RT_BIG_ENDIAN
+- RTMPWIEndianChange(ptr, TYPE_TXWI);
+-#endif
+- 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);
+- 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; i++)
+- {
+- temp1 = *(s1+i);
+- temp2 = *(s2+i);
+-
+- if (('a' <= temp1) && (temp1 <= 'z'))
+- temp1 = 'A'+(temp1-'a');
+- if (('a' <= temp2) && (temp2 <= 'z'))
+- temp2 = 'A'+(temp2-'a');
+-
+- if (temp1 != temp2)
+- break;
+- }
+-
+- if (i == l2)
+- return (char *) s1;
+-
+- s1++;
+- }
+-
+- return NULL; // not found
+-}
+-
+-//add by kathy
+-
+- /**
+- * strstr - Find the first substring in a %NUL terminated string
+- * @s1: The string to be searched
+- * @s2: The string to search for
+- */
+-PSTRING rtstrstr(PSTRING s1,const PSTRING s2)
+-{
+- INT l1, l2;
+-
+- l2 = strlen(s2);
+- if (!l2)
+- return s1;
+-
+- l1 = strlen(s1);
+-
+- while (l1 >= 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<start_ptr)
+- {
+- os_free_mem(NULL, (PUCHAR)pMemBuf);
+- return (FALSE);
+- }
+-
+- NdisMoveMemory(temp_buf2, start_ptr, end_ptr-start_ptr);
+- temp_buf2[end_ptr-start_ptr]='\0';
+- if((start_ptr=rtstrstr(temp_buf2, "=")) == NULL)
+- {
+- os_free_mem(NULL, (PUCHAR)pMemBuf);
+- return (FALSE);
+- }
+- ptr = (start_ptr +1);
+- //trim special characters, i.e., TAB or space
+- while(*start_ptr != 0x00)
+- {
+- if( ((*ptr == ' ') && bTrimSpace) || (*ptr == '\t') )
+- ptr++;
+- else
+- break;
+- }
+- len = strlen(start_ptr);
+-
+- memset(dest, 0x00, destsize);
+- strncpy(dest, ptr, ((len >= destsize) ? destsize: len));
+-
+- os_free_mem(NULL, (PUCHAR)pMemBuf);
+-
+- return TRUE;
+-}
+-
+-
+-/*
+- ========================================================================
+-
+- Routine Description:
+- Get multiple 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 RTMPGetKeyParameterWithOffset(
+- IN PSTRING key,
+- OUT PSTRING dest,
+- OUT USHORT *end_offset,
+- IN INT destsize,
+- IN PSTRING buffer,
+- IN BOOLEAN bTrimSpace)
+-{
+- PSTRING temp_buf1 = NULL;
+- PSTRING temp_buf2 = NULL;
+- PSTRING start_ptr;
+- PSTRING end_ptr;
+- PSTRING ptr;
+- PSTRING offset = 0;
+- INT len;
+-
+- if (*end_offset >= MAX_INI_BUFFER_SIZE)
+- return (FALSE);
+-
+- os_alloc_mem(NULL, (PUCHAR *)&temp_buf1, MAX_PARAM_BUFFER_SIZE);
+-
+- if(temp_buf1 == NULL)
+- return (FALSE);
+-
+- os_alloc_mem(NULL, (PUCHAR *)&temp_buf2, MAX_PARAM_BUFFER_SIZE);
+- if(temp_buf2 == NULL)
+- {
+- os_free_mem(NULL, (PUCHAR)temp_buf1);
+- return (FALSE);
+- }
+-
+- //find section
+- if(*end_offset == 0)
+- {
+- if ((offset = RTMPFindSection(buffer)) == NULL)
+- {
+- os_free_mem(NULL, (PUCHAR)temp_buf1);
+- os_free_mem(NULL, (PUCHAR)temp_buf2);
+- return (FALSE);
+- }
+- }
+- else
+- offset = buffer + (*end_offset);
+-
+- 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)temp_buf1);
+- os_free_mem(NULL, (PUCHAR)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<start_ptr)
+- {
+- os_free_mem(NULL, (PUCHAR)temp_buf1);
+- os_free_mem(NULL, (PUCHAR)temp_buf2);
+- return (FALSE);
+- }
+-
+- *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, (PUCHAR)temp_buf1);
+- os_free_mem(NULL, (PUCHAR)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, (PUCHAR)temp_buf1);
+- os_free_mem(NULL, (PUCHAR)temp_buf2);
+- return TRUE;
+-}
+-
+-
+-static int rtmp_parse_key_buffer_from_file(IN PRTMP_ADAPTER pAd,IN PSTRING buffer,IN ULONG KeyType,IN INT BSSIdx,IN INT KeyIdx)
+-{
+- PSTRING keybuff;
+- //INT i = BSSIdx, idx = KeyIdx, retVal;
+- ULONG KeyLen;
+- //UCHAR CipherAlg = CIPHER_WEP64;
+- CIPHER_KEY *pSharedKey;
+-
+- keybuff = buffer;
+- KeyLen = strlen(keybuff);
+- pSharedKey = &pAd->SharedKey[BSSIdx][KeyIdx];
+-
+- if(((KeyType != 0) && (KeyType != 1)) ||
+- ((KeyType == 0) && (KeyLen != 10) && (KeyLen != 26)) ||
+- ((KeyType== 1) && (KeyLen != 5) && (KeyLen != 13)))
+- {
+- DBGPRINT(RT_DEBUG_ERROR, ("Key%dStr is Invalid key length(%ld) or Type(%ld)\n",
+- KeyIdx+1, KeyLen, KeyType));
+- return FALSE;
+- }
+- else
+- {
+- return RT_CfgSetWepKey(pAd, buffer, pSharedKey, KeyIdx);
+- }
+-
+-}
+-
+-
+-static void rtmp_read_key_parms_from_file(IN PRTMP_ADAPTER pAd, PSTRING tmpbuf, PSTRING buffer)
+-{
+- STRING tok_str[16];
+- PSTRING macptr;
+- INT i = 0, idx;
+- ULONG KeyType[MAX_MBSSID_NUM];
+- ULONG KeyIdx;
+-
+- NdisZeroMemory(KeyType, sizeof(KeyType));
+-
+- //DefaultKeyID
+- if(RTMPGetKeyParameter("DefaultKeyID", tmpbuf, 25, buffer, TRUE))
+- {
+-
+-#ifdef CONFIG_STA_SUPPORT
+- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
+- {
+- 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));
+- }
+-#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; _len<strlen(card_id); _len++) { \
+- _char = *(txt_p + _len); \
+- if (('A' <= _char) && (_char <= 'Z')) \
+- *(txt_p+_len) = 'a'+(_char-'A'); \
+- } }
+-
+- RTMP_OS_FD srcf;
+- INT retval;
+- PSTRING buffer, tmpbuf;
+- STRING card_id_buf[30], RFIC_word[30];
+- BOOLEAN flg_match_ok = FALSE;
+- INT32 card_select_method;
+- INT32 card_free_id, card_nouse_id, card_same_mac_id, card_match_id;
+- EEPROM_ANTENNA_STRUC antenna;
+- USHORT addr01, addr23, addr45;
+- UINT8 mac[6];
+- UINT32 data, card_index;
+- UCHAR *start_ptr;
+- RTMP_OS_FS_INFO osFSInfo;
+-
+- // init
+- buffer = kmalloc(MAX_INI_BUFFER_SIZE, MEM_ALLOC_FLAG);
+- if (buffer == NULL)
+- return FALSE;
+-
+- tmpbuf = kmalloc(MAX_PARAM_BUFFER_SIZE, MEM_ALLOC_FLAG);
+- if(tmpbuf == NULL)
+- {
+- kfree(buffer);
+- return NDIS_STATUS_FAILURE;
+- }
+-
+- // get RF IC type
+- RTMP_IO_READ32(pAd, E2PROM_CSR, &data);
+-
+- if ((data & 0x30) == 0)
+- pAd->EEPROMAddressNum = 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<MAX_NUM_OF_MULTIPLE_CARD;
+- card_index++)
+- {
+- if ((*(UINT32 *)&MC_CardMac[card_index][0] == 0) &&
+- (*(UINT16 *)&MC_CardMac[card_index][4] == 0))
+- {
+- // MAC is all-0 so the entry is available
+- MC_CardUsed[card_index] = 0;
+-
+- if (card_free_id < 0)
+- card_free_id = card_index; // 1st free entry
+- }
+- else
+- {
+- if (memcmp(MC_CardMac[card_index], mac, 6) == 0)
+- {
+- // we find the entry with same MAC
+- if (card_same_mac_id < 0)
+- card_same_mac_id = card_index; // 1st same entry
+- }
+- else
+- {
+- // MAC is not all-0 but used flag == 0
+- if ((MC_CardUsed[card_index] == 0) &&
+- (card_nouse_id < 0))
+- {
+- card_nouse_id = card_index; // 1st available entry
+- }
+- }
+- }
+- }
+-
+- DBGPRINT(RT_DEBUG_TRACE,
+- ("MC> 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<MAX_NUM_OF_MULTIPLE_CARD;
+- card_index++)
+- {
+- sprintf(card_id_buf, "%02dCARDTYPE%s",
+- card_index, RFIC_word);
+-
+- if ((start_ptr = (PUCHAR)rtstrstruncasecmp(buffer,
+- card_id_buf)) != NULL)
+- {
+- LETTER_CASE_TRANSLATE(start_ptr, card_id_buf);
+-
+- if (MC_CardUsed[card_index] == 0)
+- {
+- /* current the card profile is not used */
+- if ((*(UINT32 *)&MC_CardMac[card_index][0] == 0) &&
+- (*(UINT16 *)&MC_CardMac[card_index][4] == 0))
+- {
+- // find it and no previous card use it
+- card_match_id = card_index;
+- break;
+- }
+- else
+- {
+- // ever a card use it
+- if (card_nouse_id < 0)
+- card_nouse_id = card_index;
+- }
+- }
+- }
+- }
+-
+- // if not find a free one, use the available one
+- if (card_match_id < 0)
+- card_match_id = card_nouse_id;
+- break;
+- }
+- }
+-
+- if (card_match_id >= 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; i<index; i++)
+- pAd->ChannelList[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; 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].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;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
+-}
+-
+-/*
+- ==========================================================================
+- 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; i<pAd->ChannelListNum; 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; i<pAd->ChannelListNum; 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<Length/2; i++)
+- *(pData+2*i) = 0xffff;
+- }
+- else
+- {
+- //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
+- 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.
+-#ifdef RT_BIG_ENDIAN
+- data = data << (8*((Offset & 0x3)^0x2));
+-#else
+- data = data >> (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<Length; i+=2)
+- {
+- eFusePhysicalReadRegisters(pAd,Offset+i, 2, &pOutBuf[i/2]);
+- }
+-}
+-
+-/*
+-========================================================================
+-
+- Routine Description:
+-
+- Arguments:
+-
+- Return Value:
+-
+- Note:
+-
+-========================================================================
+-*/
+-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; i<Length; i+=2)
+- {
+- EFSROM_AOUT = eFuseReadRegisters(pAd, Offset+i, 2, &pOutBuf[i/2]);
+- }
+- return Status;
+-}
+-
+-/*
+-========================================================================
+-
+- Routine Description:
+-
+- Arguments:
+-
+- Return Value:
+-
+- Note:
+-
+-========================================================================
+-*/
+-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 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);
+- break;
+- }
+- }
+- }
+- else
+- {
+- // invalidate the low byte
+- for (i=0; i<8; i++)
+- {
+- if( ( (InBuf[2] >> i) & 0x01) == 0)
+- {
+- InBuf[2] |= (0x1 <<i);
+- break;
+- }
+- }
+- }
+- eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 0);
+- }
+- }
+- while (!bWriteSuccess&&Loop<2);
+- if(!bWriteSuccess)
+- DBGPRINT(RT_DEBUG_ERROR,("Efsue Write Failed!!\n"));
+- return TRUE;
+-}
+-
+-
+-/*
+-========================================================================
+-
+- 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; i<Length; i+=2)
+- {
+- eFusePhysicalWriteRegisters(pAd, Offset+i, 2, &pValueX[i/2]);
+- }
+- }
+-}
+-
+-
+-/*
+-========================================================================
+-
+- Routine Description:
+-
+- Arguments:
+-
+- Return Value:
+-
+- Note:
+-
+-========================================================================
+-*/
+-NTSTATUS eFuseWrite(
+- IN PRTMP_ADAPTER pAd,
+- IN USHORT Offset,
+- IN PUCHAR pData,
+- IN USHORT length)
+-{
+- int i;
+- USHORT* pValueX = (PUSHORT) pData; //value ...
+-
+- // The input value=3070 will be stored as following
+- // Little-endian S | S Big-endian
+- // addr 1 0 | 0 1
+- // Ori-V 30 70 | 30 70
+- // After swapping
+- // 30 70 | 70 30
+- // Casting
+- // 3070 | 7030 (x)
+- // The swapping should be removed for big-endian
+- for(i=0; i<length; i+=2)
+- {
+- eFuseWriteRegisters(pAd, Offset+i, 2, &pValueX[i/2]);
+- }
+-
+- return TRUE;
+-}
+-
+-
+-
+-
+-/*
+-========================================================================
+-
+- Routine Description:
+-
+- Arguments:
+-
+- Return Value:
+-
+- Note:
+-
+-========================================================================
+-*/
+-INT set_eFuseGetFreeBlockCount_Proc(
+- IN PRTMP_ADAPTER pAd,
+- IN PSTRING arg)
+-{
+- USHORT i;
+- USHORT LogicalAddress;
+- USHORT 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);
+- 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; i<EFUSE_USAGE_MAP_END/2; i++)
+- {
+- InBuf[0] = 2*i;
+- InBuf[1] = 2;
+- InBuf[2] = 0x0;
+-
+- eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2);
+- if(i%4==0)
+- printk("\nBlock %x:",i/8);
+- printk("%04x ",InBuf[2]);
+- }
+- return TRUE;
+-}
+-
+-
+-INT set_eFuseLoadFromBin_Proc(
+- IN PRTMP_ADAPTER pAd,
+- IN PSTRING arg)
+-{
+- PSTRING src;
+- RTMP_OS_FD srcf;
+- RTMP_OS_FS_INFO osfsInfo;
+- INT retval, memSize;
+- PSTRING buffer, memPtr;
+- INT i = 0,j=0,k=1;
+- USHORT *PDATA;
+- USHORT DATA;
+-
+- memSize = 128 + MAX_EEPROM_BIN_FILE_SIZE + sizeof(USHORT) * 8;
+- memPtr = kmalloc(memSize, MEM_ALLOC_FLAG);
+- if (memPtr == NULL)
+- return FALSE;
+-
+- NdisZeroMemory(memPtr, memSize);
+- src = memPtr; // kmalloc(128, MEM_ALLOC_FLAG);
+- buffer = src + 128; // kmalloc(MAX_EEPROM_BIN_FILE_SIZE, MEM_ALLOC_FLAG);
+- PDATA = (USHORT*)(buffer + MAX_EEPROM_BIN_FILE_SIZE); // kmalloc(sizeof(USHORT)*8,MEM_ALLOC_FLAG);
+-
+- if(strlen(arg)>0)
+- 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;j<i;j++)
+- {
+- DBGPRINT(RT_DEBUG_TRACE, ("%02X ",buffer[j]&0xff));
+- if((j+1)%2==0)
+- PDATA[j/2%8]=((buffer[j]<<8)&0xff00)|(buffer[j-1]&0xff);
+- if(j%16==0)
+- {
+- k=buffer[j];
+- }
+- else
+- {
+- k&=buffer[j];
+- if((j+1)%16==0)
+- {
+- DBGPRINT(RT_DEBUG_TRACE, (" result=%02X,blk=%02x\n",k,j/16));
+- if(k!=0xff)
+- eFuseWriteRegistersFromBin(pAd,(USHORT)j-15, 16, PDATA);
+- else
+- {
+- if(eFuseReadRegisters(pAd,j, 2,(PUSHORT)&DATA)!=0x3f)
+- eFuseWriteRegistersFromBin(pAd,(USHORT)j-15, 16, PDATA);
+- }
+- /*
+- for(l=0;l<8;l++)
+- printk("%04x ",PDATA[l]);
+- printk("\n");
+- */
+- NdisZeroMemory(PDATA,16);
+- }
+- }
+- }
+-
+- return TRUE;
+-
+-closeFile:
+- if (srcf)
+- RtmpOSFileClose(srcf);
+-
+-recoverFS:
+- RtmpOSFSInfoChange(&osfsInfo, FALSE);
+-
+-
+- if (memPtr)
+- kfree(memPtr);
+-
+- return retval;
+-}
+-
+-
+-static NTSTATUS eFuseWriteRegistersFromBin(
+- IN PRTMP_ADAPTER pAd,
+- IN USHORT Offset,
+- IN USHORT Length,
+- IN USHORT* pData)
+-{
+- USHORT i;
+- USHORT eFuseData;
+- USHORT LogicalAddress, BlkNum = 0xffff;
+- UCHAR EFSROM_AOUT,Loop=0;
+- EFUSE_CTRL_STRUC eFuseCtrlStruc;
+- USHORT efuseDataOffset;
+- UINT32 data,tempbuffer;
+- USHORT addr,tmpaddr, InBuf[3], tmpOffset;
+- UINT32 buffer[4];
+- BOOLEAN bWriteSuccess = TRUE;
+- BOOLEAN bNotWrite=TRUE;
+- BOOLEAN bAllocateNewBlk=TRUE;
+-
+- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegistersFromBin Offset=%x, pData=%04x:%04x:%04x:%04x\n", Offset, *pData,*(pData+1),*(pData+2),*(pData+3)));
+-
+- do
+- {
+- //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.
+- Loop++;
+- 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
+- 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);
+- break;
+- }
+- }
+- }
+- else
+- {
+- // invalidate the low byte
+- for (i=0; i<8; i++)
+- {
+- if( ( (InBuf[2] >> i) & 0x01) == 0)
+- {
+- InBuf[2] |= (0x1 <<i);
+- break;
+- }
+- }
+- }
+- eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 0);
+- }
+-
+- }
+- while(!bWriteSuccess&&Loop<2);
+-
+- return TRUE;
+-}
+-
+-
+-int rtmp_ee_efuse_read16(
+- IN RTMP_ADAPTER *pAd,
+- IN USHORT Offset,
+- OUT USHORT *pValue)
+-{
+- if(pAd->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; ii<strlen(value); ii++)
+- if (!isxdigit(*(value + ii)))
+- return FALSE;
+- }
+- else
+- return FALSE; //Invalid
+-
+- IpAddr[i] = (UCHAR)simple_strtol(value, NULL, 10);
+- i++;
+- }
+-
+- if(i != 4)
+- return FALSE; //Invalid
+-
+- ConvertMulticastIP2MAC(IpAddr, (PUCHAR *)&pAddr, ETH_P_IP);
+- }
+-
+- if(bGroupId == 1)
+- COPY_MAC_ADDR(GroupId, Addr);
+-
+- // Group-Id must be a MCAST address.
+- if((bGroupId == 1) && IS_MULTICAST_MAC_ADDR(Addr))
+- MulticastFilterTableInsertEntry(pAd, GroupId, NULL, pDev, MCAT_FILTER_STATIC);
+- // Group-Member must be a UCAST address.
+- else if ((bGroupId == 0) && !IS_MULTICAST_MAC_ADDR(Addr))
+- MulticastFilterTableInsertEntry(pAd, GroupId, Addr, pDev, MCAT_FILTER_STATIC);
+- else
+- {
+- DBGPRINT(RT_DEBUG_TRACE, ("%s (%2X:%2X:%2X:%2X:%2X:%2X) is not a acceptable address.\n",
+- __FUNCTION__, Addr[0], Addr[1], Addr[2], Addr[3], Addr[4], Addr[5]));
+- return FALSE;
+- }
+-
+- bGroupId = 0;
+- 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_DelEntry_Proc(
+- IN PRTMP_ADAPTER pAd,
+- IN PSTRING arg)
+-{
+- INT i, memberCnt = 0;
+- 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; ii<strlen(value); ii++)
+- if (!isxdigit(*(value + ii)))
+- return FALSE;
+- }
+- else
+- return FALSE; //Invalid
+-
+- IpAddr[i] = (UCHAR)simple_strtol(value, NULL, 10);
+- i++;
+- }
+-
+- if(i != 4)
+- return FALSE; //Invalid
+-
+- ConvertMulticastIP2MAC(IpAddr, (PUCHAR *)&pAddr, ETH_P_IP);
+- }
+-
+- if(bGroupId == 1)
+- COPY_MAC_ADDR(GroupId, Addr);
+- else
+- memberCnt++;
+-
+- if (memberCnt > 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 <stdarg.h>
+-
+-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; i<MAX_NUM_OF_DLS_ENTRY; i++)
+- {
+- RTMPCancelTimer(&pAd->StaCfg.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; 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)
+-{
+- 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;
+- 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; 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;
+- }
+-
+-//===========================================================================
+-//===========================================================================
+-
+-#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<SupRateLen; i++)
+- {
+- switch (pSupRate[i] & 0x7f)
+- {
+- case 2: Rate = RATE_1; if (pSupRate[i] & 0x80) BasicRateBitmap |= 0x0001; break;
+- case 4: Rate = RATE_2; if (pSupRate[i] & 0x80) BasicRateBitmap |= 0x0002; break;
+- case 11: Rate = RATE_5_5; if (pSupRate[i] & 0x80) BasicRateBitmap |= 0x0004; break;
+- case 22: Rate = RATE_11; if (pSupRate[i] & 0x80) BasicRateBitmap |= 0x0008; break;
+- case 12: Rate = RATE_6; /*if (pSupRate[i] & 0x80)*/ BasicRateBitmap |= 0x0010; break;
+- case 18: Rate = RATE_9; if (pSupRate[i] & 0x80) BasicRateBitmap |= 0x0020; break;
+- case 24: Rate = RATE_12; /*if (pSupRate[i] & 0x80)*/ BasicRateBitmap |= 0x0040; break;
+- case 36: Rate = RATE_18; if (pSupRate[i] & 0x80) BasicRateBitmap |= 0x0080; break;
+- case 48: Rate = RATE_24; /*if (pSupRate[i] & 0x80)*/ BasicRateBitmap |= 0x0100; break;
+- case 72: Rate = RATE_36; if (pSupRate[i] & 0x80) BasicRateBitmap |= 0x0200; break;
+- case 96: Rate = RATE_48; if (pSupRate[i] & 0x80) BasicRateBitmap |= 0x0400; break;
+- case 108: Rate = RATE_54; if (pSupRate[i] & 0x80) BasicRateBitmap |= 0x0800; break;
+- default: Rate = RATE_1; break;
+- }
+- if (MaxSupport < Rate) MaxSupport = Rate;
+-
+- if (MinSupport > Rate) MinSupport = Rate;
+- }
+-
+- for (i=0; i<ExtRateLen; i++)
+- {
+- switch (pExtRate[i] & 0x7f)
+- {
+- case 2: Rate = RATE_1; if (pExtRate[i] & 0x80) BasicRateBitmap |= 0x0001; break;
+- case 4: Rate = RATE_2; if (pExtRate[i] & 0x80) BasicRateBitmap |= 0x0002; break;
+- case 11: Rate = RATE_5_5; if (pExtRate[i] & 0x80) BasicRateBitmap |= 0x0004; break;
+- case 22: Rate = RATE_11; if (pExtRate[i] & 0x80) BasicRateBitmap |= 0x0008; break;
+- case 12: Rate = RATE_6; /*if (pExtRate[i] & 0x80)*/ BasicRateBitmap |= 0x0010; break;
+- case 18: Rate = RATE_9; if (pExtRate[i] & 0x80) BasicRateBitmap |= 0x0020; break;
+- case 24: Rate = RATE_12; /*if (pExtRate[i] & 0x80)*/ BasicRateBitmap |= 0x0040; break;
+- case 36: Rate = RATE_18; if (pExtRate[i] & 0x80) BasicRateBitmap |= 0x0080; break;
+- case 48: Rate = RATE_24; /*if (pExtRate[i] & 0x80)*/ BasicRateBitmap |= 0x0100; break;
+- case 72: Rate = RATE_36; if (pExtRate[i] & 0x80) BasicRateBitmap |= 0x0200; break;
+- case 96: Rate = RATE_48; if (pExtRate[i] & 0x80) BasicRateBitmap |= 0x0400; break;
+- case 108: Rate = RATE_54; if (pExtRate[i] & 0x80) BasicRateBitmap |= 0x0800; break;
+- default: Rate = RATE_1; break;
+- }
+- if (MaxSupport < Rate) MaxSupport = Rate;
+-
+- if (MinSupport > 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; i<MAX_LEN_OF_SUPPORTED_RATES; i++)
+- {
+- if (BasicRateBitmap & (0x01 << i))
+- CurrBasicRate = (UCHAR)i;
+- pAd->CommonCfg.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 <int arg_size, arg> 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; i<MAX_NUM_OF_DLS_ENTRY; i++)
+- {
+- RTMPCancelTimer(&pAd->StaCfg.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 <stdarg.h>
+-
+-
+-// ===========================================================================================
+-// 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; 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].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; i<MAX_BUSY_COUNT; i++)
+- {
+- RTMP_IO_READ32(pAd, RF_CSR_CFG, &rfcsr.word);
+-
+- if (rfcsr.field.RF_CSR_KICK == BUSY)
+- {
+- continue;
+- }
+- rfcsr.word = 0;
+- rfcsr.field.RF_CSR_WR = 0;
+- rfcsr.field.RF_CSR_KICK = 1;
+- rfcsr.field.TESTCSR_RFACC_REGNUM = regID;
+- RTMP_IO_WRITE32(pAd, RF_CSR_CFG, rfcsr.word);
+- for (k=0; k<MAX_BUSY_COUNT; k++)
+- {
+- RTMP_IO_READ32(pAd, RF_CSR_CFG, &rfcsr.word);
+-
+- if (rfcsr.field.RF_CSR_KICK == IDLE)
+- break;
+- }
+- if ((rfcsr.field.RF_CSR_KICK == IDLE) &&
+- (rfcsr.field.TESTCSR_RFACC_REGNUM == regID))
+- {
+- *pValue = (UCHAR)rfcsr.field.RF_CSR_DATA;
+- break;
+- }
+- }
+- if (rfcsr.field.RF_CSR_KICK == BUSY)
+- {
+- DBGPRINT_ERR(("RF read R%d=0x%x fail, i[%d], k[%d]\n", regID, rfcsr.word,i,k));
+- return STATUS_UNSUCCESSFUL;
+- }
+-
+- return STATUS_SUCCESS;
+-}
+-
+-
+-VOID NICInitRFRegisters(
+- IN RTMP_ADAPTER *pAd)
+-{
+- if (pAd->chipOps.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; j<MAC_ADDR_LEN; j++)
+- {
+- AtoH(macptr, &pAd->PermanentAddress[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; i<NUM_OF_TX_RING; i++)
+- {
+- pAd->TxRing[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; tid<NUM_OF_TID; tid++)
+- {
+- BAOriSessionTearDown(pAd, pEntry->Aid, 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_index<SHARE_KEY_NUM; key_index++)
+- {
+- for(bss_index = 0; bss_index < MAX_MBSSID_NUM; bss_index++)
+- {
+- pAd->SharedKey[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<MAX_FIRMWARE_IMAGE_SIZE; i+=4)
+- RTMP_IO_WRITE32(pAd, FIRMWARE_IMAGE_BASE + i, 0);
+-
+- return 0;
+-}
+-
+-/*
+- ========================================================================
+-
+- Routine Description:
+- Load 8051 firmware file into MAC ASIC
+-
+- Arguments:
+- Adapter Pointer to our adapter
+-
+- Return Value:
+- NDIS_STATUS_SUCCESS firmware image load ok
+- NDIS_STATUS_FAILURE image not found
+-
+- IRQL = PASSIVE_LEVEL
+-
+- ========================================================================
+-*/
+-NDIS_STATUS RtmpAsicLoadFirmware(
+- IN PRTMP_ADAPTER pAd)
+-{
+-#ifdef BIN_IN_FILE
+-#define NICLF_DEFAULT_USE() \
+- flg_default_firm_use = TRUE; \
+- DBGPRINT(RT_DEBUG_OFF, ("%s - Use default firmware!\n", __FUNCTION__));
+-
+- NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
+- PUCHAR src;
+- RTMP_OS_FD srcf;
+- INT retval, i;
+- PUCHAR pFirmwareImage;
+- INT FileLength = 0;
+- UINT32 MacReg;
+- ULONG Index;
+- ULONG firm;
+- BOOLEAN flg_default_firm_use = FALSE;
+- RTMP_OS_FS_INFO osFSInfo;
+-
+- DBGPRINT(RT_DEBUG_TRACE, ("===> %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; i<FileLength; i+=4)
+- {
+- firm = pFirmwareImage[i] +
+- (pFirmwareImage[i+3] << 24) +
+- (pFirmwareImage[i+2] << 16) +
+- (pFirmwareImage[i+1] << 8);
+-
+- RTMP_IO_WRITE32(pAd, FIRMWARE_IMAGE_BASE + i, firm);
+- } /* End of for */
+-
+- 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);
+-
+- if (flg_default_firm_use == FALSE)
+- {
+- /* use file firmware, free allocated buffer */
+- if (pFirmwareImage != NULL)
+- kfree(pFirmwareImage);
+- /* End of if */
+- } /* End of if */
+-
+- RtmpOSFSInfoChange(&osFSInfo, FALSE);
+-#else
+-
+- NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
+- PUCHAR pFirmwareImage;
+- ULONG FileLength, Index;
+- //ULONG firm;
+- UINT32 MacReg = 0;
+- UINT32 Version = (pAd->MACVersion >> 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 <TIMER_QUEUE_SIZE_MAX; i++)
+- {
+- pQNode->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; 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
+- 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 <linux/wireless.h>
+-
+-#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 at UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL terminationc
+-#define MAX_NUM_OF_CHS 54 // 14 channels @2.4G + 12 at UNII(lower/middle) + 16 at HiperLAN2 + 11 at 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 <linux/pci.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("Jett Chen <jett_chen at ralinktech.com>");
+-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; i<TX_RING_SIZE; i++)
+- {
+- PNDIS_PACKET pPacket;
+-
+-#ifndef RT_BIG_ENDIAN
+- pTxD = (PTXD_STRUC)pAd->TxRing[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; i<TX_RING_SIZE; i++)
+- {
+- PNDIS_PACKET pPacket;
+-
+-#ifndef RT_BIG_ENDIAN
+- pTxD = (PTXD_STRUC)pAd->TxRing[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<k; j++)
+- {
+- if (a[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; j<MAX_BUSY_COUNT; j++) \
+- { \
+- RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
+- if (BbpCsr.field.Busy == BUSY) \
+- { \
+- continue; \
+- } \
+- BbpCsr.word = 0; \
+- BbpCsr.field.fRead = 1; \
+- BbpCsr.field.BBP_RW_MODE = 1; \
+- BbpCsr.field.Busy = 1; \
+- BbpCsr.field.RegNum = _I; \
+- RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
+- for (k=0; k<MAX_BUSY_COUNT; k++) \
+- { \
+- RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
+- if (BbpCsr.field.Busy == IDLE) \
+- break; \
+- } \
+- if ((BbpCsr.field.Busy == IDLE) && \
+- (BbpCsr.field.RegNum == _I)) \
+- { \
+- *(_pV) = (UCHAR)BbpCsr.field.Value; \
+- break; \
+- } \
+- } \
+- if (BbpCsr.field.Busy == BUSY) \
+- { \
+- ATEDBGPRINT(RT_DEBUG_ERROR, ("BBP read R%d fail\n", _I)); \
+- *(_pV) = (_A)->BbpWriteLatch[_I]; \
+- } \
+-}
+-
+-#define ATE_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
+-{ \
+- BBP_CSR_CFG_STRUC BbpCsr; \
+- int BusyCnt; \
+- for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
+- { \
+- RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
+- if (BbpCsr.field.Busy == BUSY) \
+- continue; \
+- BbpCsr.word = 0; \
+- BbpCsr.field.fRead = 0; \
+- BbpCsr.field.BBP_RW_MODE = 1; \
+- BbpCsr.field.Busy = 1; \
+- BbpCsr.field.Value = _V; \
+- BbpCsr.field.RegNum = _I; \
+- RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
+- (_A)->BbpWriteLatch[_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 <linux/sched.h>
+-#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<SrcBufLen; x++)
+- {
+- if (x % 16 == 0)
+- printk("0x%04x : ", x);
+- printk("%02x ", ((unsigned char)pt[x]));
+- if (x%16 == 15) printk("\n");
+- }
+- printk("\n");
+-}
+-
+-/*
+- ========================================================================
+-
+- Routine Description:
+- Send log message through wireless event
+-
+- Support standard iw_event with IWEVCUSTOM. It is used below.
+-
+- iwreq_data.data.flags is used to store event_flag that is defined by user.
+- iwreq_data.data.length is the length of the event log.
+-
+- The format of the event log is composed of the entry's MAC address and
+- the desired log message (refer to pWirelessEventText).
+-
+- ex: 11:22:33:44:55:66 has associated successfully
+-
+- p.s. The requirement of Wireless Extension is v15 or newer.
+-
+- ========================================================================
+-*/
+-VOID RTMPSendWirelessEvent(
+- IN PRTMP_ADAPTER pAd,
+- IN USHORT Event_flag,
+- IN PUCHAR pAddr,
+- IN UCHAR BssIdx,
+- IN CHAR Rssi)
+-{
+-#if WIRELESS_EXT >= 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 <linux/module.h>
+-#include <linux/version.h>
+-#include <linux/kernel.h>
+-#include <linux/spinlock.h>
+-#include <linux/init.h>
+-#include <linux/string.h>
+-#include <linux/timer.h>
+-#include <linux/errno.h>
+-#include <linux/slab.h>
+-#include <linux/interrupt.h>
+-#include <linux/pci.h>
+-#include <linux/netdevice.h>
+-#include <linux/etherdevice.h>
+-#include <linux/skbuff.h>
+-#include <linux/ethtool.h>
+-#include <linux/wireless.h>
+-#include <linux/proc_fs.h>
+-#include <linux/delay.h>
+-#include <linux/if_arp.h>
+-#include <linux/ctype.h>
+-#include <linux/vmalloc.h>
+-#include <linux/wireless.h>
+-#include <net/iw_handler.h>
+-
+-#ifdef INF_AMAZON_PPA
+-#include <asm/amazon_se/ifx_ppa_interface.h>
+-#include <asm/amazon_se/ifx_ppa_hook.h>
+-#endif // INF_AMAZON_PPA //
+-
+-// load firmware
+-#define __KERNEL_SYSCALLS__
+-#include <linux/unistd.h>
+-#include <asm/uaccess.h>
+-#include <asm/types.h>
+-#include <asm/unaligned.h> // for get_unaligned()
+-
+-#ifdef KTHREAD_SUPPORT
+-#include <linux/err.h>
+-#include <linux/kthread.h>
+-#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; i<MAX_NUM_OF_INIT_DLS_ENTRY; i++)
+- {
+- if (pAd->StaCfg.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; i<MAX_NUM_OF_DLS_ENTRY; i++)
+- {
+- if (pAd->StaCfg.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 <linux/pci.h>
+-
+-
+-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<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
+- UCHAR rsv;
+- UCHAR BufSize[8];
+- REC_BLOCKACK_STATUS REC_BA_Status[8];
+-} OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
+-
+-//For QureyBATableOID use;
+-typedef struct PACKED _OID_BA_ORI_ENTRY{
+- UCHAR MACAddr[MAC_ADDR_LEN];
+- UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize, read ORI_BA_Status[TID] for status
+- UCHAR rsv;
+- UCHAR BufSize[8];
+- ORI_BLOCKACK_STATUS ORI_BA_Status[8];
+-} OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
+-
+-typedef struct _QUERYBA_TABLE{
+- OID_BA_ORI_ENTRY BAOriEntry[32];
+- OID_BA_REC_ENTRY BARecEntry[32];
+- UCHAR OriNum;// Number of below BAOriEntry
+- UCHAR RecNum;// Number of below BARecEntry
+-} QUERYBA_TABLE, *PQUERYBA_TABLE;
+-
+-typedef union _BACAP_STRUC {
+-#ifdef RT_BIG_ENDIAN
+- struct {
+- UINT32 :4;
+- UINT32 b2040CoexistScanSup:1; //As Sta, support do 2040 coexistence scan for AP. As Ap, support monitor trigger event to check if can use BW 40MHz.
+- UINT32 bHtAdhoc:1; // adhoc can use ht rate.
+- UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
+- UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
+- UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
+- UINT32 MpduDensity:3;
+- UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
+- UINT32 AutoBA:1; // automatically BA
+- UINT32 TxBAWinLimit:8;
+- UINT32 RxBAWinLimit:8;
+- } field;
+-#else
+- struct {
+- UINT32 RxBAWinLimit:8;
+- UINT32 TxBAWinLimit:8;
+- UINT32 AutoBA:1; // automatically BA
+- UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
+- UINT32 MpduDensity:3;
+- UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
+- UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
+- UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
+- UINT32 bHtAdhoc:1; // adhoc can use ht rate.
+- UINT32 b2040CoexistScanSup:1; //As Sta, support do 2040 coexistence scan for AP. As Ap, support monitor trigger event to check if can use BW 40MHz.
+- UINT32 :4;
+- } field;
+-#endif
+- 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;
+-
+-
+-#ifdef DOT11N_DRAFT3
+-typedef enum _BSS2040COEXIST_FLAG{
+- BSS_2040_COEXIST_DISABLE = 0,
+- BSS_2040_COEXIST_TIMER_FIRED = 1,
+- BSS_2040_COEXIST_INFO_SYNC = 2,
+- BSS_2040_COEXIST_INFO_NOTIFY = 4,
+-}BSS2040COEXIST_FLAG;
+-#endif // DOT11N_DRAFT3 //
+-
+-#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)
+-
+-#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 at UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL termination
+-#define MAX_NUM_OF_11JCHANNELS 20 // 14 channels @2.4G + 12 at 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; _busyCnt<MAX_BUSY_COUNT; _busyCnt++) \
+- { \
+- RTMP_IO_READ32(_pAd, _regID, &BbpCsr.word); \
+- if (BbpCsr.field.Busy == BUSY) \
+- continue; \
+- BbpCsr.word = 0; \
+- BbpCsr.field.fRead = 1; \
+- BbpCsr.field.BBP_RW_MODE = 1; \
+- BbpCsr.field.Busy = 1; \
+- BbpCsr.field.RegNum = _bbpID; \
+- RTMP_IO_WRITE32(_pAd, _regID, BbpCsr.word); \
+- if ((_bViaMCU) == TRUE) \
+- { \
+- AsicSendCommandToMcu(_pAd, 0x80, 0xff, 0x0, 0x0); \
+- RTMPusecDelay(1000); \
+- } \
+- for (_secCnt=0; _secCnt<MAX_BUSY_COUNT; _secCnt++) \
+- { \
+- RTMP_IO_READ32(_pAd, _regID, &BbpCsr.word); \
+- if (BbpCsr.field.Busy == IDLE) \
+- break; \
+- } \
+- if ((BbpCsr.field.Busy == IDLE) && \
+- (BbpCsr.field.RegNum == _bbpID)) \
+- { \
+- *(_pV) = (UCHAR)BbpCsr.field.Value; \
+- break; \
+- } \
+- } \
+- if (BbpCsr.field.Busy == BUSY) \
+- { \
+- DBGPRINT_ERR(("BBP(viaMCU=%d) read R%d fail\n", (_bViaMCU), _bbpID)); \
+- *(_pV) = (_pAd)->BbpWriteLatch[_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; i<MAX_BUSY_COUNT; i++) \
+- { \
+- RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
+- if (BbpCsr.field.Busy == BUSY) \
+- { \
+- continue; \
+- } \
+- BbpCsr.word = 0; \
+- BbpCsr.field.fRead = 1; \
+- BbpCsr.field.BBP_RW_MODE = 1; \
+- BbpCsr.field.Busy = 1; \
+- BbpCsr.field.RegNum = _I; \
+- RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
+- brc = AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
+- if (brc == TRUE) \
+- { \
+- for (k=0; k<MAX_BUSY_COUNT; k++) \
+- { \
+- RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
+- if (BbpCsr.field.Busy == IDLE) \
+- break; \
+- } \
+- if ((BbpCsr.field.Busy == IDLE) && \
+- (BbpCsr.field.RegNum == _I)) \
+- { \
+- *(_pV) = (UCHAR)BbpCsr.field.Value; \
+- break; \
+- } \
+- } \
+- else \
+- { \
+- BbpCsr.field.Busy = 0; \
+- RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
+- } \
+- } \
+- } \
+- 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)) \
+- { \
+- for (i=0; i<MAX_BUSY_COUNT; i++) \
+- { \
+- RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
+- if (BbpCsr.field.Busy == BUSY) \
+- { \
+- continue; \
+- } \
+- BbpCsr.word = 0; \
+- BbpCsr.field.fRead = 1; \
+- BbpCsr.field.BBP_RW_MODE = 1; \
+- BbpCsr.field.Busy = 1; \
+- BbpCsr.field.RegNum = _I; \
+- RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
+- AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
+- for (k=0; k<MAX_BUSY_COUNT; k++) \
+- { \
+- RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
+- if (BbpCsr.field.Busy == IDLE) \
+- break; \
+- } \
+- if ((BbpCsr.field.Busy == IDLE) && \
+- (BbpCsr.field.RegNum == _I)) \
+- { \
+- *(_pV) = (UCHAR)BbpCsr.field.Value; \
+- break; \
+- } \
+- } \
+- } \
+- else \
+- { \
+- DBGPRINT_ERR((" , brt30xxBanMcuCmd = %d, Read BBP %d \n", (_A)->brt30xxBanMcuCmd, (_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; _busyCnt<MAX_BUSY_COUNT; _busyCnt++) \
+- { \
+- RTMP_IO_READ32((_pAd), BBP_CSR_CFG, &BbpCsr.word); \
+- if (BbpCsr.field.Busy == BUSY) \
+- continue; \
+- BbpCsr.word = 0; \
+- BbpCsr.field.fRead = 0; \
+- BbpCsr.field.BBP_RW_MODE = 1; \
+- BbpCsr.field.Busy = 1; \
+- BbpCsr.field.Value = _pV; \
+- BbpCsr.field.RegNum = _bbpID; \
+- RTMP_IO_WRITE32((_pAd), BBP_CSR_CFG, BbpCsr.word); \
+- if ((_bViaMCU) == TRUE) \
+- { \
+- AsicSendCommandToMcu(_pAd, 0x80, 0xff, 0x0, 0x0); \
+- if ((_pAd)->OpMode == 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; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
+- { \
+- RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
+- if (BbpCsr.field.Busy == BUSY) \
+- continue; \
+- BbpCsr.word = 0; \
+- BbpCsr.field.fRead = 0; \
+- BbpCsr.field.BBP_RW_MODE = 1; \
+- BbpCsr.field.Busy = 1; \
+- BbpCsr.field.Value = _V; \
+- BbpCsr.field.RegNum = _I; \
+- RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
+- brc = AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
+- if (brc == TRUE) \
+- { \
+- (_A)->BbpWriteLatch[_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; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
+- { \
+- RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
+- if (BbpCsr.field.Busy == BUSY) \
+- continue; \
+- BbpCsr.word = 0; \
+- BbpCsr.field.fRead = 0; \
+- BbpCsr.field.BBP_RW_MODE = 1; \
+- BbpCsr.field.Busy = 1; \
+- BbpCsr.field.Value = _V; \
+- BbpCsr.field.RegNum = _I; \
+- RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
+- AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
+- (_A)->BbpWriteLatch[_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; i<MAX_NUM_OF_INIT_DLS_ENTRY; i++)
+- {
+- if (pAd->StaCfg.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; i<MAX_NUM_OF_DLS_ENTRY; i++)
+- {
+- if (pAd->StaCfg.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; idx<SupRateLen; idx++)
+- {
+- if (MaxSupportedRateIn500Kbps < (SupRate[idx] & 0x7f))
+- MaxSupportedRateIn500Kbps = SupRate[idx] & 0x7f;
+- }
+-
+- for (idx=0; idx<ExtRateLen; idx++)
+- {
+- if (MaxSupportedRateIn500Kbps < (ExtRate[idx] & 0x7f))
+- MaxSupportedRateIn500Kbps = ExtRate[idx] & 0x7f;
+- }
+- // go to procedure listed on page 376
+- AssocPostProc(pAd, Addr2, CapabilityInfo, Aid, SupRate, SupRateLen, ExtRate, ExtRateLen,
+- &EdcaParm, &HtCapability, HtCapabilityLen, &AddHtInfo);
+-
+- 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);
+- }
+- }
+- 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; idx<pAd->StaCfg.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; i<MAX_NUM_OF_INIT_DLS_ENTRY; i++)
+- {
+- if (pAd->StaCfg.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; i<MAX_NUM_OF_DLS_ENTRY; i++)
+- {
+- if (pAd->StaCfg.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; i<MAX_LEN_OF_MAC_TABLE; i++)
+- {
+- if (pAd->MacTab.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; i<MAX_NUM_OF_DLS_ENTRY; i++)
+- {
+- pAd->StaCfg.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; i<SupportedRatesLen; i++)
+- {
+- if (MaxSupportedRateIn500Kbps < (SupportedRates[i] & 0x7f))
+- MaxSupportedRateIn500Kbps = SupportedRates[i] & 0x7f;
+- }
+-
+- DBGPRINT(RT_DEBUG_TRACE,("DLS - PeerDlsRspAction() from %02x:%02x:%02x:%02x:%02x:%02x with StatusCode=%d, CapabilityInfo=0x%x\n",
+- SA[0], SA[1], SA[2], SA[3], SA[4], SA[5], StatusCode, CapabilityInfo));
+-
+- for (i = 0; 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_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; i<MAX_NUM_OF_INIT_DLS_ENTRY; i++)
+- {
+- if (pAd->StaCfg.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; i<MAX_NUM_OF_DLS_ENTRY; i++)
+- {
+- if (pAd->StaCfg.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; i<MAX_NUM_OF_INIT_DLS_ENTRY; i++)
+- {
+- if ((pAd->StaCfg.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; i<MAX_NUM_OF_DLS_ENTRY; i++)
+- {
+- if ((pAd->StaCfg.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; i<MAX_NUM_OF_DLS_ENTRY; i++)
+- {
+- if (pAd->StaCfg.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; 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))
+- {
+- rval = i;
+- break;
+- }
+- }
+-
+- // check peer dls table entry
+- for (i=MAX_NUM_OF_INIT_DLS_ENTRY; i<MAX_NUM_OF_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))
+- {
+- 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; i<MAX_NUM_OF_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);
+- }
+- }
+-
+- 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; i<MAX_NUM_OF_DLS_ENTRY; i++)
+- {
+- if ((pAd->StaCfg.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, QueIdx>
+- //
+- 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<<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);
+- }
+- }
+-#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; idx<SupRateLen; idx++)
+- {
+- if (MaxSupportedRateIn500Kbps < (SupRate[idx] & 0x7f))
+- MaxSupportedRateIn500Kbps = SupRate[idx] & 0x7f;
+- }
+-
+- for (idx=0; idx<ExtRateLen; idx++)
+- {
+- if (MaxSupportedRateIn500Kbps < (ExtRate[idx] & 0x7f))
+- MaxSupportedRateIn500Kbps = ExtRate[idx] & 0x7f;
+- }
+-
+- // 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.
+- 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);
+-
+- 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 <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);
+- }
+- 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;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");
+- 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; i<MAX_LEN_OF_MAC_TABLE; i++)
+- {
+- PMAC_TABLE_ENTRY pEntry = &pAd->MacTab.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; i<MAX_NUM_OF_INIT_DLS_ENTRY; i++)
+- {
+- if (pAd->StaCfg.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; i<MAX_NUM_OF_DLS_ENTRY; i++)
+- {
+- if (pAd->StaCfg.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; i<MAX_NUM_OF_DLS_ENTRY; i++)
+- {
+- RTMPMoveMemory(&pDlsInfo->Entry[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; i<MAX_LEN_OF_MAC_TABLE; i++)
+- {
+- PMAC_TABLE_ENTRY pEntry = &pAd->MacTab.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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0005-Staging-rt28x0-remove-unused-eewrite-methods.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0005-Staging-rt28x0-remove-unused-eewrite-methods.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,222 @@
+From 620d8973fb89089d4210f1e21c02b5e9654ae3ee Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0006-Staging-rt28x0-remove-unused-code-from-common-ee_efu.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0006-Staging-rt28x0-remove-unused-code-from-common-ee_efu.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,412 @@
+From edfb9eabb381f5666328ced6adf7978ca66e310e Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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; i<Length; i+=2)
+- {
+- EFSROM_AOUT = eFuseReadRegisters(pAd, Offset+i, 2, &pOutBuf[i/2]);
+- }
+- return Status;
+-}
+-
+-/*
+-========================================================================
+-
+- Routine Description:
+-
+- Arguments:
+-
+- Return Value:
+-
+- Note:
+-
+-========================================================================
+-*/
+ static VOID eFusePhysicalWriteRegisters(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+@@ -450,247 +394,6 @@ static VOID eFusePhysicalWriteRegisters(
+
+ ========================================================================
+ */
+-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);
+- break;
+- }
+- }
+- }
+- else
+- {
+- // invalidate the low byte
+- for (i=0; i<8; i++)
+- {
+- if( ( (InBuf[2] >> i) & 0x01) == 0)
+- {
+- InBuf[2] |= (0x1 <<i);
+- break;
+- }
+- }
+- }
+- eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 0);
+- }
+- }
+- while (!bWriteSuccess&&Loop<2);
+- if(!bWriteSuccess)
+- DBGPRINT(RT_DEBUG_ERROR,("Efsue Write Failed!!\n"));
+- return TRUE;
+-}
+-
+-
+-/*
+-========================================================================
+-
+- Routine Description:
+-
+- Arguments:
+-
+- Return Value:
+-
+- Note:
+-
+-========================================================================
+-*/
+ static VOID eFuseWritePhysical(
+ IN PRTMP_ADAPTER pAd,
+ PUSHORT lpInBuffer,
+@@ -723,49 +426,6 @@ static VOID eFuseWritePhysical(
+ }
+ }
+
+-
+-/*
+-========================================================================
+-
+- Routine Description:
+-
+- Arguments:
+-
+- Return Value:
+-
+- Note:
+-
+-========================================================================
+-*/
+-NTSTATUS eFuseWrite(
+- IN PRTMP_ADAPTER pAd,
+- IN USHORT Offset,
+- IN PUCHAR pData,
+- IN USHORT length)
+-{
+- int i;
+- USHORT* pValueX = (PUSHORT) pData; //value ...
+-
+- // The input value=3070 will be stored as following
+- // Little-endian S | S Big-endian
+- // addr 1 0 | 0 1
+- // Ori-V 30 70 | 30 70
+- // After swapping
+- // 30 70 | 70 30
+- // Casting
+- // 3070 | 7030 (x)
+- // The swapping should be removed for big-endian
+- for(i=0; i<length; i+=2)
+- {
+- eFuseWriteRegisters(pAd, Offset+i, 2, &pValueX[i/2]);
+- }
+-
+- return TRUE;
+-}
+-
+-
+-
+-
+ /*
+ ========================================================================
+
+diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h
+index 3e284f2..c9e3045 100644
+--- a/drivers/staging/rt2860/rtmp.h
++++ b/drivers/staging/rt2860/rtmp.h
+@@ -4052,18 +4052,6 @@ VOID eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd,
+
+ 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 //
+
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0007-Staging-rt28x0-remove-private-RTPRIV_IOCTL_SET-ioctl.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0007-Staging-rt28x0-remove-private-RTPRIV_IOCTL_SET-ioctl.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,40 @@
+From e5b457c03b8163cf4c791521a3703a627090ff8c Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0008-Staging-rt28x0-remove-private-RTPRIV_IOCTL_GSITESURV.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0008-Staging-rt28x0-remove-private-RTPRIV_IOCTL_GSITESURV.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,131 @@
+From 5c0670fc0db64dad3b864ffa7907aac00eb22c13 Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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; i<pAdapter->ScanTab.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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0009-Staging-rt28x0-remove-private-WEXT-handlers.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0009-Staging-rt28x0-remove-private-WEXT-handlers.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,4115 @@
+From 88d64a2b356a9ddb6e598674663aa35260c514a7 Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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 <linux/sched.h>
+ #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;i<TX_RING_SIZE;i++)
+- {
+- pTxD = (PTXD_STRUC) pTxRing->Cell[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;i<MGMT_RING_SIZE;i++)
+- {
+- pTxD = (PTXD_STRUC) pMgmtRing->Cell[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;i<RX_RING_SIZE;i++)
+- {
+- pRxD = (PRT28XX_RXD_STRUC) pRxRing->Cell[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<strLen; i++)
+- {
+- if ((pInPutStr[i] < 0x21) ||
+- (pInPutStr[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; i<MAX_LEN_OF_MAC_TABLE; i++)
+- {
+- if (pAd->MacTab.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; i<MAX_LEN_OF_MAC_TABLE; i++)
+- {
+- PMAC_TABLE_ENTRY pEntry = &pAd->MacTab.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; i<MAX_LEN_OF_MAC_TABLE; i++)
+- {
+- PMAC_TABLE_ENTRY pEntry = &pAd->MacTab.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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0010-Staging-rt28x0-remove-support-for-private-driver-par.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0010-Staging-rt28x0-remove-support-for-private-driver-par.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,181 @@
+From 9228d0d8c860c266248bb1034d74952e1928f03b Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0011-Staging-rt28x0-remove-optional-loading-of-EEPROM-fro.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0011-Staging-rt28x0-remove-optional-loading-of-EEPROM-fro.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,992 @@
+From 00bbeabc14e759b3df8071d5ac38ec73f84061eb Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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; i<Length; i+=2)
+- {
+- eFusePhysicalWriteRegisters(pAd, Offset+i, 2, &pValueX[i/2]);
+- }
+- }
+-}
+-
+-/*
+-========================================================================
+-
+- Routine Description:
+-
+- Arguments:
+-
+- Return Value:
+-
+- Note:
+-
+-========================================================================
+-*/
+ INT set_eFuseGetFreeBlockCount_Proc(
+ IN PRTMP_ADAPTER pAd,
+ IN PSTRING arg)
+@@ -492,442 +319,12 @@ USHORT InBuf[3];
+ return TRUE;
+ }
+
+-
+-INT set_eFuseLoadFromBin_Proc(
+- IN PRTMP_ADAPTER pAd,
+- IN PSTRING arg)
+-{
+- PSTRING src;
+- RTMP_OS_FD srcf;
+- RTMP_OS_FS_INFO osfsInfo;
+- INT retval, memSize;
+- PSTRING buffer, memPtr;
+- INT i = 0,j=0,k=1;
+- USHORT *PDATA;
+- USHORT DATA;
+-
+- memSize = 128 + MAX_EEPROM_BIN_FILE_SIZE + sizeof(USHORT) * 8;
+- memPtr = kmalloc(memSize, MEM_ALLOC_FLAG);
+- if (memPtr == NULL)
+- return FALSE;
+-
+- NdisZeroMemory(memPtr, memSize);
+- src = memPtr; // kmalloc(128, MEM_ALLOC_FLAG);
+- buffer = src + 128; // kmalloc(MAX_EEPROM_BIN_FILE_SIZE, MEM_ALLOC_FLAG);
+- PDATA = (USHORT*)(buffer + MAX_EEPROM_BIN_FILE_SIZE); // kmalloc(sizeof(USHORT)*8,MEM_ALLOC_FLAG);
+-
+- if(strlen(arg)>0)
+- 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;j<i;j++)
+- {
+- DBGPRINT(RT_DEBUG_TRACE, ("%02X ",buffer[j]&0xff));
+- if((j+1)%2==0)
+- PDATA[j/2%8]=((buffer[j]<<8)&0xff00)|(buffer[j-1]&0xff);
+- if(j%16==0)
+- {
+- k=buffer[j];
+- }
+- else
+- {
+- k&=buffer[j];
+- if((j+1)%16==0)
+- {
+- DBGPRINT(RT_DEBUG_TRACE, (" result=%02X,blk=%02x\n",k,j/16));
+- if(k!=0xff)
+- eFuseWriteRegistersFromBin(pAd,(USHORT)j-15, 16, PDATA);
+- else
+- {
+- if(eFuseReadRegisters(pAd,j, 2,(PUSHORT)&DATA)!=0x3f)
+- eFuseWriteRegistersFromBin(pAd,(USHORT)j-15, 16, PDATA);
+- }
+- /*
+- for(l=0;l<8;l++)
+- printk("%04x ",PDATA[l]);
+- printk("\n");
+- */
+- NdisZeroMemory(PDATA,16);
+- }
+- }
+- }
+-
+- return TRUE;
+-
+-closeFile:
+- if (srcf)
+- RtmpOSFileClose(srcf);
+-
+-recoverFS:
+- RtmpOSFSInfoChange(&osfsInfo, FALSE);
+-
+-
+- if (memPtr)
+- kfree(memPtr);
+-
+- return retval;
+-}
+-
+-
+-static NTSTATUS eFuseWriteRegistersFromBin(
+- IN PRTMP_ADAPTER pAd,
+- IN USHORT Offset,
+- IN USHORT Length,
+- IN USHORT* pData)
+-{
+- USHORT i;
+- USHORT eFuseData;
+- USHORT LogicalAddress, BlkNum = 0xffff;
+- UCHAR EFSROM_AOUT,Loop=0;
+- EFUSE_CTRL_STRUC eFuseCtrlStruc;
+- USHORT efuseDataOffset;
+- UINT32 data,tempbuffer;
+- USHORT addr,tmpaddr, InBuf[3], tmpOffset;
+- UINT32 buffer[4];
+- BOOLEAN bWriteSuccess = TRUE;
+- BOOLEAN bNotWrite=TRUE;
+- BOOLEAN bAllocateNewBlk=TRUE;
+-
+- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegistersFromBin Offset=%x, pData=%04x:%04x:%04x:%04x\n", Offset, *pData,*(pData+1),*(pData+2),*(pData+3)));
+-
+- do
+- {
+- //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.
+- Loop++;
+- 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
+- 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);
+- break;
+- }
+- }
+- }
+- else
+- {
+- // invalidate the low byte
+- for (i=0; i<8; i++)
+- {
+- if( ( (InBuf[2] >> i) & 0x01) == 0)
+- {
+- InBuf[2] |= (0x1 <<i);
+- break;
+- }
+- }
+- }
+- eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 0);
+- }
+-
+- }
+- while(!bWriteSuccess&&Loop<2);
+-
+- return TRUE;
+-}
+-
+-
+ int rtmp_ee_efuse_read16(
+ IN RTMP_ADAPTER *pAd,
+ IN USHORT Offset,
+ OUT USHORT *pValue)
+ {
+- if(pAd->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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0012-Staging-rt28x0-fix-some-build-warnings.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0012-Staging-rt28x0-fix-some-build-warnings.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,349 @@
+From 579614c2cab885c702da52c9c1cb836bd08ddbd0 Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0013-Staging-rt28x0-remove-optional-cmm-profile-parameter.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0013-Staging-rt28x0-remove-optional-cmm-profile-parameter.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,1875 @@
+From 8d90a318f5ad9d02ff5a9dc24c0f832ea39cf9e4 Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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; i++)
+- {
+- temp1 = *(s1+i);
+- temp2 = *(s2+i);
+-
+- if (('a' <= temp1) && (temp1 <= 'z'))
+- temp1 = 'A'+(temp1-'a');
+- if (('a' <= temp2) && (temp2 <= 'z'))
+- temp2 = 'A'+(temp2-'a');
+-
+- if (temp1 != temp2)
+- break;
+- }
+-
+- if (i == l2)
+- return (char *) s1;
+-
+- s1++;
+- }
+-
+- return NULL; // not found
+-}
+-
+-//add by kathy
+-
+- /**
+- * strstr - Find the first substring in a %NUL terminated string
+- * @s1: The string to be searched
+- * @s2: The string to search for
+- */
+-PSTRING rtstrstr(PSTRING s1,const PSTRING s2)
+-{
+- INT l1, l2;
+-
+- l2 = strlen(s2);
+- if (!l2)
+- return s1;
+-
+- l1 = strlen(s1);
+-
+- while (l1 >= 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<start_ptr)
+- {
+- os_free_mem(NULL, (PUCHAR)pMemBuf);
+- return (FALSE);
+- }
+-
+- NdisMoveMemory(temp_buf2, start_ptr, end_ptr-start_ptr);
+- temp_buf2[end_ptr-start_ptr]='\0';
+- if((start_ptr=rtstrstr(temp_buf2, "=")) == NULL)
+- {
+- os_free_mem(NULL, (PUCHAR)pMemBuf);
+- return (FALSE);
+- }
+- ptr = (start_ptr +1);
+- //trim special characters, i.e., TAB or space
+- while(*start_ptr != 0x00)
+- {
+- if( ((*ptr == ' ') && bTrimSpace) || (*ptr == '\t') )
+- ptr++;
+- else
+- break;
+- }
+- len = strlen(start_ptr);
+-
+- memset(dest, 0x00, destsize);
+- strncpy(dest, ptr, ((len >= destsize) ? destsize: len));
+-
+- os_free_mem(NULL, (PUCHAR)pMemBuf);
+-
+- return TRUE;
+-}
+-
+-
+-/*
+- ========================================================================
+-
+- Routine Description:
+- Get multiple 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 RTMPGetKeyParameterWithOffset(
+- IN PSTRING key,
+- OUT PSTRING dest,
+- OUT USHORT *end_offset,
+- IN INT destsize,
+- IN PSTRING buffer,
+- IN BOOLEAN bTrimSpace)
+-{
+- PSTRING temp_buf1 = NULL;
+- PSTRING temp_buf2 = NULL;
+- PSTRING start_ptr;
+- PSTRING end_ptr;
+- PSTRING ptr;
+- PSTRING offset = 0;
+- INT len;
+-
+- if (*end_offset >= MAX_INI_BUFFER_SIZE)
+- return (FALSE);
+-
+- os_alloc_mem(NULL, (PUCHAR *)&temp_buf1, MAX_PARAM_BUFFER_SIZE);
+-
+- if(temp_buf1 == NULL)
+- return (FALSE);
+-
+- os_alloc_mem(NULL, (PUCHAR *)&temp_buf2, MAX_PARAM_BUFFER_SIZE);
+- if(temp_buf2 == NULL)
+- {
+- os_free_mem(NULL, (PUCHAR)temp_buf1);
+- return (FALSE);
+- }
+-
+- //find section
+- if(*end_offset == 0)
+- {
+- if ((offset = RTMPFindSection(buffer)) == NULL)
+- {
+- os_free_mem(NULL, (PUCHAR)temp_buf1);
+- os_free_mem(NULL, (PUCHAR)temp_buf2);
+- return (FALSE);
+- }
+- }
+- else
+- offset = buffer + (*end_offset);
+-
+- 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)temp_buf1);
+- os_free_mem(NULL, (PUCHAR)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<start_ptr)
+- {
+- os_free_mem(NULL, (PUCHAR)temp_buf1);
+- os_free_mem(NULL, (PUCHAR)temp_buf2);
+- return (FALSE);
+- }
+-
+- *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, (PUCHAR)temp_buf1);
+- os_free_mem(NULL, (PUCHAR)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, (PUCHAR)temp_buf1);
+- os_free_mem(NULL, (PUCHAR)temp_buf2);
+- return TRUE;
+-}
+-
+-
+-static int rtmp_parse_key_buffer_from_file(IN PRTMP_ADAPTER pAd,IN PSTRING buffer,IN ULONG KeyType,IN INT BSSIdx,IN INT KeyIdx)
+-{
+- PSTRING keybuff;
+- //INT i = BSSIdx, idx = KeyIdx, retVal;
+- ULONG KeyLen;
+- //UCHAR CipherAlg = CIPHER_WEP64;
+- CIPHER_KEY *pSharedKey;
+-
+- keybuff = buffer;
+- KeyLen = strlen(keybuff);
+- pSharedKey = &pAd->SharedKey[BSSIdx][KeyIdx];
+-
+- if(((KeyType != 0) && (KeyType != 1)) ||
+- ((KeyType == 0) && (KeyLen != 10) && (KeyLen != 26)) ||
+- ((KeyType== 1) && (KeyLen != 5) && (KeyLen != 13)))
+- {
+- DBGPRINT(RT_DEBUG_ERROR, ("Key%dStr is Invalid key length(%ld) or Type(%ld)\n",
+- KeyIdx+1, KeyLen, KeyType));
+- return FALSE;
+- }
+- else
+- {
+- return RT_CfgSetWepKey(pAd, buffer, pSharedKey, KeyIdx);
+- }
+-
+-}
+-
+-
+-static void rtmp_read_key_parms_from_file(IN PRTMP_ADAPTER pAd, PSTRING tmpbuf, PSTRING buffer)
+-{
+- STRING tok_str[16];
+- PSTRING macptr;
+- INT i = 0, idx;
+- ULONG KeyType[MAX_MBSSID_NUM];
+- ULONG KeyIdx;
+-
+- NdisZeroMemory(KeyType, sizeof(KeyType));
+-
+- //DefaultKeyID
+- if(RTMPGetKeyParameter("DefaultKeyID", tmpbuf, 25, buffer, TRUE))
+- {
+- {
+- 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, 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0014-Staging-rt28x0-remove-dead-code-from-rtmp_phy.h.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0014-Staging-rt28x0-remove-dead-code-from-rtmp_phy.h.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,77 @@
+From a0320664481bcaff11aa238dcbce4518b015cfb8 Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0015-Staging-rt28x0-remove-unused-SHA256-code.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0015-Staging-rt28x0-remove-unused-SHA256-code.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,358 @@
+From 90a74c98d8173bc0fdbfb4e852d8c946119d25c8 Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0016-Staging-rt28x0-remove-dead-code.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0016-Staging-rt28x0-remove-dead-code.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,152 @@
+From e84beefedf58e615983a84621af3d47301e45835 Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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 <linux/kthread.h>
+ #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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0017-Staging-rt28x0-remove-__LINE__-instances.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0017-Staging-rt28x0-remove-__LINE__-instances.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,80 @@
+From 8558c5398d6f51507e6f5ff205526b1756377d63 Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0018-Staging-rt28x0-run-.c-files-through-Lindent.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0018-Staging-rt28x0-run-.c-files-through-Lindent.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,16892 @@
+From 5871d1b40dae3dbb16f7f9adfd6c2e4fbcb96320 Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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 <linux/sched.h>
+ #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<SrcBufLen; x++)
+- {
++ printk("%s: %p, len = %d\n", str, pSrcBufVA, SrcBufLen);
++ for (x = 0; x < SrcBufLen; x++) {
+ if (x % 16 == 0)
+ printk("0x%04x : ", x);
+ printk("%02x ", ((unsigned char)pt[x]));
+- if (x%16 == 15) printk("\n");
++ if (x % 16 == 15)
++ printk("\n");
+ }
+ printk("\n");
+ }
+@@ -709,181 +628,197 @@ 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,
++ IN USHORT Event_flag,
++ IN PUCHAR pAddr, IN UCHAR BssIdx, IN CHAR Rssi)
+ {
+
+- //union iwreq_data wrqu;
+- PSTRING pBuf = NULL, pBufPtr = NULL;
+- USHORT event, type, BufLen;
+- UCHAR event_table_len = 0;
++ //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;
++ 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_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;
++ 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", __func__, type));
++ if (event_table_len == 0) {
++ DBGPRINT(RT_DEBUG_ERROR,
++ ("%s : The type(%0x02x) is not valid.\n", __func__,
++ type));
+ return;
+ }
+
+- if (event >= 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 <IW_MAX_AP ; i++)
+- {
+- if (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;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;
+- }
++ PBSS_ENTRY pBssEntry = &pAdapter->ScanTab.BssEntry[i];
++ BOOLEAN isGonly = FALSE;
++ int rateCnt = 0;
+
+- for (rateCnt=0;rateCnt<pBssEntry->ExtRateLen;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; i<MAX_LEN_OF_MAC_TABLE; i++)
+- {
++ for (i = 0; i < MAX_LEN_OF_MAC_TABLE; i++) {
+ PMAC_TABLE_ENTRY pEntry = &pAd->MacTab.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; i<rtusb_usb_id_len; i++)
+- {
++ for (i = 0; i < rtusb_usb_id_len; i++) {
+ if (dev_p->descriptor.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; i<pAd->NumberOfPipes; 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]<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
++ && 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 <MAX_PARAM_BUFFER_SIZE);
++ if (pAd->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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0019-Staging-rt28x0-run-common-.c-files-through-Lindent.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0019-Staging-rt28x0-run-common-.c-files-through-Lindent.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,47154 @@
+From 35e37448ece375013cbd87318273f597459d4b0a Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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 <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];
++ 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 <NUM_OF_TID; i++)
+- {
++ 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 < NUM_OF_TID; i++) {
+ idx = pEntry->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; i<num; i++)
+- {
++ for (i = 0; i < num; i++) {
+ /* get mpdu_blk */
+- mpdu_blk = (struct reordering_mpdu *) mem;
++ mpdu_blk = (struct reordering_mpdu *)mem;
+ /* initial mpdu_blk */
+ NdisZeroMemory(mpdu_blk, sizeof(struct reordering_mpdu));
+ /* next mpdu_blk */
+@@ -296,7 +272,7 @@ BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num)
+ ba_enqueue(freelist, mpdu_blk);
+ }
+
+- return(TRUE);
++ return (TRUE);
+ }
+
+ //static int blk_count=0; // sample take off, no use
+@@ -307,9 +283,8 @@ 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++;
++ 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<<TID)) && (isForced == FALSE))
+- {
++ if ((pEntry->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<<TID)))
+- {
+- RTMPInitTimer(pAd, &pBAEntry->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<<TID);
+- RTMPCancelTimer(&pBAEntry->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<<TID))
+- {
++ if (pEntry->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<<TID);
++ pEntry->RXBAbitmap |= (1 << TID);
+ pEntry->BARecWcidArray[TID] = Idx;
+
+- pEntry->BADeclineBitmap &= ~(1<<TID);
++ pEntry->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; i<MAX_LEN_OF_BA_ORI_TABLE; i++)
+- {
+- pBAEntry =&pAd->BATable.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; i<NUM_OF_TID; i++)
+- {
++ for (i = 0; i < NUM_OF_TID; i++) {
+ BAOriSessionTearDown(pAd, Wcid, i, FALSE, FALSE);
+ BARecSessionTearDown(pAd, Wcid, i, FALSE);
+ }
+ }
+
+-
+ /*
+ ==========================================================================
+ Description:
+@@ -1048,15 +980,14 @@ VOID BASessionTearDownALL(
+ FALSE , then continue indicaterx at this moment.
+ ==========================================================================
+ */
+-VOID BAOriSessionSetupTimeout(
+- 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)
+ {
+- BA_ORI_ENTRY *pBAEntry = (BA_ORI_ENTRY *)FunctionContext;
++ BA_ORI_ENTRY *pBAEntry = (BA_ORI_ENTRY *) FunctionContext;
+ MAC_TABLE_ENTRY *pEntry;
+- PRTMP_ADAPTER pAd;
++ PRTMP_ADAPTER pAd;
+
+ if (pBAEntry == NULL)
+ return;
+@@ -1064,34 +995,35 @@ VOID BAOriSessionSetupTimeout(
+ pAd = pBAEntry->pAdapter;
+
+ {
+- // 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<<pFrame->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; i<TXWI_SIZE; i+=4) // 16-byte TXWI field
++ 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);
++ 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; i<TXWI_SIZE; i+=2) // 16-byte TXWI field
++ ptr = (PUCHAR) & 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);
+ //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; 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);
++ 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; i<MAX_LEN_OF_SHARE_KEY; i++)
+- {
++ offset =
++ SHARED_KEY_TABLE_BASE + (4 * BssIndex + KeyIdx) * HW_KEY_ENTRY_SIZE;
++ for (i = 0; i < MAX_LEN_OF_SHARE_KEY; i++) {
+ RTMP_IO_WRITE8(pAd, offset + i, pKey[i]);
+ }
+
+ offset += MAX_LEN_OF_SHARE_KEY;
+- 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 += 8;
+- if (pRxMic)
+- {
+- for (i=0; i<8; i++)
+- {
++ if (pRxMic) {
++ for (i = 0; i < 8; i++) {
+ RTMP_IO_WRITE8(pAd, offset + i, pRxMic[i]);
+ }
+ }
+ #endif // RTMP_MAC_PCI //
+ #ifdef RTMP_MAC_USB
+-{
+- offset = SHARED_KEY_TABLE_BASE + (4*BssIndex + KeyIdx)*HW_KEY_ENTRY_SIZE;
+- RTUSBMultiWrite(pAd, offset, pKey, MAX_LEN_OF_SHARE_KEY);
+-
+- offset += MAX_LEN_OF_SHARE_KEY;
+- if (pTxMic)
+ {
+- RTUSBMultiWrite(pAd, offset, pTxMic, 8);
+- }
++ offset =
++ SHARED_KEY_TABLE_BASE + (4 * BssIndex +
++ KeyIdx) * HW_KEY_ENTRY_SIZE;
++ RTUSBMultiWrite(pAd, offset, pKey, MAX_LEN_OF_SHARE_KEY);
++
++ offset += MAX_LEN_OF_SHARE_KEY;
++ if (pTxMic) {
++ RTUSBMultiWrite(pAd, offset, pTxMic, 8);
++ }
+
+- offset += 8;
+- if (pRxMic)
+- {
+- RTUSBMultiWrite(pAd, offset, pRxMic, 8);
++ offset += 8;
++ if (pRxMic) {
++ RTUSBMultiWrite(pAd, offset, pRxMic, 8);
++ }
+ }
+-}
+ #endif // RTMP_MAC_USB //
+
+ //
+ // Update cipher algorithm. WSTA always use BSS0
+ //
+- RTMP_IO_READ32(pAd, SHARED_KEY_MODE_BASE+4*(BssIndex/2), &csr1.word);
+- DBGPRINT(RT_DEBUG_TRACE,("Read: SHARED_KEY_MODE_BASE at this Bss[%d] KeyIdx[%d]= 0x%x \n", BssIndex,KeyIdx, csr1.word));
+- if ((BssIndex%2) == 0)
+- {
++ RTMP_IO_READ32(pAd, SHARED_KEY_MODE_BASE + 4 * (BssIndex / 2),
++ &csr1.word);
++ DBGPRINT(RT_DEBUG_TRACE,
++ ("Read: SHARED_KEY_MODE_BASE at this Bss[%d] KeyIdx[%d]= 0x%x \n",
++ BssIndex, KeyIdx, csr1.word));
++ if ((BssIndex % 2) == 0) {
+ if (KeyIdx == 0)
+ csr1.field.Bss0Key0CipherAlg = CipherAlg;
+ else if (KeyIdx == 1)
+@@ -1986,9 +2029,7 @@ VOID AsicAddSharedKeyEntry(
+ csr1.field.Bss0Key2CipherAlg = CipherAlg;
+ else
+ csr1.field.Bss0Key3CipherAlg = CipherAlg;
+- }
+- else
+- {
++ } else {
+ if (KeyIdx == 0)
+ csr1.field.Bss1Key0CipherAlg = CipherAlg;
+ else if (KeyIdx == 1)
+@@ -1998,25 +2039,27 @@ VOID AsicAddSharedKeyEntry(
+ else
+ csr1.field.Bss1Key3CipherAlg = CipherAlg;
+ }
+- DBGPRINT(RT_DEBUG_TRACE,("Write: SHARED_KEY_MODE_BASE at this Bss[%d] = 0x%x \n", BssIndex, csr1.word));
+- RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE+4*(BssIndex/2), csr1.word);
++ DBGPRINT(RT_DEBUG_TRACE,
++ ("Write: SHARED_KEY_MODE_BASE at this Bss[%d] = 0x%x \n",
++ BssIndex, csr1.word));
++ RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE + 4 * (BssIndex / 2),
++ csr1.word);
+
+ }
+
+-// IRQL = DISPATCH_LEVEL
+-VOID AsicRemoveSharedKeyEntry(
+- IN PRTMP_ADAPTER pAd,
+- IN UCHAR BssIndex,
+- IN UCHAR KeyIdx)
++// IRQL = DISPATCH_LEVEL
++VOID AsicRemoveSharedKeyEntry(IN PRTMP_ADAPTER pAd,
++ IN UCHAR BssIndex, IN UCHAR KeyIdx)
+ {
+ //ULONG SecCsr0;
+ SHAREDKEY_MODE_STRUC csr1;
+
+- DBGPRINT(RT_DEBUG_TRACE,("AsicRemoveSharedKeyEntry: #%d \n", BssIndex*4 + KeyIdx));
++ DBGPRINT(RT_DEBUG_TRACE,
++ ("AsicRemoveSharedKeyEntry: #%d \n", BssIndex * 4 + KeyIdx));
+
+- 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 = 0;
+ else if (KeyIdx == 1)
+@@ -2025,9 +2068,7 @@ VOID AsicRemoveSharedKeyEntry(
+ csr1.field.Bss0Key2CipherAlg = 0;
+ else
+ csr1.field.Bss0Key3CipherAlg = 0;
+- }
+- else
+- {
++ } else {
+ if (KeyIdx == 0)
+ csr1.field.Bss1Key0CipherAlg = 0;
+ else if (KeyIdx == 1)
+@@ -2037,39 +2078,38 @@ VOID AsicRemoveSharedKeyEntry(
+ else
+ csr1.field.Bss1Key3CipherAlg = 0;
+ }
+- DBGPRINT(RT_DEBUG_TRACE,("Write: SHARED_KEY_MODE_BASE at this Bss[%d] = 0x%x \n", BssIndex, csr1.word));
+- RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE+4*(BssIndex/2), csr1.word);
++ DBGPRINT(RT_DEBUG_TRACE,
++ ("Write: SHARED_KEY_MODE_BASE at this Bss[%d] = 0x%x \n",
++ BssIndex, csr1.word));
++ RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE + 4 * (BssIndex / 2),
++ csr1.word);
+ ASSERT(BssIndex < 4);
+ ASSERT(KeyIdx < 4);
+
+ }
+
+-
+-VOID AsicUpdateWCIDAttribute(
+- IN PRTMP_ADAPTER pAd,
+- IN USHORT WCID,
+- IN UCHAR BssIndex,
+- IN UCHAR CipherAlg,
+- IN BOOLEAN bUsePairewiseKeyTable)
++VOID AsicUpdateWCIDAttribute(IN PRTMP_ADAPTER pAd,
++ IN USHORT WCID,
++ IN UCHAR BssIndex,
++ IN UCHAR CipherAlg,
++ IN BOOLEAN bUsePairewiseKeyTable)
+ {
+- ULONG WCIDAttri = 0, offset;
++ ULONG WCIDAttri = 0, offset;
+
+ //
+ // 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);
++ WCIDAttri =
++ (BssIndex << 4) | (CipherAlg << 1) | (bUsePairewiseKeyTable);
+ 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,
++ IN USHORT WCID, IN ULONG uIV, IN ULONG uEIV)
+ {
+- ULONG offset;
++ ULONG offset;
+
+ offset = MAC_IVEIV_TABLE_BASE + (WCID * HW_IVEIV_ENTRY_SIZE);
+
+@@ -2077,22 +2117,19 @@ VOID AsicUpdateWCIDIVEIV(
+ 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,
++ IN USHORT WCID, IN PUCHAR pAddr)
+ {
+ ULONG offset;
+ ULONG Addr;
+
+ offset = MAC_WCID_BASE + (WCID * HW_WCID_ENTRY_SIZE);
+- Addr = pAddr[0] + (pAddr[1] << 8) +(pAddr[2] << 16) +(pAddr[3] << 24);
++ Addr = pAddr[0] + (pAddr[1] << 8) + (pAddr[2] << 16) + (pAddr[3] << 24);
+ RTMP_IO_WRITE32(pAd, offset, Addr);
+ Addr = pAddr[4] + (pAddr[5] << 8);
+ RTMP_IO_WRITE32(pAd, offset + 4, Addr);
+ }
+
+-
+ /*
+ ========================================================================
+
+@@ -2126,30 +2163,28 @@ VOID AsicUpdateRxWCIDTable(
+ 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,
+- IN PCIPHER_KEY pCipherKey,
+- IN BOOLEAN bUsePairewiseKeyTable,
+- IN BOOLEAN bTxKey)
++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)
+ {
+- 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;
++ 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; 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]);
+ }
+ #endif // RTMP_MAC_PCI //
+ #ifdef RTMP_MAC_USB
+ 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)
+- {
++ for (i = 0; i < MAX_LEN_OF_PEER_KEY; i += 4) {
+ UINT32 Value;
+ RTMP_IO_READ32(pAd, offset + i, &Value);
+ }
+@@ -2342,12 +2370,10 @@ VOID AsicAddPairwiseKeyEntry(
+ offset += MAX_LEN_OF_PEER_KEY;
+
+ // MIC KEY
+- if (pTxMic)
+- {
++ if (pTxMic) {
+ #ifdef RTMP_MAC_PCI
+- for (i=0; i<8; i++)
+- {
+- RTMP_IO_WRITE8(pAd, offset+i, pTxMic[i]);
++ for (i = 0; i < 8; i++) {
++ RTMP_IO_WRITE8(pAd, offset + i, pTxMic[i]);
+ }
+ #endif // RTMP_MAC_PCI //
+ #ifdef RTMP_MAC_USB
+@@ -2355,12 +2381,10 @@ VOID AsicAddPairwiseKeyEntry(
+ #endif // RTMP_MAC_USB //
+ }
+ offset += 8;
+- if (pRxMic)
+- {
++ if (pRxMic) {
+ #ifdef RTMP_MAC_PCI
+- for (i=0; i<8; i++)
+- {
+- RTMP_IO_WRITE8(pAd, offset+i, pRxMic[i]);
++ for (i = 0; i < 8; i++) {
++ RTMP_IO_WRITE8(pAd, offset + i, pRxMic[i]);
+ }
+ #endif // RTMP_MAC_PCI //
+ #ifdef RTMP_MAC_USB
+@@ -2368,20 +2392,28 @@ VOID AsicAddPairwiseKeyEntry(
+ #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]));
++ 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]));
++ 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:
+@@ -2390,26 +2422,21 @@ VOID AsicAddPairwiseKeyEntry(
+ Return:
+ ========================================================================
+ */
+-VOID AsicRemovePairwiseKeyEntry(
+- IN PRTMP_ADAPTER pAd,
+- IN UCHAR BssIdx,
+- IN UCHAR Wcid)
++VOID AsicRemovePairwiseKeyEntry(IN PRTMP_ADAPTER pAd,
++ IN UCHAR BssIdx, IN UCHAR Wcid)
+ {
+- ULONG WCIDAttri;
+- USHORT offset;
++ 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;
++ 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)
++BOOLEAN AsicSendCommandToMcu(IN PRTMP_ADAPTER pAd,
++ IN UCHAR Command,
++ IN UCHAR Token, IN UCHAR Arg0, IN UCHAR Arg1)
+ {
+
+ if (pAd->chipOps.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; i<MAX_LEN_OF_MAC_TABLE; i++)
+- {
++ 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 //
+- if (pAd->MacTab.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<<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;
++ 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; num<NUM_OF_TX_RING; num++)
+- {
+- ULONG BufBasePaHigh;
+- ULONG BufBasePaLow;
+- PVOID BufBaseVa;
++ 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)
+ //
+- 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)
+- {
++ 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; 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;
+- }
++ 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; 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_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; i<RX_RING_SIZE; i++)
+- {
+- pRxD = (PRXD_STRUC) pAd->RxRing.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 <NUM_OF_TX_RING; index++)
+- {
++ for (index = 0; index < NUM_OF_TX_RING; index++) {
+ PQUEUE_ENTRY pEntry;
+ PNDIS_PACKET pPacket;
+- PQUEUE_HEADER pQueue;
++ PQUEUE_HEADER pQueue;
+
+ RTMP_IRQ_LOCK(&pAd->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; i<TXWI_SIZE; i+=4)
+- RTMP_IO_WRITE32(pAd, pAd->BeaconOffset[bcn_idx] + i, 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)
++ RTMP_IO_WRITE32(pAd, pAd->BeaconOffset[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; i<BEACON_RING_SIZE; i++) // 2
++ for (i = 0; i < BEACON_RING_SIZE; i++) // 2
+ {
+- PTX_CONTEXT pBeaconContext = &(pAd->BeaconContext[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; i<BEACON_RING_SIZE; i++)
+- {
+- PTX_CONTEXT pBeaconContext = &(pAd->BeaconContext[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; i<MGMT_RING_SIZE; i++)
+- {
+- pMLMEContext = (PTX_CONTEXT) pAd->MgmtRing.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; num<MAX_LEN_OF_BA_REC_TABLE; num++)
+-// {
+-// NdisAllocateSpinLock(&pAd->BATable.BARecEntry[num].RxReRingLock);
+-// }
++// for(num=0; num<MAX_LEN_OF_BA_REC_TABLE; num++)
++// {
++// NdisAllocateSpinLock(&pAd->BATable.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; i<BEACON_RING_SIZE; i++)
+- {
+- PTX_CONTEXT pBeaconContext = &(pAd->BeaconContext[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; i<MAX_LEN_OF_BA_REC_TABLE; i++)
+-// {
+-// NdisFreeSpinLock(&pAd->BATable.BARecEntry[i].RxReRingLock);
+-// }
++// for(i=0; i<MAX_LEN_OF_BA_REC_TABLE; i++)
++// {
++// NdisFreeSpinLock(&pAd->BATable.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; i<TXWI_SIZE; i+=4) {
+- RTMP_IO_WRITE32(pAd, pAd->BeaconOffset[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; i<TXWI_SIZE; i+=4) // 16-byte TXWI field
++ if ((pBeaconSync->BeaconBitMap & (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; i<NumOfBcn; i++)
+- {
+- NdisZeroMemory(pBeaconSync->BeaconBuf[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; offset<HW_BEACON_OFFSET; offset+=4)
+- RTMP_IO_WRITE32(pAd, pAd->BeaconOffset[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; apidx<NumOfBcn; apidx++)
+- {
++ for (apidx = 0; apidx < NumOfBcn; apidx++) {
+ UCHAR CapabilityInfoLocationInBeacon = 0;
+ UCHAR TimIELocationInBeacon = 0;
+
+-
+- NdisZeroMemory(pBeaconSync->BeaconBuf[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; 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);
+@@ -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; i<index; i++)
++ for (i = 0; i < index; i++)
+ pAd->ChannelList[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; 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 (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;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));
++ 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; i<pAd->ChannelListNum; 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<Length/2; i++)
+- *(pData+2*i) = 0xffff;
+- }
+- else
+- {
++ 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)
+- efuseDataOffset = EFUSE_DATA3 - (Offset & 0xC);
++ efuseDataOffset = EFUSE_DATA3 - (Offset & 0xC);
+ //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
++ // 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
++ // 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));
++ 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; i<Length; i+=2)
+- {
+- eFusePhysicalReadRegisters(pAd,Offset+i, 2, &pOutBuf[i/2]);
++ for (i = 0; i < Length; i += 2) {
++ eFusePhysicalReadRegisters(pAd, Offset + i, 2, &pOutBuf[i / 2]);
+ }
+ }
+
+@@ -266,116 +244,100 @@ static VOID eFuseReadPhysical(
+
+ ========================================================================
+ */
+-INT set_eFuseGetFreeBlockCount_Proc(
+- IN PRTMP_ADAPTER pAd,
+- IN PSTRING arg)
++INT set_eFuseGetFreeBlockCount_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg)
+ {
+ USHORT i;
+- USHORT LogicalAddress;
+- USHORT efusefreenum=0;
+- if(!pAd->bUseEfuse)
++ 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; i<EFUSE_USAGE_MAP_END/2; i++)
+- {
+- InBuf[0] = 2*i;
++ for (i = 0; i < EFUSE_USAGE_MAP_END / 2; i++) {
++ InBuf[0] = 2 * i;
+ InBuf[1] = 2;
+ InBuf[2] = 0x0;
+
+ eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2);
+- if(i%4==0)
+- printk("\nBlock %x:",i/8);
+- printk("%04x ",InBuf[2]);
++ if (i % 4 == 0)
++ printk("\nBlock %x:", i / 8);
++ printk("%04x ", InBuf[2]);
+ }
+ return TRUE;
+ }
+
+-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)
+ {
+ eFuseReadRegisters(pAd, Offset, 2, pValue);
+ return (*pValue);
+ }
+
+-int RtmpEfuseSupportCheck(
+- IN RTMP_ADAPTER *pAd)
++int RtmpEfuseSupportCheck(IN RTMP_ADAPTER * pAd)
+ {
+ USHORT value;
+
+- if (IS_RT30xx(pAd))
+- {
++ if (IS_RT30xx(pAd)) {
+ eFusePhysicalReadRegisters(pAd, EFUSE_TAG, 2, &value);
+ pAd->EFuseTag = (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 <stdarg.h>
+
+-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; 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 */
++ 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; 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; 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;
++ 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<SupRateLen; i++)
+- {
+- switch (pSupRate[i] & 0x7f)
+- {
+- case 2: Rate = RATE_1; if (pSupRate[i] & 0x80) BasicRateBitmap |= 0x0001; break;
+- case 4: Rate = RATE_2; if (pSupRate[i] & 0x80) BasicRateBitmap |= 0x0002; break;
+- case 11: Rate = RATE_5_5; if (pSupRate[i] & 0x80) BasicRateBitmap |= 0x0004; break;
+- case 22: Rate = RATE_11; if (pSupRate[i] & 0x80) BasicRateBitmap |= 0x0008; break;
+- case 12: Rate = RATE_6; /*if (pSupRate[i] & 0x80)*/ BasicRateBitmap |= 0x0010; break;
+- case 18: Rate = RATE_9; if (pSupRate[i] & 0x80) BasicRateBitmap |= 0x0020; break;
+- case 24: Rate = RATE_12; /*if (pSupRate[i] & 0x80)*/ BasicRateBitmap |= 0x0040; break;
+- case 36: Rate = RATE_18; if (pSupRate[i] & 0x80) BasicRateBitmap |= 0x0080; break;
+- case 48: Rate = RATE_24; /*if (pSupRate[i] & 0x80)*/ BasicRateBitmap |= 0x0100; break;
+- case 72: Rate = RATE_36; if (pSupRate[i] & 0x80) BasicRateBitmap |= 0x0200; break;
+- case 96: Rate = RATE_48; if (pSupRate[i] & 0x80) BasicRateBitmap |= 0x0400; break;
+- case 108: Rate = RATE_54; if (pSupRate[i] & 0x80) BasicRateBitmap |= 0x0800; break;
+- default: Rate = RATE_1; break;
++ for (i = 0; i < SupRateLen; i++) {
++ switch (pSupRate[i] & 0x7f) {
++ case 2:
++ Rate = RATE_1;
++ if (pSupRate[i] & 0x80)
++ BasicRateBitmap |= 0x0001;
++ break;
++ case 4:
++ Rate = RATE_2;
++ if (pSupRate[i] & 0x80)
++ BasicRateBitmap |= 0x0002;
++ break;
++ case 11:
++ Rate = RATE_5_5;
++ if (pSupRate[i] & 0x80)
++ BasicRateBitmap |= 0x0004;
++ break;
++ case 22:
++ Rate = RATE_11;
++ if (pSupRate[i] & 0x80)
++ BasicRateBitmap |= 0x0008;
++ break;
++ case 12:
++ Rate = RATE_6; /*if (pSupRate[i] & 0x80) */
++ BasicRateBitmap |= 0x0010;
++ break;
++ case 18:
++ Rate = RATE_9;
++ if (pSupRate[i] & 0x80)
++ BasicRateBitmap |= 0x0020;
++ break;
++ case 24:
++ Rate = RATE_12; /*if (pSupRate[i] & 0x80) */
++ BasicRateBitmap |= 0x0040;
++ break;
++ case 36:
++ Rate = RATE_18;
++ if (pSupRate[i] & 0x80)
++ BasicRateBitmap |= 0x0080;
++ break;
++ case 48:
++ Rate = RATE_24; /*if (pSupRate[i] & 0x80) */
++ BasicRateBitmap |= 0x0100;
++ break;
++ case 72:
++ Rate = RATE_36;
++ if (pSupRate[i] & 0x80)
++ BasicRateBitmap |= 0x0200;
++ break;
++ case 96:
++ Rate = RATE_48;
++ if (pSupRate[i] & 0x80)
++ BasicRateBitmap |= 0x0400;
++ break;
++ case 108:
++ Rate = RATE_54;
++ if (pSupRate[i] & 0x80)
++ BasicRateBitmap |= 0x0800;
++ break;
++ default:
++ Rate = RATE_1;
++ break;
+ }
+- if (MaxSupport < Rate) MaxSupport = Rate;
++ if (MaxSupport < Rate)
++ MaxSupport = Rate;
+
+- if (MinSupport > Rate) MinSupport = Rate;
++ if (MinSupport > Rate)
++ MinSupport = Rate;
+ }
+
+- for (i=0; i<ExtRateLen; i++)
+- {
+- switch (pExtRate[i] & 0x7f)
+- {
+- case 2: Rate = RATE_1; if (pExtRate[i] & 0x80) BasicRateBitmap |= 0x0001; break;
+- case 4: Rate = RATE_2; if (pExtRate[i] & 0x80) BasicRateBitmap |= 0x0002; break;
+- case 11: Rate = RATE_5_5; if (pExtRate[i] & 0x80) BasicRateBitmap |= 0x0004; break;
+- case 22: Rate = RATE_11; if (pExtRate[i] & 0x80) BasicRateBitmap |= 0x0008; break;
+- case 12: Rate = RATE_6; /*if (pExtRate[i] & 0x80)*/ BasicRateBitmap |= 0x0010; break;
+- case 18: Rate = RATE_9; if (pExtRate[i] & 0x80) BasicRateBitmap |= 0x0020; break;
+- case 24: Rate = RATE_12; /*if (pExtRate[i] & 0x80)*/ BasicRateBitmap |= 0x0040; break;
+- case 36: Rate = RATE_18; if (pExtRate[i] & 0x80) BasicRateBitmap |= 0x0080; break;
+- case 48: Rate = RATE_24; /*if (pExtRate[i] & 0x80)*/ BasicRateBitmap |= 0x0100; break;
+- case 72: Rate = RATE_36; if (pExtRate[i] & 0x80) BasicRateBitmap |= 0x0200; break;
+- case 96: Rate = RATE_48; if (pExtRate[i] & 0x80) BasicRateBitmap |= 0x0400; break;
+- case 108: Rate = RATE_54; if (pExtRate[i] & 0x80) BasicRateBitmap |= 0x0800; break;
+- default: Rate = RATE_1; break;
++ for (i = 0; i < ExtRateLen; i++) {
++ switch (pExtRate[i] & 0x7f) {
++ case 2:
++ Rate = RATE_1;
++ if (pExtRate[i] & 0x80)
++ BasicRateBitmap |= 0x0001;
++ break;
++ case 4:
++ Rate = RATE_2;
++ if (pExtRate[i] & 0x80)
++ BasicRateBitmap |= 0x0002;
++ break;
++ case 11:
++ Rate = RATE_5_5;
++ if (pExtRate[i] & 0x80)
++ BasicRateBitmap |= 0x0004;
++ break;
++ case 22:
++ Rate = RATE_11;
++ if (pExtRate[i] & 0x80)
++ BasicRateBitmap |= 0x0008;
++ break;
++ case 12:
++ Rate = RATE_6; /*if (pExtRate[i] & 0x80) */
++ BasicRateBitmap |= 0x0010;
++ break;
++ case 18:
++ Rate = RATE_9;
++ if (pExtRate[i] & 0x80)
++ BasicRateBitmap |= 0x0020;
++ break;
++ case 24:
++ Rate = RATE_12; /*if (pExtRate[i] & 0x80) */
++ BasicRateBitmap |= 0x0040;
++ break;
++ case 36:
++ Rate = RATE_18;
++ if (pExtRate[i] & 0x80)
++ BasicRateBitmap |= 0x0080;
++ break;
++ case 48:
++ Rate = RATE_24; /*if (pExtRate[i] & 0x80) */
++ BasicRateBitmap |= 0x0100;
++ break;
++ case 72:
++ Rate = RATE_36;
++ if (pExtRate[i] & 0x80)
++ BasicRateBitmap |= 0x0200;
++ break;
++ case 96:
++ Rate = RATE_48;
++ if (pExtRate[i] & 0x80)
++ BasicRateBitmap |= 0x0400;
++ break;
++ case 108:
++ Rate = RATE_54;
++ if (pExtRate[i] & 0x80)
++ BasicRateBitmap |= 0x0800;
++ break;
++ default:
++ Rate = RATE_1;
++ break;
+ }
+- if (MaxSupport < Rate) MaxSupport = Rate;
++ if (MaxSupport < Rate)
++ MaxSupport = Rate;
+
+- if (MinSupport > 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; i<MAX_LEN_OF_SUPPORTED_RATES; i++)
+- {
++ for (i = 0; i < MAX_LEN_OF_SUPPORTED_RATES; i++) {
+ if (BasicRateBitmap & (0x01 << i))
+- CurrBasicRate = (UCHAR)i;
++ CurrBasicRate = (UCHAR) i;
+ pAd->CommonCfg.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; 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;
++ 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; i<MAX_BUSY_COUNT; i++)
+- {
++ for (i = 0; i < MAX_BUSY_COUNT; i++) {
+ RTMP_IO_READ32(pAd, RF_CSR_CFG, &rfcsr.word);
+
+- if (rfcsr.field.RF_CSR_KICK == BUSY)
+- {
++ if (rfcsr.field.RF_CSR_KICK == BUSY) {
+ continue;
+ }
+ rfcsr.word = 0;
+@@ -126,40 +118,34 @@ NDIS_STATUS RT30xxReadRFRegister(
+ rfcsr.field.RF_CSR_KICK = 1;
+ rfcsr.field.TESTCSR_RFACC_REGNUM = regID;
+ RTMP_IO_WRITE32(pAd, RF_CSR_CFG, rfcsr.word);
+- for (k=0; k<MAX_BUSY_COUNT; k++)
+- {
++ for (k = 0; k < MAX_BUSY_COUNT; k++) {
+ RTMP_IO_READ32(pAd, RF_CSR_CFG, &rfcsr.word);
+
+ if (rfcsr.field.RF_CSR_KICK == IDLE)
+ break;
+ }
+ if ((rfcsr.field.RF_CSR_KICK == IDLE) &&
+- (rfcsr.field.TESTCSR_RFACC_REGNUM == regID))
+- {
+- *pValue = (UCHAR)rfcsr.field.RF_CSR_DATA;
++ (rfcsr.field.TESTCSR_RFACC_REGNUM == regID)) {
++ *pValue = (UCHAR) rfcsr.field.RF_CSR_DATA;
+ break;
+ }
+ }
+- if (rfcsr.field.RF_CSR_KICK == BUSY)
+- {
+- DBGPRINT_ERR(("RF read R%d=0x%x fail, i[%d], k[%d]\n", regID, rfcsr.word,i,k));
++ if (rfcsr.field.RF_CSR_KICK == BUSY) {
++ DBGPRINT_ERR(("RF read R%d=0x%x fail, i[%d], k[%d]\n", regID,
++ rfcsr.word, i, k));
+ return STATUS_UNSUCCESSFUL;
+ }
+
+ 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;
+
+@@ -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; j<MAC_ADDR_LEN; j++)
+- {
++ for (j = 0; j < MAC_ADDR_LEN; j++) {
+ AtoH(macptr, &pAd->PermanentAddress[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; i<NUM_OF_TX_RING; i++)
+- {
++ for (i = 0; i < NUM_OF_TX_RING; i++) {
+ pAd->TxRing[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; Index<NUM_MAC_REG_PARMS; Index++)
+- {
++ for (Index = 0; Index < NUM_MAC_REG_PARMS; Index++) {
+ #ifdef RT30xx
+- if ((MACRegTable[Index].Register == TX_SW_CFG0) && (IS_RT3070(pAd) || IS_RT3071(pAd) || IS_RT3572(pAd) || IS_RT3090(pAd) || IS_RT3390(pAd)))
+- {
++ if ((MACRegTable[Index].Register == TX_SW_CFG0)
++ && (IS_RT3070(pAd) || IS_RT3071(pAd) || IS_RT3572(pAd)
++ || IS_RT3090(pAd) || IS_RT3390(pAd))) {
+ MACRegTable[Index].Value = 0x00000400;
+ }
+ #endif // RT30xx //
+- RTMP_IO_WRITE32(pAd, (USHORT)MACRegTable[Index].Register, MACRegTable[Index].Value);
++ RTMP_IO_WRITE32(pAd, (USHORT) MACRegTable[Index].Register,
++ MACRegTable[Index].Value);
+ }
+
+ {
+- for (Index = 0; Index < NUM_STA_MAC_REG_PARMS; Index++)
+- {
+- RTMP_IO_WRITE32(pAd, (USHORT)STAMACRegTable[Index].Register, STAMACRegTable[Index].Value);
++ for (Index = 0; Index < NUM_STA_MAC_REG_PARMS; Index++) {
++ RTMP_IO_WRITE32(pAd,
++ (USHORT) STAMACRegTable[Index].Register,
++ STAMACRegTable[Index].Value);
+ }
+ }
+ #endif // RTMP_MAC_USB //
+
+ #ifdef RT30xx
+ // Initialize RT3070 serial MAC registers which is different from RT2870 serial
+- if (IS_RT3090(pAd) || IS_RT3572(pAd)||IS_RT3390(pAd))
+- {
++ 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)
+- {
++ 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; tid<NUM_OF_TID; tid++)
+- {
+- BAOriSessionTearDown(pAd, pEntry->Aid, 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_index<SHARE_KEY_NUM; key_index++)
+- {
+- for(bss_index = 0; bss_index < MAX_MBSSID_NUM; bss_index++)
+- {
++ for (key_index = 0; key_index < SHARE_KEY_NUM; key_index++) {
++ for (bss_index = 0; bss_index < MAX_MBSSID_NUM; bss_index++) {
+ pAd->SharedKey[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; index<pAd->CommonCfg.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; i<MAX_FIRMWARE_IMAGE_SIZE; i+=4)
++ for (i = 0; i < MAX_FIRMWARE_IMAGE_SIZE; i += 4)
+ RTMP_IO_WRITE32(pAd, FIRMWARE_IMAGE_BASE + i, 0);
+
+ return 0;
+@@ -111,16 +109,15 @@ INT RtmpAsicEraseFirmware(
+
+ ========================================================================
+ */
+-NDIS_STATUS RtmpAsicLoadFirmware(
+- IN PRTMP_ADAPTER pAd)
++NDIS_STATUS RtmpAsicLoadFirmware(IN PRTMP_ADAPTER pAd)
+ {
+
+- NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
+- PUCHAR pFirmwareImage = NULL;
+- ULONG FileLength, Index;
+- UINT32 MacReg = 0;
++ NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
++ PUCHAR pFirmwareImage = NULL;
++ ULONG FileLength, Index;
++ UINT32 MacReg = 0;
+ #ifdef RTMP_MAC_USB
+- UINT32 Version = (pAd->MACVersion >> 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 <TIMER_QUEUE_SIZE_MAX; i++)
+- {
++ for (i = 0; i < TIMER_QUEUE_SIZE_MAX; i++) {
+ pQNode->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; i<pAd->ChannelListNum; 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0020-Staging-rt28x0-run-sta-.c-files-through-Lindent.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0020-Staging-rt28x0-run-sta-.c-files-through-Lindent.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,13626 @@
+From 8d4698ccd2f45af1a84920f8ca0ae90e452c1c2d Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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; idx<SupRateLen; idx++)
+- {
+- if (MaxSupportedRateIn500Kbps < (SupRate[idx] & 0x7f))
+- MaxSupportedRateIn500Kbps = SupRate[idx] & 0x7f;
+- }
+-
+- for (idx=0; idx<ExtRateLen; idx++)
+- {
+- if (MaxSupportedRateIn500Kbps < (ExtRate[idx] & 0x7f))
+- MaxSupportedRateIn500Kbps = ExtRate[idx] & 0x7f;
+- }
++ for (idx = 0; idx < SupRateLen; idx++) {
++ if (MaxSupportedRateIn500Kbps <
++ (SupRate[idx] & 0x7f))
++ MaxSupportedRateIn500Kbps =
++ SupRate[idx] & 0x7f;
++ }
++
++ for (idx = 0; idx < ExtRateLen; idx++) {
++ if (MaxSupportedRateIn500Kbps <
++ (ExtRate[idx] & 0x7f))
++ MaxSupportedRateIn500Kbps =
++ ExtRate[idx] & 0x7f;
++ }
+ // 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);
+
+ StaAddMacTableEntry(pAd,
+- &pAd->MacTab.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; i<MAX_LEN_OF_MAC_TABLE; i++)
+- {
++ for (i = 1; i < MAX_LEN_OF_MAC_TABLE; i++) {
+ if (pAd->MacTab.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, QueIdx>
+ //
+ 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<<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);
++ 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; idx<SupRateLen; idx++)
+- {
+- if (MaxSupportedRateIn500Kbps < (SupRate[idx] & 0x7f))
+- MaxSupportedRateIn500Kbps = SupRate[idx] & 0x7f;
+- }
+-
+- for (idx=0; idx<ExtRateLen; idx++)
+- {
+- if (MaxSupportedRateIn500Kbps < (ExtRate[idx] & 0x7f))
+- MaxSupportedRateIn500Kbps = ExtRate[idx] & 0x7f;
+- }
++ for (idx = 0; idx < SupRateLen; idx++) {
++ if (MaxSupportedRateIn500Kbps <
++ (SupRate[idx] & 0x7f))
++ MaxSupportedRateIn500Kbps =
++ SupRate[idx] & 0x7f;
++ }
++
++ for (idx = 0; idx < ExtRateLen; idx++) {
++ if (MaxSupportedRateIn500Kbps <
++ (ExtRate[idx] & 0x7f))
++ MaxSupportedRateIn500Kbps =
++ ExtRate[idx] & 0x7f;
++ }
+
+ // 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.
+- if ((ADHOC_ON(pAd) && (Elem->Wcid == 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0021-Staging-rt28x0-run-.h-files-through-Lindent.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0021-Staging-rt28x0-run-.h-files-through-Lindent.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,17149 @@
+From 3f9a817a1a682d5dfb5768dc1b509c087def2603 Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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 <linux/usb.h>
+
+-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 at UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL terminationc
+-#define MAX_NUM_OF_CHS 54 // 14 channels @2.4G + 12 at UNII(lower/middle) + 16 at HiperLAN2 + 11 at 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 at UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL terminationc
++#define MAX_NUM_OF_CHS 54 // 14 channels @2.4G + 12 at UNII(lower/middle) + 16 at HiperLAN2 + 11 at 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<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
+- UCHAR rsv;
+- UCHAR BufSize[8];
+- REC_BLOCKACK_STATUS REC_BA_Status[8];
++typedef struct PACKED _OID_BA_REC_ENTRY {
++ UCHAR MACAddr[MAC_ADDR_LEN];
++ UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
++ UCHAR rsv;
++ UCHAR BufSize[8];
++ REC_BLOCKACK_STATUS REC_BA_Status[8];
+ } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
+
+ //For QureyBATableOID use;
+-typedef struct PACKED _OID_BA_ORI_ENTRY{
+- UCHAR MACAddr[MAC_ADDR_LEN];
+- UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize, read ORI_BA_Status[TID] for status
+- UCHAR rsv;
+- UCHAR BufSize[8];
+- ORI_BLOCKACK_STATUS ORI_BA_Status[8];
++typedef struct PACKED _OID_BA_ORI_ENTRY {
++ UCHAR MACAddr[MAC_ADDR_LEN];
++ UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize, read ORI_BA_Status[TID] for status
++ UCHAR rsv;
++ UCHAR BufSize[8];
++ ORI_BLOCKACK_STATUS ORI_BA_Status[8];
+ } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
+
+-typedef struct _QUERYBA_TABLE{
+- OID_BA_ORI_ENTRY BAOriEntry[32];
+- OID_BA_REC_ENTRY BARecEntry[32];
+- UCHAR OriNum;// Number of below BAOriEntry
+- UCHAR RecNum;// Number of below BARecEntry
++typedef struct _QUERYBA_TABLE {
++ OID_BA_ORI_ENTRY BAOriEntry[32];
++ OID_BA_REC_ENTRY BARecEntry[32];
++ UCHAR OriNum; // Number of below BAOriEntry
++ UCHAR RecNum; // Number of below BARecEntry
+ } QUERYBA_TABLE, *PQUERYBA_TABLE;
+
+-typedef union _BACAP_STRUC {
+- struct {
+- UINT32 RxBAWinLimit:8;
+- UINT32 TxBAWinLimit:8;
+- UINT32 AutoBA:1; // automatically BA
+- UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
+- UINT32 MpduDensity:3;
+- UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
+- UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
+- UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
+- UINT32 bHtAdhoc:1; // adhoc can use ht rate.
+- UINT32 b2040CoexistScanSup:1; //As Sta, support do 2040 coexistence scan for AP. As Ap, support monitor trigger event to check if can use BW 40MHz.
+- UINT32 :4;
+- } field;
+- UINT32 word;
++typedef union _BACAP_STRUC {
++ struct {
++ UINT32 RxBAWinLimit:8;
++ UINT32 TxBAWinLimit:8;
++ UINT32 AutoBA:1; // automatically BA
++ UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
++ UINT32 MpduDensity:3;
++ UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
++ UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
++ UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
++ UINT32 bHtAdhoc:1; // adhoc can use ht rate.
++ UINT32 b2040CoexistScanSup:1; //As Sta, support do 2040 coexistence scan for AP. As Ap, support monitor trigger event to check if can use BW 40MHz.
++ UINT32:4;
++ } field;
++ 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.
++ 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)
+
+@@ -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 at UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL termination
+-#define MAX_NUM_OF_11JCHANNELS 20 // 14 channels @2.4G + 12 at 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 at UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL termination
++#define MAX_NUM_OF_11JCHANNELS 20 // 14 channels @2.4G + 12 at 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0022-Staging-rt28x0-fix-comments-in-.c-files.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0022-Staging-rt28x0-fix-comments-in-.c-files.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,5538 @@
+From c8fe57a6e02a30d2e837161df818866cc2a60be5 Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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 <linux/pci.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("Jett Chen <jett_chen at ralinktech.com>");
+ 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 <paul_lin at ralinktech.com>");
+ 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0023-Staging-rt28x0-fix-comments-in-common-.c-files.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0023-Staging-rt28x0-fix-comments-in-common-.c-files.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,19769 @@
+From 49b65765aca2696d20ba76ebde49f27c6ba3518e Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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; num<MAX_LEN_OF_BA_REC_TABLE; num++)
+-// {
+-// NdisAllocateSpinLock(&pAd->BATable.BARecEntry[num].RxReRingLock);
+-// }
++/* for(num=0; num<MAX_LEN_OF_BA_REC_TABLE; num++) */
++/* { */
++/* NdisAllocateSpinLock(&pAd->BATable.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; i<MAX_LEN_OF_BA_REC_TABLE; i++)
+-// {
+-// NdisFreeSpinLock(&pAd->BATable.BARecEntry[i].RxReRingLock);
+-// }
++/* for(i=0; i<MAX_LEN_OF_BA_REC_TABLE; i++) */
++/* { */
++/* NdisFreeSpinLock(&pAd->BATable.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 <linux/bitrev.h>
+
+-//#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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0024-Staging-rt28x0-fix-comments-in-sta-.c-files.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0024-Staging-rt28x0-fix-comments-in-sta-.c-files.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,5809 @@
+From 05bf57c2de80a8c11de7eca3465040fe85489291 Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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 = <UserPriority, QueIdx>
+- //
++ /* */
++ /* STEP 3. Traffic classification. outcome = <UserPriority, QueIdx> */
++ /* */
+ 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0025-Staging-rt28x0-fix-comments-in-.h-files.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0025-Staging-rt28x0-fix-comments-in-.h-files.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,9877 @@
+From a28512b5e5b41d2c250646afb4f28da0273a3a9d Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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 <linux/wireless.h>
++/*#include <linux/wireless.h> */
+
+ #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 at UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL terminationc
+-#define MAX_NUM_OF_CHS 54 // 14 channels @2.4G + 12 at UNII(lower/middle) + 16 at HiperLAN2 + 11 at 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 at UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL terminationc */
++#define MAX_NUM_OF_CHS 54 /* 14 channels @2.4G + 12 at UNII(lower/middle) + 16 at HiperLAN2 + 11 at 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 <net/iw_handler.h>
+
+-// load firmware
++/* load firmware */
+ #define __KERNEL_SYSCALLS__
+ #include <linux/unistd.h>
+ #include <asm/uaccess.h>
+ #include <asm/types.h>
+-#include <asm/unaligned.h> // for get_unaligned()
++#include <asm/unaligned.h> /* 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 <linux/err.h>
+ #include <linux/kthread.h>
+-#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<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
++ UCHAR BaBitmap; /* if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize */
+ UCHAR rsv;
+ UCHAR BufSize[8];
+ REC_BLOCKACK_STATUS REC_BA_Status[8];
+ } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
+
+-//For QureyBATableOID use;
++/*For QureyBATableOID use; */
+ typedef struct PACKED _OID_BA_ORI_ENTRY {
+ UCHAR MACAddr[MAC_ADDR_LEN];
+- UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize, read ORI_BA_Status[TID] for status
++ UCHAR BaBitmap; /* if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize, read ORI_BA_Status[TID] for status */
+ UCHAR rsv;
+ UCHAR BufSize[8];
+ ORI_BLOCKACK_STATUS ORI_BA_Status[8];
+@@ -1039,22 +1039,22 @@ typedef struct PACKED _OID_BA_ORI_ENTRY {
+ typedef struct _QUERYBA_TABLE {
+ OID_BA_ORI_ENTRY BAOriEntry[32];
+ OID_BA_REC_ENTRY BARecEntry[32];
+- UCHAR OriNum; // Number of below BAOriEntry
+- UCHAR RecNum; // Number of below BARecEntry
++ UCHAR OriNum; /* Number of below BAOriEntry */
++ UCHAR RecNum; /* Number of below BARecEntry */
+ } QUERYBA_TABLE, *PQUERYBA_TABLE;
+
+ typedef union _BACAP_STRUC {
+ struct {
+ UINT32 RxBAWinLimit:8;
+ UINT32 TxBAWinLimit:8;
+- UINT32 AutoBA:1; // automatically BA
+- UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
++ UINT32 AutoBA:1; /* automatically BA */
++ UINT32 Policy:2; /* 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use */
+ UINT32 MpduDensity:3;
+- UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
+- UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
+- UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
+- UINT32 bHtAdhoc:1; // adhoc can use ht rate.
+- UINT32 b2040CoexistScanSup:1; //As Sta, support do 2040 coexistence scan for AP. As Ap, support monitor trigger event to check if can use BW 40MHz.
++ UINT32 AmsduEnable:1; /*Enable AMSDU transmisstion */
++ UINT32 AmsduSize:1; /* 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935}; */
++ UINT32 MMPSmode:2; /* MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable */
++ UINT32 bHtAdhoc:1; /* adhoc can use ht rate. */
++ UINT32 b2040CoexistScanSup:1; /*As Sta, support do 2040 coexistence scan for AP. As Ap, support monitor trigger event to check if can use BW 40MHz. */
+ UINT32:4;
+ } field;
+ UINT32 word;
+@@ -1066,7 +1066,7 @@ typedef struct {
+ UCHAR TID;
+ UCHAR nMSDU;
+ USHORT TimeOut;
+- BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
++ 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) \
+@@ -1078,11 +1078,11 @@ 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)
++/*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 at UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL termination
+-#define MAX_NUM_OF_11JCHANNELS 20 // 14 channels @2.4G + 12 at 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 at UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL termination */
++#define MAX_NUM_OF_11JCHANNELS 20 /* 14 channels @2.4G + 12 at 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0026-Staging-rt28x0-remove-typedefs-part-one.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0026-Staging-rt28x0-remove-typedefs-part-one.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,28225 @@
+From d81787c21388dc5e81c8a28a4e1a7884031092a4 Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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 <stdarg.h>
+
+-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 <linux/sched.h>
+ #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<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize */
+- UCHAR rsv;
+- UCHAR BufSize[8];
++ u8 MACAddr[MAC_ADDR_LEN];
++ u8 BaBitmap; /* if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize */
++ u8 rsv;
++ u8 BufSize[8];
+ REC_BLOCKACK_STATUS REC_BA_Status[8];
+ } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
+
+ /*For QureyBATableOID use; */
+ typedef struct PACKED _OID_BA_ORI_ENTRY {
+- UCHAR MACAddr[MAC_ADDR_LEN];
+- UCHAR BaBitmap; /* if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize, read ORI_BA_Status[TID] for status */
+- UCHAR rsv;
+- UCHAR BufSize[8];
++ u8 MACAddr[MAC_ADDR_LEN];
++ u8 BaBitmap; /* if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize, read ORI_BA_Status[TID] for status */
++ u8 rsv;
++ u8 BufSize[8];
+ ORI_BLOCKACK_STATUS ORI_BA_Status[8];
+ } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
+
+ typedef struct _QUERYBA_TABLE {
+ OID_BA_ORI_ENTRY BAOriEntry[32];
+ OID_BA_REC_ENTRY BARecEntry[32];
+- UCHAR OriNum; /* Number of below BAOriEntry */
+- UCHAR RecNum; /* Number of below BARecEntry */
++ u8 OriNum; /* Number of below BAOriEntry */
++ u8 RecNum; /* Number of below BARecEntry */
+ } QUERYBA_TABLE, *PQUERYBA_TABLE;
+
+ typedef union _BACAP_STRUC {
+ struct {
+- UINT32 RxBAWinLimit:8;
+- UINT32 TxBAWinLimit:8;
+- UINT32 AutoBA:1; /* automatically BA */
+- UINT32 Policy:2; /* 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use */
+- UINT32 MpduDensity:3;
+- UINT32 AmsduEnable:1; /*Enable AMSDU transmisstion */
+- UINT32 AmsduSize:1; /* 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935}; */
+- UINT32 MMPSmode:2; /* MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable */
+- UINT32 bHtAdhoc:1; /* adhoc can use ht rate. */
+- UINT32 b2040CoexistScanSup:1; /*As Sta, support do 2040 coexistence scan for AP. As Ap, support monitor trigger event to check if can use BW 40MHz. */
+- UINT32:4;
++ u32 RxBAWinLimit:8;
++ u32 TxBAWinLimit:8;
++ u32 AutoBA:1; /* automatically BA */
++ u32 Policy:2; /* 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use */
++ u32 MpduDensity:3;
++ u32 AmsduEnable:1; /*Enable AMSDU transmisstion */
++ u32 AmsduSize:1; /* 0:3839, 1:7935 bytes. u32 MSDUSizeToBytes[] = { 3839, 7935}; */
++ u32 MMPSmode:2; /* MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable */
++ u32 bHtAdhoc:1; /* adhoc can use ht rate. */
++ u32 b2040CoexistScanSup:1; /*As Sta, support do 2040 coexistence scan for AP. As Ap, support monitor trigger event to check if can use BW 40MHz. */
++ u32 : 4;
+ } field;
+- UINT32 word;
++ u32 word;
+ } BACAP_STRUC, *PBACAP_STRUC;
+
+ typedef struct {
+ BOOLEAN IsRecipient;
+- UCHAR MACAddr[MAC_ADDR_LEN];
+- UCHAR TID;
+- UCHAR nMSDU;
+- USHORT TimeOut;
++ u8 MACAddr[MAC_ADDR_LEN];
++ u8 TID;
++ u8 nMSDU;
++ u16 TimeOut;
+ BOOLEAN bAllTid; /* If True, delete all TID for BA sessions with this MACaddr. */
+ } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
+
+@@ -1080,16 +1080,16 @@ typedef struct {
+
+ /*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;
++ 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] */
++ unsigned long OneSecInWindowCount;
++ unsigned long OneSecFrameDuplicateCount;
++ unsigned long OneSecOutWindowCount;
++ u8 DelOriAct;
++ u8 DelRecAct;
++ u8 RTSShortProt;
++ u8 RTSLongProt;
+ BOOLEAN bRTSLongProtOn;
+ BOOLEAN bLastAtheros;
+ BOOLEAN bCurrentAtheros;
+@@ -1101,29 +1101,29 @@ 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 */
+- UINT32 ShortGI:1;
+- UINT32 STBC:1; /*SPACE */
+- UINT32 TRANSNO:2;
+- UINT32 HTMODE:1;
+- UINT32 EXTCHA:2;
+- UINT32 rsv:13;
++ /*u32 PhyMode:4; */
++ /*u32 MCS:7; // MCS */
++ u32 rsv0:10;
++ u32 TxBF:1;
++ u32 BW:1; /*channel bandwidth 20MHz or 40 MHz */
++ u32 ShortGI:1;
++ u32 STBC:1; /*SPACE */
++ u32 TRANSNO:2;
++ u32 HTMODE:1;
++ u32 EXTCHA:2;
++ u32 rsv:13;
+ } field;
+- UINT32 word;
++ u32 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;
++ u16 MCS:7; /* MCS */
++ u16 PhyMode:4;
++ u16 FixedTxMode:2; /* If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode. */
++ u16 rsv:3;
+ } field;
+- USHORT word;
++ u16 word;
+ } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
+
+ #ifdef RTMP_MAC_USB
+@@ -1132,13 +1132,13 @@ typedef union _DESIRED_TRANSMIT_SETTING {
+ **************************************************************************/
+ #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];
++ u8 BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
++ u8 BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
++ unsigned long TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
++ unsigned long 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. */
++ 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 // */
+
+@@ -1158,49 +1158,49 @@ typedef struct _BEACON_SYNC_STRUCT_ {
+
+ /* 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; \
++ { 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 <linux/types.h>
+
+-#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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0027-Staging-rt28x0-remove-typedefs-part-two.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0027-Staging-rt28x0-remove-typedefs-part-two.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,2928 @@
+From 2b0d9735eb1a1f8d79b73f47015f5b5d979c9f0c Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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 <linux/usb.h>
+-
+-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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0028-Staging-rt28x0-remove-typedefs-part-three.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0028-Staging-rt28x0-remove-typedefs-part-three.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,21194 @@
+From 77f0bcb602bae5148de99f8fedb23f81007e6ae2 Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize */
+ u8 rsv;
+ u8 BufSize[8];
+ REC_BLOCKACK_STATUS REC_BA_Status[8];
+-} OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
++};
+
+ /*For QureyBATableOID use; */
+-typedef struct PACKED _OID_BA_ORI_ENTRY {
++struct PACKED rt_oid_ba_ori_entry {
+ u8 MACAddr[MAC_ADDR_LEN];
+ u8 BaBitmap; /* if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize, read ORI_BA_Status[TID] for status */
+ u8 rsv;
+ u8 BufSize[8];
+ ORI_BLOCKACK_STATUS ORI_BA_Status[8];
+-} OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
++};
+
+-typedef struct _QUERYBA_TABLE {
+- OID_BA_ORI_ENTRY BAOriEntry[32];
+- OID_BA_REC_ENTRY BARecEntry[32];
++struct rt_queryba_table {
++ struct rt_oid_ba_ori_entry BAOriEntry[32];
++ struct rt_oid_ba_rec_entry BARecEntry[32];
+ u8 OriNum; /* Number of below BAOriEntry */
+ u8 RecNum; /* Number of below BARecEntry */
+-} QUERYBA_TABLE, *PQUERYBA_TABLE;
++};
+
+ typedef union _BACAP_STRUC {
+ struct {
+@@ -1060,14 +1059,14 @@ typedef union _BACAP_STRUC {
+ u32 word;
+ } BACAP_STRUC, *PBACAP_STRUC;
+
+-typedef struct {
++struct rt_oid_add_ba_entry {
+ BOOLEAN IsRecipient;
+ u8 MACAddr[MAC_ADDR_LEN];
+ u8 TID;
+ u8 nMSDU;
+ u16 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)
+@@ -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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0029-Staging-rt2860-remove-remainders-of-etc-reading-stuf.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0029-Staging-rt2860-remove-remainders-of-etc-reading-stuf.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,51 @@
+From 8dd16dd0927be159d12fd610ca191805bb3e12ce Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Sebastian=20Dalfu=C3=9F?= <sd at sedf.de>
+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à <sd at sedf.de>
+Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+---
+ 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0030-Staging-rt2860-remove-superfluous-newlines.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0030-Staging-rt2860-remove-superfluous-newlines.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,65 @@
+From 3d283405b185f624a030e7495c8da0ed53bd5004 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Sebastian=20Dalfu=C3=9F?= <sd at sedf.de>
+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à <sd at sedf.de>
+Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0031-Staging-rt28x0-fix-comments-in-chip-mac_pci.h.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0031-Staging-rt28x0-fix-comments-in-chip-mac_pci.h.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,189 @@
+From 4891eb9a786182e5cd08a40b9d0b3ee0f1a8c7d7 Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0032-Staging-rt2860-reduce-superfluous-exclamation-marks.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0032-Staging-rt2860-reduce-superfluous-exclamation-marks.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,830 @@
+From 765924a54d765b8ba92b14ce5e47ffedf7a38c96 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Sebastian=20Dalfu=C3=9F?= <sd at sedf.de>
+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à <sd at sedf.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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 <int arg_size, arg> 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0033-Staging-rt28x0-remove-no-longer-needed-common-cmm_da.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0033-Staging-rt28x0-remove-no-longer-needed-common-cmm_da.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,1222 @@
+From cb52d4ac2060d0a3ce14a94f8af815e276640d6f Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+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 <bzolnier at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0034-Staging-rt2860-test-off-by-one-in-RtmpAsicSendComman.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0034-Staging-rt2860-test-off-by-one-in-RtmpAsicSendComman.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,32 @@
+From dab868d7bd18571cf8510ce8566c503a73d8e86d Mon Sep 17 00:00:00 2001
+From: Roel Kluin <roel.kluin at gmail.com>
+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 <roel.kluin at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0035-Staging-rt2870-rtusb_probe-should-be-in-section-__de.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0035-Staging-rt2870-rtusb_probe-should-be-in-section-__de.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,37 @@
+From 584d8be9af3bc71abe5bd2977c0f6f22935a7ab2 Mon Sep 17 00:00:00 2001
+From: Simon Horman <horms at verge.net.au>
+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 <horms at verge.net.au>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0036-Staging-rt2870-Remove-unnecessary-forward-declaratio.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0036-Staging-rt2870-Remove-unnecessary-forward-declaratio.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,33 @@
+From f2366b77e8324bd004fcd959f9fe787c7d731661 Mon Sep 17 00:00:00 2001
+From: Simon Horman <horms at verge.net.au>
+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 <horms at verge.net.au>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0037-Staging-rt2860-Use-skb_tail_pointer.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0037-Staging-rt2860-Use-skb_tail_pointer.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,79 @@
+From b3fe9d6202b44962e47ede26231866d9d657b129 Mon Sep 17 00:00:00 2001
+From: Jeff Mahoney <jeffm at suse.com>
+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 <jeffm at suse.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0038-Staging-rt2860-sta_ioctl.c-Two-branches-the-same-in-.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0038-Staging-rt2860-sta_ioctl.c-Two-branches-the-same-in-.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,34 @@
+From 8245311036fd129a9b1fcd2821e091933339e7d2 Mon Sep 17 00:00:00 2001
+From: Roel Kluin <roel.kluin at gmail.com>
+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 <roel.kluin at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0039-Staging-rt2870sta-constify-RTUSBMultiWrite-RTUSBFirm.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0039-Staging-rt2870sta-constify-RTUSBMultiWrite-RTUSBFirm.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,89 @@
+From 375932a0c499d5e0e1945327993cb47c150f1537 Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben at decadent.org.uk>
+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 <ben at decadent.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0040-Staging-rt-2860-2870-sta-Use-request_firmware-to-loa.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0040-Staging-rt-2860-2870-sta-Use-request_firmware-to-loa.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,291 @@
+From b31c3babea8aec7d093e23990041ca449a280841 Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben at decadent.org.uk>
+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 <linux at youmustbejoking.demon.co.uk>.
+
+Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
+Tested-By: Darren Salt <linux at youmustbejoking.demon.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+[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 <linux/bitrev.h>
++#include <linux/crc-ccitt.h>
++#include <linux/firmware.h>
+
+ #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 <linux/firmware.h>
+ #include <linux/sched.h>
+ #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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0041-Staging-rt2860-correct-onstack-wait_queue_head-decla.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0041-Staging-rt2860-correct-onstack-wait_queue_head-decla.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,35 @@
+From f08a92184c7ada338949b7cb682626f939853d7a Mon Sep 17 00:00:00 2001
+From: Yong Zhang <yong.zhang0 at gmail.com>
+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 <yong.zhang0 at gmail.com>
+Cc: Greg Kroah-Hartman <gregkh at suse.de>
+Cc: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+Cc: Alexander Beregalov <a.beregalov at gmail.com>
+Cc: David S. Miller <davem at davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0042-Staging-rt2860-add-Belkin-F5D8055-Wireless-N-USB-Don.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/0042-Staging-rt2860-add-Belkin-F5D8055-Wireless-N-USB-Don.patch Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1,31 @@
+From bd87a2b1bbd0352a8cfbb43edc878f45feadb555 Mon Sep 17 00:00:00 2001
+From: Chris Largret <largret at gmail.com>
+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 <largret at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ 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
+
Added: dists/sid/linux-2.6/debian/patches/features/all/rt28x0/remove-rt3090-driver.commands
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/rt28x0/remove-rt3090-driver.commands Sun Jul 18 03:00:16 2010 (r15991)
@@ -0,0 +1 @@
+rm drivers/staging/rt3090
Modified: dists/sid/linux-2.6/debian/patches/series/18
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/18 Fri Jul 16 14:58:05 2010 (r15990)
+++ dists/sid/linux-2.6/debian/patches/series/18 Sun Jul 18 03:00:16 2010 (r15991)
@@ -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
More information about the Kernel-svn-changes
mailing list