diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2009-12-11 12:23:13 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-12-11 12:23:13 -0800 |
commit | 96b3c83dc27dca271594463aa99e166974a91171 (patch) | |
tree | 8166750ba1595a3335985c7ffc2eefe03d2544ea /drivers/staging/rt2860/common/mlme.c | |
parent | 66cd8d6ec97bbfac53b5e67df9ef4668c3f96085 (diff) |
Staging: rt28x0: run common/*.c files through Lindent
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/rt2860/common/mlme.c')
-rw-r--r-- | drivers/staging/rt2860/common/mlme.c | 6147 |
1 files changed, 3080 insertions, 3067 deletions
diff --git a/drivers/staging/rt2860/common/mlme.c b/drivers/staging/rt2860/common/mlme.c index 9c250c2b3294..1d97b7303d3d 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); + } } } - } } - |