diff options
| -rw-r--r-- | CORE/SAP/src/sapChSelect.h | 6 | ||||
| -rw-r--r-- | CORE/SAP/src/sapFsm.c | 581 | ||||
| -rw-r--r-- | Kbuild | 3 |
3 files changed, 469 insertions, 121 deletions
diff --git a/CORE/SAP/src/sapChSelect.h b/CORE/SAP/src/sapChSelect.h index f75b873e63cf..0f4955ba5c7d 100644 --- a/CORE/SAP/src/sapChSelect.h +++ b/CORE/SAP/src/sapChSelect.h @@ -113,7 +113,7 @@ typedef enum CHANNEL_14 } tSapChannel; -#define MAX_80MHZ_BANDS 5 +#define MAX_80MHZ_BANDS 6 #define SAP_80MHZ_MASK 0x0F #define SAP_40MHZ_MASK_L 0x03 #define SAP_40MHZ_MASK_H 0x0C @@ -190,7 +190,11 @@ typedef struct sSapTxLeakInfo { typedef struct sSapChanMatrixInfo { v_U8_t channel; /* channel to switch from */ +#ifdef FEATURE_WLAN_CH144 + tSapTxLeakInfo chan_matrix[RF_CHAN_144 - RF_CHAN_36 + 1]; +#else tSapTxLeakInfo chan_matrix[RF_CHAN_140 - RF_CHAN_36 + 1]; +#endif } tSapChanMatrixInfo; #endif // if !defined __SAP_CH_SELECT_H diff --git a/CORE/SAP/src/sapFsm.c b/CORE/SAP/src/sapFsm.c index bb7808b90900..096ac8f2ccee 100644 --- a/CORE/SAP/src/sapFsm.c +++ b/CORE/SAP/src/sapFsm.c @@ -89,6 +89,17 @@ extern sapSafeChannelType safeChannels[]; * Static Variable Definitions * -------------------------------------------------------------------------*/ +#ifdef WLAN_ENABLE_CHNL_MATRIX_RESTRICTION +/* + * TODO: At present SAP Channel leakage matrix for ch 144 + * is not available from system's team. So to play it safe + * and avoid crash if channel 144 is request, in following + * matix channel 144 is added such that it will cause code + * to avoid selecting channel 144. + * + * THESE ENTRIES SHOULD BE REPLACED WITH CORRECT VALUES AS + * PROVIDED BY SYSTEM'S TEAM. + */ /* channel tx leakage table - ht80 */ tSapChanMatrixInfo ht80_chan[] = { @@ -102,7 +113,12 @@ tSapChanMatrixInfo ht80_chan[] = {116, 424}, {120, 429}, {124, 437}, {128, 435}, {132, SAP_TX_LEAKAGE_MAX},{136, SAP_TX_LEAKAGE_MAX}, - {140, SAP_TX_LEAKAGE_MAX}}}, + {140, SAP_TX_LEAKAGE_MAX} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {56, {{36, 171}, {40, 178}, @@ -114,7 +130,11 @@ tSapChanMatrixInfo ht80_chan[] = {116, 403}, {120, 397}, {124, SAP_TX_LEAKAGE_MAX},{128, SAP_TX_LEAKAGE_MAX}, {132, SAP_TX_LEAKAGE_MAX},{136, SAP_TX_LEAKAGE_MAX}, - {140, SAP_TX_LEAKAGE_MAX}}}, + {140, SAP_TX_LEAKAGE_MAX} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, {60, {{36, 156}, {40, 146}, @@ -126,7 +146,11 @@ tSapChanMatrixInfo ht80_chan[] = {116, 395}, {120, 399}, {124, SAP_TX_LEAKAGE_MAX},{128, SAP_TX_LEAKAGE_MAX}, {132, SAP_TX_LEAKAGE_MAX},{136, SAP_TX_LEAKAGE_MAX}, - {140, SAP_TX_LEAKAGE_MAX}}}, + {140, SAP_TX_LEAKAGE_MAX} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, {64, {{36, 217}, {40, 221}, @@ -138,7 +162,11 @@ tSapChanMatrixInfo ht80_chan[] = {116, 375}, {120, 374}, {124, SAP_TX_LEAKAGE_MAX},{128, SAP_TX_LEAKAGE_MAX}, {132, SAP_TX_LEAKAGE_MAX},{136, SAP_TX_LEAKAGE_MAX}, - {140, SAP_TX_LEAKAGE_MAX}}}, + {140, SAP_TX_LEAKAGE_MAX} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, {100, {{36, 357}, {40, 326}, @@ -150,7 +178,11 @@ tSapChanMatrixInfo ht80_chan[] = {116, 166}, {120, SAP_TX_LEAKAGE_MIN}, {124, SAP_TX_LEAKAGE_MIN},{128, SAP_TX_LEAKAGE_MIN}, {132, SAP_TX_LEAKAGE_MIN},{136, SAP_TX_LEAKAGE_MIN}, - {140, SAP_TX_LEAKAGE_MIN}}}, + {140, SAP_TX_LEAKAGE_MIN} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, {104, {{36, 325}, {40, 325}, @@ -162,7 +194,11 @@ tSapChanMatrixInfo ht80_chan[] = {116, 198}, {120, SAP_TX_LEAKAGE_MIN}, {124, SAP_TX_LEAKAGE_MIN},{128, SAP_TX_LEAKAGE_MIN}, {132, SAP_TX_LEAKAGE_MIN},{136, SAP_TX_LEAKAGE_MIN}, - {140, SAP_TX_LEAKAGE_MIN}}}, + {140, SAP_TX_LEAKAGE_MIN} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, {108, {{36, 304}, {40, 332}, @@ -174,7 +210,11 @@ tSapChanMatrixInfo ht80_chan[] = {116, 185}, {120, SAP_TX_LEAKAGE_MIN}, {124, SAP_TX_LEAKAGE_MIN},{128, SAP_TX_LEAKAGE_MIN}, {132, SAP_TX_LEAKAGE_MIN},{136, SAP_TX_LEAKAGE_MIN}, - {140, SAP_TX_LEAKAGE_MIN}}}, + {140, SAP_TX_LEAKAGE_MIN} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, {112, {{36, 327}, {40, 335}, @@ -186,7 +226,11 @@ tSapChanMatrixInfo ht80_chan[] = {116, 189}, {120, SAP_TX_LEAKAGE_MIN}, {124, SAP_TX_LEAKAGE_MIN},{128, SAP_TX_LEAKAGE_MIN}, {132, SAP_TX_LEAKAGE_MIN},{136, SAP_TX_LEAKAGE_MIN}, - {140, SAP_TX_LEAKAGE_MIN}}}, + {140, SAP_TX_LEAKAGE_MIN} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, {116, {{36, 384}, {40, 372}, @@ -198,7 +242,11 @@ tSapChanMatrixInfo ht80_chan[] = {116, SAP_TX_LEAKAGE_MIN},{120, SAP_TX_LEAKAGE_MIN}, {124, SAP_TX_LEAKAGE_MIN},{128, SAP_TX_LEAKAGE_MIN}, {132, SAP_TX_LEAKAGE_MIN},{136, SAP_TX_LEAKAGE_MIN}, - {140, SAP_TX_LEAKAGE_MIN}}}, + {140, SAP_TX_LEAKAGE_MIN} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, {120, {{36, 395}, {40, 419}, @@ -210,7 +258,11 @@ tSapChanMatrixInfo ht80_chan[] = {116, SAP_TX_LEAKAGE_MIN},{120, SAP_TX_LEAKAGE_MIN}, {124, SAP_TX_LEAKAGE_MIN},{128, 159}, {132, SAP_TX_LEAKAGE_MIN},{136, SAP_TX_LEAKAGE_MIN}, - {140, SAP_TX_LEAKAGE_MIN}}}, + {140, SAP_TX_LEAKAGE_MIN} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, {124, {{36, 469}, {40, 433}, @@ -222,7 +274,11 @@ tSapChanMatrixInfo ht80_chan[] = {116, 350}, {120, SAP_TX_LEAKAGE_MIN}, {124, SAP_TX_LEAKAGE_MIN},{128, 138}, {132, SAP_TX_LEAKAGE_MIN},{136, SAP_TX_LEAKAGE_MIN}, - {140, SAP_TX_LEAKAGE_MIN}}}, + {140, SAP_TX_LEAKAGE_MIN} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, {128, {{36, 408}, {40, 434}, @@ -234,7 +290,12 @@ tSapChanMatrixInfo ht80_chan[] = {116, 142}, {120, SAP_TX_LEAKAGE_MIN}, {124, SAP_TX_LEAKAGE_MIN},{128, SAP_TX_LEAKAGE_MIN}, {132, SAP_TX_LEAKAGE_MIN},{136, SAP_TX_LEAKAGE_MIN}, - {140, SAP_TX_LEAKAGE_MIN}}}, + {140, SAP_TX_LEAKAGE_MIN} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {132, {{36, SAP_TX_LEAKAGE_MAX }, {40, SAP_TX_LEAKAGE_MAX }, {44, SAP_TX_LEAKAGE_MAX }, {48, SAP_TX_LEAKAGE_MAX }, @@ -245,7 +306,12 @@ tSapChanMatrixInfo ht80_chan[] = {116, SAP_TX_LEAKAGE_MIN },{120, SAP_TX_LEAKAGE_MIN}, {124, SAP_TX_LEAKAGE_MIN},{128, SAP_TX_LEAKAGE_MIN}, {132, SAP_TX_LEAKAGE_MIN},{136, SAP_TX_LEAKAGE_MIN}, - {140, SAP_TX_LEAKAGE_MIN }}}, + {140, SAP_TX_LEAKAGE_MIN } +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {136, {{36, SAP_TX_LEAKAGE_MAX }, {40, SAP_TX_LEAKAGE_MAX }, {44, SAP_TX_LEAKAGE_MAX }, {48, SAP_TX_LEAKAGE_MAX }, @@ -256,7 +322,12 @@ tSapChanMatrixInfo ht80_chan[] = {116, SAP_TX_LEAKAGE_MIN }, {120, SAP_TX_LEAKAGE_MIN}, {124, SAP_TX_LEAKAGE_MIN},{128, SAP_TX_LEAKAGE_MIN}, {132, SAP_TX_LEAKAGE_MIN},{136, SAP_TX_LEAKAGE_MIN}, - {140, SAP_TX_LEAKAGE_MIN }}}, + {140, SAP_TX_LEAKAGE_MIN } +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {140, {{36, SAP_TX_LEAKAGE_MAX }, {40, SAP_TX_LEAKAGE_MAX }, {44, SAP_TX_LEAKAGE_MAX }, {48, SAP_TX_LEAKAGE_MAX }, @@ -266,7 +337,11 @@ tSapChanMatrixInfo ht80_chan[] = {108, SAP_TX_LEAKAGE_MIN },{112, SAP_TX_LEAKAGE_MIN }, {116, SAP_TX_LEAKAGE_MIN }, {120, SAP_TX_LEAKAGE_MIN}, {124, SAP_TX_LEAKAGE_MIN},{128, SAP_TX_LEAKAGE_MIN}, - {132, SAP_TX_LEAKAGE_MIN},{136, SAP_TX_LEAKAGE_MIN}}}, + {132, SAP_TX_LEAKAGE_MIN},{136, SAP_TX_LEAKAGE_MIN} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, }; /* channel tx leakage table - ht40 */ @@ -282,7 +357,12 @@ tSapChanMatrixInfo ht40_chan[] = {116, SAP_TX_LEAKAGE_MAX},{120, SAP_TX_LEAKAGE_MAX}, {124, SAP_TX_LEAKAGE_MAX},{128, SAP_TX_LEAKAGE_MAX}, {132, SAP_TX_LEAKAGE_MAX},{136, SAP_TX_LEAKAGE_MAX}, - {140, SAP_TX_LEAKAGE_MAX}}}, + {140, SAP_TX_LEAKAGE_MAX} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {56, {{36, 446}, {40, 446 }, {44, 300}, {48, 300 }, @@ -293,7 +373,12 @@ tSapChanMatrixInfo ht40_chan[] = {116, SAP_TX_LEAKAGE_MAX},{120, SAP_TX_LEAKAGE_MAX}, {124, SAP_TX_LEAKAGE_MAX},{128, SAP_TX_LEAKAGE_MAX}, {132, SAP_TX_LEAKAGE_MAX},{136, SAP_TX_LEAKAGE_MAX}, - {140, SAP_TX_LEAKAGE_MAX}}}, + {140, SAP_TX_LEAKAGE_MAX} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {60, {{36, 481}, {40, 481 }, {44, 407}, {48, 407 }, @@ -304,7 +389,12 @@ tSapChanMatrixInfo ht40_chan[] = {116, SAP_TX_LEAKAGE_MAX},{120, SAP_TX_LEAKAGE_MAX}, {124, SAP_TX_LEAKAGE_MAX},{128, SAP_TX_LEAKAGE_MAX}, {132, SAP_TX_LEAKAGE_MAX},{136, SAP_TX_LEAKAGE_MAX}, - {140, SAP_TX_LEAKAGE_MAX}}}, + {140, SAP_TX_LEAKAGE_MAX} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {64, {{36, 524}, {40, 524 }, {44, 527}, {48, 527 }, @@ -315,7 +405,11 @@ tSapChanMatrixInfo ht40_chan[] = {116, SAP_TX_LEAKAGE_MAX},{120, SAP_TX_LEAKAGE_MAX}, {124, SAP_TX_LEAKAGE_MAX},{128, SAP_TX_LEAKAGE_MAX}, {132, SAP_TX_LEAKAGE_MAX},{136, SAP_TX_LEAKAGE_MAX}, - {140, SAP_TX_LEAKAGE_MAX}}}, + {140, SAP_TX_LEAKAGE_MAX} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, {100, {{36, 618}, {40, 618 }, @@ -327,7 +421,12 @@ tSapChanMatrixInfo ht40_chan[] = {116, 486}, {120, 486 }, {124, 498}, {128, 498 }, {132, 538}, {136, 538 }, - {140, 598}}}, + {140, 598} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {104, {{36, 636}, {40, 636 }, {44, 601}, {48, 601 }, @@ -338,7 +437,12 @@ tSapChanMatrixInfo ht40_chan[] = {116, 396},{120, 396 }, {124, 483}, {128, 483 }, {132, 553}, {136, 553 }, - {140, 568}}}, + {140, 568} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {108, {{36, 600}, {40, 600 }, {44, 627}, {48, 627 }, @@ -349,7 +453,12 @@ tSapChanMatrixInfo ht40_chan[] = {116, 323},{120, 323}, {124, 494},{128, 494}, {132, 566},{136, 566 }, - {140, 534}}}, + {140, 534} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {112, {{36, 645}, {40, 645 }, {44, 641}, {48, 641 }, @@ -360,7 +469,12 @@ tSapChanMatrixInfo ht40_chan[] = {116, SAP_TX_LEAKAGE_MIN},{120, SAP_TX_LEAKAGE_MIN}, {124, 414},{128, 414}, {132, 533},{136, 533 }, - {140, 521}}}, + {140, 521} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {116, {{36, 661}, {40, 661 }, {44, 624}, {48, 624 }, @@ -371,7 +485,12 @@ tSapChanMatrixInfo ht40_chan[] = {116, SAP_TX_LEAKAGE_MIN},{120, SAP_TX_LEAKAGE_MIN}, {124, 309},{128, 309 }, {132, 412},{136, 412}, - {140, 509}}}, + {140, 509} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {120, {{36, 667}, {40, 667 }, {44, 645}, {48, 645 }, @@ -382,7 +501,12 @@ tSapChanMatrixInfo ht40_chan[] = {116, SAP_TX_LEAKAGE_MIN},{120, SAP_TX_LEAKAGE_MIN}, {124, SAP_TX_LEAKAGE_MIN},{128, SAP_TX_LEAKAGE_MIN}, {132, 434},{136, 434}, - {140, 514}}}, + {140, 514} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {124, {{36, 676}, {40, 676 }, {44, 668}, {48, 668 }, @@ -393,7 +517,12 @@ tSapChanMatrixInfo ht40_chan[] = {116, 225},{120, 225}, {124, SAP_TX_LEAKAGE_MIN},{128, SAP_TX_LEAKAGE_MIN}, {132, 327},{136, 327}, - {140, 468}}}, + {140, 468} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {128, {{36, 678}, {40, 678 }, {44, 664}, {48, 664 }, @@ -404,7 +533,12 @@ tSapChanMatrixInfo ht40_chan[] = {116, 293},{120, 293}, {124, SAP_TX_LEAKAGE_MIN},{128, SAP_TX_LEAKAGE_MIN}, {132, SAP_TX_LEAKAGE_MIN},{136, SAP_TX_LEAKAGE_MIN}, - {140, 415}}}, + {140, 415} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {132, {{36, 689}, {40, 689 }, {44, 669}, {48, 669 }, @@ -415,7 +549,12 @@ tSapChanMatrixInfo ht40_chan[] = {116, 428},{120, 428}, {124, 247},{128, 247}, {132, SAP_TX_LEAKAGE_MIN},{136, SAP_TX_LEAKAGE_MIN}, - {140, SAP_TX_LEAKAGE_MIN }}}, + {140, SAP_TX_LEAKAGE_MIN } +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {136, {{36, 703}, {40, 703 }, {44, 688}, {48, SAP_TX_LEAKAGE_MIN }, @@ -426,7 +565,12 @@ tSapChanMatrixInfo ht40_chan[] = {116, 428}, {120, 428}, {124, 289},{128, 289}, {132, SAP_TX_LEAKAGE_MIN},{136, SAP_TX_LEAKAGE_MIN}, - {140, SAP_TX_LEAKAGE_MIN }}}, + {140, SAP_TX_LEAKAGE_MIN } +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {140, {{36, 695}, {40, 695 }, {44, 684}, {48, 684 }, @@ -437,7 +581,11 @@ tSapChanMatrixInfo ht40_chan[] = {116, 529}, {120, 529}, {124, 432},{128, 432}, {132, 262},{136, 262}, - {140, SAP_TX_LEAKAGE_MIN }}}, + {140, SAP_TX_LEAKAGE_MIN } +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, }; @@ -454,7 +602,12 @@ tSapChanMatrixInfo ht20_chan[] = {116, SAP_TX_LEAKAGE_MAX},{120, SAP_TX_LEAKAGE_MAX}, {124, SAP_TX_LEAKAGE_MAX},{128, SAP_TX_LEAKAGE_MAX}, {132, SAP_TX_LEAKAGE_MAX},{136, SAP_TX_LEAKAGE_MAX}, - {140, SAP_TX_LEAKAGE_MAX}}}, + {140, SAP_TX_LEAKAGE_MAX} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {56, {{36, 468}, {40, 413}, {44, 374}, {48, 206}, @@ -465,7 +618,12 @@ tSapChanMatrixInfo ht20_chan[] = {116, SAP_TX_LEAKAGE_MAX},{120, SAP_TX_LEAKAGE_MAX}, {124, SAP_TX_LEAKAGE_MAX},{128, SAP_TX_LEAKAGE_MAX}, {132, SAP_TX_LEAKAGE_MAX},{136, SAP_TX_LEAKAGE_MAX}, - {140, SAP_TX_LEAKAGE_MAX}}}, + {140, SAP_TX_LEAKAGE_MAX} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {60, {{36, 507}, {40, 440}, {44, 431}, {48, 313}, @@ -476,7 +634,12 @@ tSapChanMatrixInfo ht20_chan[] = {116, SAP_TX_LEAKAGE_MAX},{120, SAP_TX_LEAKAGE_MAX}, {124, SAP_TX_LEAKAGE_MAX},{128, SAP_TX_LEAKAGE_MAX}, {132, SAP_TX_LEAKAGE_MAX},{136, SAP_TX_LEAKAGE_MAX}, - {140, SAP_TX_LEAKAGE_MAX}}}, + {140, SAP_TX_LEAKAGE_MAX} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {64, {{36, 516}, {40, 520}, {44, 506}, {48, 424}, @@ -487,7 +650,11 @@ tSapChanMatrixInfo ht20_chan[] = {116, SAP_TX_LEAKAGE_MAX},{120, SAP_TX_LEAKAGE_MAX}, {124, SAP_TX_LEAKAGE_MAX},{128, SAP_TX_LEAKAGE_MAX}, {132, SAP_TX_LEAKAGE_MAX},{136, SAP_TX_LEAKAGE_MAX}, - {140, SAP_TX_LEAKAGE_MAX}}}, + {140, SAP_TX_LEAKAGE_MAX} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, {100, {{36, 616}, {40, 601}, @@ -499,7 +666,12 @@ tSapChanMatrixInfo ht20_chan[] = {116, 462}, {120, 522}, {124, 571}, {128, 589}, {132, 593}, {136, 598}, - {140, 594}}}, + {140, 594} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {104, {{36, 622}, {40, 624}, {44, 618}, {48, 610}, @@ -510,7 +682,12 @@ tSapChanMatrixInfo ht20_chan[] = {116, 483},{120, 503}, {124, 523}, {128, 565}, {132, 570}, {136, 588}, - {140, 585}}}, + {140, 585} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {108, {{36, 620}, {40, 638}, {44, 611}, {48, 614}, @@ -521,7 +698,12 @@ tSapChanMatrixInfo ht20_chan[] = {116, 477},{120, 497}, {124, 517},{128, 537}, {132, 557},{136, 577}, - {140, 603}}}, + {140, 603} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {112, {{36, 636}, {40, 623}, {44, 638}, {48, 628}, @@ -532,7 +714,12 @@ tSapChanMatrixInfo ht20_chan[] = {116, SAP_TX_LEAKAGE_MIN},{120, 481}, {124, 501},{128, 421}, {132, 541},{136, 561}, - {140, 583}}}, + {140, 583} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {116, {{36, 646}, {40, 648}, {44, 633}, {48, 634}, @@ -543,7 +730,12 @@ tSapChanMatrixInfo ht20_chan[] = {116, SAP_TX_LEAKAGE_MIN},{120, SAP_TX_LEAKAGE_MIN}, {124, SAP_TX_LEAKAGE_MIN},{128, SAP_TX_LEAKAGE_MIN}, {132, 534},{136, 554}, - {140, 574}}}, + {140, 574} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {120, {{36, 643}, {40, 649}, {44, 654}, {48, 629}, @@ -554,7 +746,12 @@ tSapChanMatrixInfo ht20_chan[] = {116, SAP_TX_LEAKAGE_MIN},{120, SAP_TX_LEAKAGE_MIN}, {124, SAP_TX_LEAKAGE_MIN},{128, 505}, {132, 525},{136, 545}, - {140, 565}}}, + {140, 565} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {124, {{36, 638}, {40, 657}, {44, 663}, {48, 649}, @@ -565,7 +762,12 @@ tSapChanMatrixInfo ht20_chan[] = {116, 499},{120, SAP_TX_LEAKAGE_MIN}, {124, SAP_TX_LEAKAGE_MIN},{128, SAP_TX_LEAKAGE_MIN}, {132, 499},{136, 519}, - {140, 539}}}, + {140, 539} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {128, {{36, 651}, {40, 651}, {44, 674}, {48, 640}, @@ -576,7 +778,12 @@ tSapChanMatrixInfo ht20_chan[] = {116, 499},{120, 479}, {124, SAP_TX_LEAKAGE_MIN},{128, SAP_TX_LEAKAGE_MIN}, {132, SAP_TX_LEAKAGE_MIN},{136, 479}, - {140, 499}}}, + {140, 499} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {132, {{36, 643}, {40, 668}, {44, 651}, {48, 657}, @@ -587,7 +794,12 @@ tSapChanMatrixInfo ht20_chan[] = {116, 550},{120, 530}, {124, 510},{128, SAP_TX_LEAKAGE_MIN}, {132, SAP_TX_LEAKAGE_MIN},{136, SAP_TX_LEAKAGE_MIN}, - {140, 490}}}, + {140, 490} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {136, {{36, 654}, {40, 667}, {44, 666}, {48, 642}, @@ -598,7 +810,12 @@ tSapChanMatrixInfo ht20_chan[] = {116, 555}, {120, 535}, {124, 515},{128, 495}, {132, SAP_TX_LEAKAGE_MIN},{136, SAP_TX_LEAKAGE_MIN}, - {140, SAP_TX_LEAKAGE_MIN}}}, + {140, SAP_TX_LEAKAGE_MIN} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, + {140, {{36, 679}, {40, 673}, {44, 667}, {48, 656}, @@ -609,8 +826,13 @@ tSapChanMatrixInfo ht20_chan[] = {116, 573}, {120, 553}, {124, 533},{128, 513}, {132, 490},{136, SAP_TX_LEAKAGE_MIN}, - {140, SAP_TX_LEAKAGE_MIN}}}, + {140, SAP_TX_LEAKAGE_MIN} +#ifdef FEATURE_WLAN_CH144 + ,{144, SAP_TX_LEAKAGE_MIN} +#endif +}}, }; +#endif //end of WLAN_ENABLE_CHNL_MATRIX_RESTRICTION /*---------------------------------------------------------------------------- @@ -717,37 +939,33 @@ static inline void sapEventInit(ptWLAN_SAPEvent sapEvent) sapEvent->u2 = 0; } +#ifdef WLAN_ENABLE_CHNL_MATRIX_RESTRICTION /* - * This function is added to check if channel is in tx leak range + * This function gives the leakage matrix for given NOL channel and cbMode * * PARAMETERS * IN - * sapContext: Pointer to vos global context structure - * target_channel: the target channel to switch to + * sapContext : Pointer to vos global context structure + * cbMode : target channel bonding mode + * NOL_channel : the NOL channel whose leakage matrix is required + * pTarget_chnl_mtrx : pointer to target channel matrix returned. * * RETURN VALUE - * BOOLEAN to indicate if the target channel is good or bad to switch - * - * TRUE: the channel is above the tx leak threshold, CANNOT USE - * FALSE: the channel is below the tx leak threshold, CAN BE USED + * BOOLEAN + * TRUE: leakage matrix was found + * FALSE: leakage matrix was not found */ v_BOOL_t -sapChannelMatrixCheck(ptSapContext sapContext, - ePhyChanBondState cbMode, - v_U8_t target_channel) +sapFindTargetChannelInChannelMatrix(ptSapContext sapContext, + ePhyChanBondState cbMode, + v_U8_t NOL_channel, + tSapTxLeakInfo **pTarget_chnl_mtrx) { tSapTxLeakInfo *target_chan_matrix = NULL; tSapChanMatrixInfo *pchan_matrix = NULL; - v_U32_t num_channel = (RF_CHAN_140 - RF_CHAN_36) + 1; v_U32_t nchan_matrix; - tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx); int i = 0; - if (NULL == hHal) { - VOS_ASSERT(0); - return VOS_FALSE; - } - switch (cbMode) { case PHY_SINGLE_CHANNEL_CENTERED: /* HT20 */ @@ -780,7 +998,7 @@ sapChannelMatrixCheck(ptSapContext sapContext, for (i = 0; i < nchan_matrix; i++) { /* find the SAP channel to map the leakage matrix */ - if (sapContext->channel == pchan_matrix[i].channel) + if (NOL_channel == pchan_matrix[i].channel) { target_chan_matrix = pchan_matrix[i].chan_matrix; break; @@ -789,46 +1007,113 @@ sapChannelMatrixCheck(ptSapContext sapContext, if (NULL == target_chan_matrix) { - /* should never happen, we should ind a table here, - * if we don't, need a fix here! - */ - - VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, - FL("Shouldn't see this message! something went wrong here!")); - - VOS_ASSERT(0); return VOS_FALSE; + } else { + *pTarget_chnl_mtrx = target_chan_matrix; + return VOS_TRUE; } +} - for (i = 0; i < num_channel; i++) - { - if (target_channel == target_chan_matrix[i].leak_chan) +/* + * This function removes the channels from temp channel list that + * (if selected as target channel) will cause leakage in one of + * the NOL channels + * + * PARAMETERS + * IN + * sapContext : Pointer to vos global context structure + * cbMode : target channel bonding mode + * pNol : DFS NOL + * pTempChannelList : the target channel list + * + * RETURN VALUE + * VOS_STATUS code associated with performing the operation + */ + +VOS_STATUS +sapMarkChannelsLeakingIntoNOL(ptSapContext sapContext, + ePhyChanBondState cbMode, + tSapDfsNolInfo *pNol, + v_U8_t tempChannelListSize, + v_U8_t *pTempChannelList) +{ + tSapTxLeakInfo *target_chan_matrix = NULL; +#ifdef FEATURE_WLAN_CH144 + v_U32_t num_channel = (RF_CHAN_144 - RF_CHAN_36) + 1; +#else + v_U32_t num_channel = (RF_CHAN_140 - RF_CHAN_36) + 1; +#endif + v_U32_t i = 0; + v_U32_t j = 0; + v_U32_t k = 0; + v_U8_t dfs_nol_channel; + + + /* traverse target_chan_matrix and */ + for (i = 0; i < NUM_5GHZ_CHANNELS ; i++) { + dfs_nol_channel = pNol[i].dfs_channel_number; + if ( pNol[i].radar_status_flag == eSAP_DFS_CHANNEL_USABLE || + pNol[i].radar_status_flag == eSAP_DFS_CHANNEL_AVAILABLE ) { + /* not present in NOL */ + continue; + } + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_DEBUG, + FL("sapdfs: processing NOL channel: %d"), + dfs_nol_channel ); + if (VOS_FALSE == sapFindTargetChannelInChannelMatrix(sapContext, + cbMode, + dfs_nol_channel, + &target_chan_matrix)) { - if (target_chan_matrix[i].leak_lvl > SAP_TX_LEAKAGE_THRES) { - VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, - FL("Channel=%d is good"), - target_channel); + /* + * should never happen, we should always find a table here, + * if we don't, need a fix here! + */ + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, + FL("Couldn't find target channel matrix!")); + VOS_ASSERT(0); + return VOS_STATUS_E_FAILURE; + } - return VOS_FALSE; + /* + * following is based on assumption that both pTempChannelList + * and target channel matrix are in increasing order of channelID + */ + for (j = 0, k = 0; j < tempChannelListSize && + k < num_channel; ) { + if (pTempChannelList[j] == 0) { + j++; } else { - VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, - FL("Channel=%d has leakage=-%d dBm"), - target_channel, (target_chan_matrix[i].leak_lvl/10)); - return VOS_TRUE; + if (target_chan_matrix[k].leak_chan != pTempChannelList[j]) { + k++; + } else { + /* check leakage from candidate channel to NOL channel */ + if (target_chan_matrix[k].leak_lvl <= SAP_TX_LEAKAGE_THRES) + { + /* + * this means that candidate channel will have bad + * leakage in NOL channel, remove the candidate channel + * from temp list + */ + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_LOW, + FL("sapdfs: channel: %d will have bad leakage" + " due to channel: %d\n"), + dfs_nol_channel, + pTempChannelList[j]); + pTempChannelList[j] = 0; + break; + } + j++; + k++; + } } - } - } - - /* should never happen, we should find a table here, - * if we don't, need a fix here - */ - VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, - FL("Channel=%d is not in the list"), - target_channel); - - return VOS_FALSE; + } /* end of for loop checking temp channel list leakage into NOL */ + } /* end of loop that selects each NOL */ + return VOS_STATUS_SUCCESS; } +#endif // end of WLAN_ENABLE_CHNL_MATRIX_RESTRICTION + /* * This function adds availabe channel to bitmap * @@ -1047,6 +1332,7 @@ static v_U8_t sapRandomChannelSel(ptSapContext sapContext) { v_U32_t random_byte = 0; v_U8_t available_chnl_count = 0; + v_U8_t valid_chnl_count = 0; v_U8_t availableChannels[WNI_CFG_VALID_CHANNEL_LIST_LEN] = {0,}; v_U8_t target_channel = 0; v_BOOL_t isChannelNol = VOS_FALSE; @@ -1059,6 +1345,7 @@ static v_U8_t sapRandomChannelSel(ptSapContext sapContext) tANI_U32 chanWidth; ePhyChanBondState cbModeCurrent; v_REGDOMAIN_t regDomain; + v_U8_t *tempChannels = NULL; if (NULL == hHal) { VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, @@ -1108,12 +1395,17 @@ static v_U8_t sapRandomChannelSel(ptSapContext sapContext) if (sapGet5GHzChannelList(sapContext)) { VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_LOW, - FL("Get 5Ghz channel list failed")); + FL("Getting 5Ghz channel list failed")); return target_channel; } regDomain = sapFetchRegulatoryDomain(hHal); + /* + * valid_chnl_count will be used to find number of valid channels + * after following for loop ends + */ + valid_chnl_count = sapContext->SapAllChnlList.numChannel; /* loop to check ACS range or NOL channels */ for (i = 0; i < sapContext->SapAllChnlList.numChannel; i++) { @@ -1147,6 +1439,8 @@ static v_U8_t sapRandomChannelSel(ptSapContext sapContext) FL("index:%d, Channel=%d Invalid,Japan W53 Disabled"), i, channelID); sapContext->SapAllChnlList.channelList[i].valid = VOS_FALSE; + valid_chnl_count--; + continue; } /* @@ -1164,6 +1458,8 @@ static v_U8_t sapRandomChannelSel(ptSapContext sapContext) channelID, pMac->sap.SapDfsInfo.sap_operating_chan_preferred_location); sapContext->SapAllChnlList.channelList[i].valid = VOS_FALSE; + valid_chnl_count--; + continue; } } @@ -1179,9 +1475,11 @@ static v_U8_t sapRandomChannelSel(ptSapContext sapContext) * DFS Non-Occupancy-Period which is 30 mins. */ VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_LOW, - FL("index: %d, Channel = %d Present in NOL LIST"), + FL("index: %d, Channel = %d Present in NOL"), i, channelID); sapContext->SapAllChnlList.channelList[i].valid = VOS_FALSE; + valid_chnl_count--; + continue; } } @@ -1197,44 +1495,86 @@ static v_U8_t sapRandomChannelSel(ptSapContext sapContext) FL("index: %d, Channel = %d out of ACS channel range"), i, channelID); sapContext->SapAllChnlList.channelList[i].valid = VOS_FALSE; + valid_chnl_count--; + continue; } } /* end of check for NOL or ACS channels */ + /* valid_chnl_count now have number of valid channels */ + tempChannels = vos_mem_malloc(valid_chnl_count); + if (tempChannels == NULL) { + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, + FL("sapdfs: memory alloc failed")); + return target_channel; + } + do { + v_U8_t j = 0; +#ifdef WLAN_ENABLE_CHNL_MATRIX_RESTRICTION + tSapDfsNolInfo *pNol = pMac->sap.SapDfsInfo.sapDfsChannelNolList; +#endif + + /* prepare temp list of just the valid channels */ + for (i = 0; i < sapContext->SapAllChnlList.numChannel; i++) { + if (sapContext->SapAllChnlList.channelList[i].valid) { + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, + FL("sapdfs: Adding Channel = %d to temp List"), + sapContext->SapAllChnlList.channelList[i].channel); + tempChannels[j++] = + sapContext->SapAllChnlList.channelList[i].channel; + } + } + +#ifdef WLAN_ENABLE_CHNL_MATRIX_RESTRICTION + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, + FL("sapdfs: Processing temp channel list against NOL.")); + if (VOS_STATUS_SUCCESS != sapMarkChannelsLeakingIntoNOL(sapContext, + cbModeCurrent, + pNol, + valid_chnl_count, + tempChannels)) { + vos_mem_free(tempChannels); + return target_channel; + } +#endif + vos_mem_zero(availableChannels, sizeof(availableChannels)); vos_mem_zero(&channelBitmap, sizeof(channelBitmap)); channelBitmap.chanBondingSet[0].startChannel = 36; channelBitmap.chanBondingSet[1].startChannel = 52; channelBitmap.chanBondingSet[2].startChannel = 100; channelBitmap.chanBondingSet[3].startChannel = 116; + channelBitmap.chanBondingSet[3].startChannel = 132; channelBitmap.chanBondingSet[4].startChannel = 149; - vos_mem_zero(availableChannels, sizeof(availableChannels)); /* now loop through whatever is left of channel list */ - for (i = 0; i < sapContext->SapAllChnlList.numChannel; i++ ){ - /* check the channel matrix */ - if (sapContext->SapAllChnlList.channelList[i].valid) { - channelID = sapContext->SapAllChnlList.channelList[i].channel; - /* if leakage for this channel is within limits */ - if (VOS_FALSE == sapChannelMatrixCheck(sapContext, - cbModeCurrent, - channelID)) { - /* for 20MHz, directly create available channel list */ - if (cbModeCurrent == PHY_SINGLE_CHANNEL_CENTERED) { - VOS_TRACE(VOS_MODULE_ID_SAP, - VOS_TRACE_LEVEL_INFO_LOW, - FL("Channel=%d added to available list"), - channelID); - availableChannels[available_chnl_count++] = channelID; - } else { - VOS_TRACE(VOS_MODULE_ID_SAP, - VOS_TRACE_LEVEL_INFO_LOW, - FL("Channel=%d added to bitmap"), - channelID); - sapSetBitmap(&channelBitmap, channelID); - } + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, + FL("sapdfs: Moving temp channel list to final.")); + for (i = 0; i < valid_chnl_count; i++ ){ + /* + * add channel from temp channel list to bitmap or fianl + * channel list (in case of 20MHz width) + */ + if (tempChannels[i] != 0) { + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_DEBUG, + FL("sapdfs: processing channel: %d "), + tempChannels[i]); + /* for 20MHz, directly create available channel list */ + if (cbModeCurrent == PHY_SINGLE_CHANNEL_CENTERED) { + VOS_TRACE(VOS_MODULE_ID_SAP, + VOS_TRACE_LEVEL_DEBUG, + FL("sapdfs: Channel=%d added to available list"), + tempChannels[i]); + availableChannels[available_chnl_count++] = + tempChannels[i]; + } else { + VOS_TRACE(VOS_MODULE_ID_SAP, + VOS_TRACE_LEVEL_DEBUG, + FL("sapdfs: Channel=%d added to bitmap"), + tempChannels[i]); + sapSetBitmap(&channelBitmap, tempChannels[i]); } } - } /* end of loop to check against DFS leakage channel matrix */ + } /* if 40 MHz or 80 MHz, populate available channel list from bitmap */ if (cbModeCurrent != PHY_SINGLE_CHANNEL_CENTERED) { @@ -1312,6 +1652,7 @@ static v_U8_t sapRandomChannelSel(ptSapContext sapContext) break; } while(1); /* this loop will iterate at max 3 times */ + vos_mem_free(tempChannels); return target_channel; } @@ -1192,6 +1192,9 @@ ifeq ($(CONFIG_SMP),y) CDEFINES += -DQCA_CONFIG_SMP endif +#Enable Channel Matrix restriction for all targets +CDEFINES += -DWLAN_ENABLE_CHNL_MATRIX_RESTRICTION + #features specific to mobile router use case ifeq ($(CONFIG_MOBILE_ROUTER), y) |
