summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CORE/SAP/src/sapChSelect.h6
-rw-r--r--CORE/SAP/src/sapFsm.c581
-rw-r--r--Kbuild3
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;
}
diff --git a/Kbuild b/Kbuild
index 6292990126a7..d56cc1fd782d 100644
--- a/Kbuild
+++ b/Kbuild
@@ -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)