summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaveen Rawat <nrawat@qca.qualcomm.com>2014-10-17 16:55:24 -0700
committerAnjaneeDevi Kapparapu <c_akappa@qti.qualcomm.com>2014-10-20 17:06:25 +0530
commitd19871c485aa4193f19639d438ba94de581ae027 (patch)
treea807dd06a5e6b156b657c757c0b7f0e9eebfc6b0
parent7bcab02b31b9664400ab6bf32f1d485d49d4f7f0 (diff)
qcacld: New channel of SAP should avoid emission on NOL channels
When SAP select new channel after radar signal on some DFS channel, new channel selection should strictly avoid emission on NOL channels. Change-Id: I8d7c1a81a09ef1ad7466a753460e8e31b0dd9b21 CRs-Fixed: 727424
-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)