Преглед на файлове

qcacld-3.0: SAP: Add radar pulse table for KR and CN

Add radar pulse table for new DFS domain KR and CN.

Change-Id: I75708a215f51b558a6b7573bcc730a08d2e4bd11
CRs-Fixed: 1047817
Arif Hussain преди 9 години
родител
ревизия
aca67305b5
променени са 3 файла, в които са добавени 120 реда и са изтрити 36 реда
  1. 54 1
      core/sap/dfs/inc/radar_filters.h
  2. 50 35
      core/sap/dfs/src/dfs_init.c
  3. 16 0
      core/wma/src/wma_features.c

+ 54 - 1
core/sap/dfs/inc/radar_filters.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011-2015 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2016 The Linux Foundation. All rights reserved.
  *
  * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
  *
@@ -140,3 +140,56 @@ struct dfs_pulse dfs_etsi_radars[] = {
 	/* 20-30us, 2000-4000 PRF, 20 pulses */
 	{20, 30, 2000, 4000, 0, 24, 6, 19, 33, 24, 0, 0, 0, 36},        /* Type 4 */
 };
+
+struct dfs_pulse dfs_korea_radars[] = {
+	/* Korea Type 1 */
+	{18,  1,  700, 700,  0, 6,  5,  0,  1, 18,  0, 3,  1, 40},
+
+	/* Korea Type 2 */
+	{10,  1, 1800, 1800, 0, 6,  4,  0,  1, 18,  0, 3,  1, 41},
+
+	/* Korea Type 3 */
+	{70,  1,  330, 330,  0, 6, 20,  0,  2, 18,  0, 3,  1, 42},
+
+	/* Korea Type 4 */
+	{3,   1, 3003, 3003, 1, 7,  2,  0,  1, 18,  0, 0,  1, 43},
+};
+
+struct dfs_pulse dfs_china_radars[] = {
+	/* FCC NEW TYPE 0 */
+	{18,  1,   700,  700, 0,  6,  5,  0,  1, 18, 0, 3, 1,  0},
+	{18,  1,   350,  350, 0,  6,  5,  0,  1, 18, 0, 3, 0,  0},
+
+	/* FCC TYPE 6 */
+	{ 9,  1,  3003, 3003, 1,  7,  5,  0,  1, 18, 0, 0, 1,  1},
+
+	/* FCC TYPE 2 */
+	{23,  5,  4347, 6666, 0, 18,  8,  0,  7, 22, 0, 3, 0,  2},
+
+	/* FCC TYPE 3 */
+	{18, 10,  2000, 5000, 0, 23,  6,  6, 13, 22, 0, 3, 0,  5},
+
+	/* FCC TYPE 4 */
+	{16, 15,  2000, 5000, 0, 25,  5, 11, 23, 22, 0, 3, 0, 11},
+
+	/*
+	 * FCC NEW TYPE 1
+	 * 518us to 938us pulses (min 56 pulses)
+	 */
+	{57,  1,  1066, 1930, 0,  6, 20,  0,  1, 22, 0, 3, 0, 21},
+
+	/*
+	 * FCC NEW TYPE 1
+	 * 938us to 2000 pulses (min 26 pulses)
+	 */
+	{27,  1,   500, 1066, 0,  6, 13,  0,  1, 22, 0, 3, 0, 22},
+
+	/*
+	 *  FCC NEW TYPE 1
+	 *  2000 to 3067us pulses (min 17 pulses)
+	 */
+	{18,  1,   325,  500, 0,  6,  9,  0,  1, 22, 0, 3, 0, 23},
+
+	/* CN TYPE 1 */
+	{20,  1,  1000, 1000, 0,  6,  5,  0,  1, 18, 0, 3, 1, 24},
+};

+ 50 - 35
core/sap/dfs/src/dfs_init.c

@@ -384,53 +384,67 @@ int dfs_init_radar_filters(struct ieee80211com *ic,
 	dfs_print_filters(ic);
 #endif
 	dfs->dfs_rinfo.rn_numbin5radars = numb5radars;
-	if (dfs->dfs_b5radars != NULL)
+	if (dfs->dfs_b5radars != NULL) {
 		OS_FREE(dfs->dfs_b5radars);
+		dfs->dfs_b5radars = NULL;
+	}
 
-	dfs->dfs_b5radars = (struct dfs_bin5radars *)os_malloc(NULL,
-							       numb5radars *
-							       sizeof(struct
-								      dfs_bin5radars),
-							       GFP_KERNEL);
-	if (dfs->dfs_b5radars == NULL) {
-		DFS_DPRINTK(dfs, ATH_DEBUG_DFS,
-			    "%s: cannot allocate memory for bin5 radars",
-			    __func__);
-		goto bad4;
+	if (dfs->dfs_b5radars_ext_seg != NULL) {
+		OS_FREE(dfs->dfs_b5radars_ext_seg);
+		dfs->dfs_b5radars_ext_seg = NULL;
 	}
 
-	if (ic->dfs_hw_bd_id !=  DFS_HWBD_QCA6174) {
-		dfs->dfs_b5radars_ext_seg =
-			(struct dfs_bin5radars *)os_malloc(NULL, numb5radars *
+	if (numb5radars) {
+		dfs->dfs_b5radars = (struct dfs_bin5radars *)os_malloc(NULL,
+					numb5radars *
+					sizeof(struct dfs_bin5radars),
+					GFP_KERNEL);
+		if (dfs->dfs_b5radars == NULL) {
+			DFS_DPRINTK(dfs, ATH_DEBUG_DFS,
+				"%s: cannot allocate memory for bin5 radars",
+				__func__);
+			goto bad4;
+		}
+
+		if (ic->dfs_hw_bd_id !=  DFS_HWBD_QCA6174) {
+			dfs->dfs_b5radars_ext_seg =
+				(struct dfs_bin5radars *)os_malloc(NULL,
+						numb5radars *
 						sizeof(struct dfs_bin5radars),
 						GFP_KERNEL);
-		if (dfs->dfs_b5radars_ext_seg == NULL) {
-			QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR,
-				  "%s:Fail allocate memory for ext bin5 radars",
-				  __func__);
-			goto bad4;
+			if (dfs->dfs_b5radars_ext_seg == NULL) {
+				QDF_TRACE(QDF_MODULE_ID_SAP,
+				QDF_TRACE_LEVEL_ERROR,
+				"%s:Fail allocate memory for ext bin5 radars",
+				__func__);
+				goto bad4;
+			}
 		}
-	}
 
-	for (n = 0; n < numb5radars; n++) {
-		dfs->dfs_b5radars[n].br_pulse = b5pulses[n];
-		dfs->dfs_b5radars[n].br_pulse.b5_timewindow *=
-					DFS_BIN5_TIME_WINDOW_UNITS_MULTIPLIER;
-		if (dfs->dfs_b5radars[n].br_pulse.b5_rssithresh <
-		    min_rssithresh)
-			min_rssithresh =
+		for (n = 0; n < numb5radars; n++) {
+			dfs->dfs_b5radars[n].br_pulse = b5pulses[n];
+			dfs->dfs_b5radars[n].br_pulse.b5_timewindow *=
+				DFS_BIN5_TIME_WINDOW_UNITS_MULTIPLIER;
+			if (dfs->dfs_b5radars[n].br_pulse.b5_rssithresh <
+					min_rssithresh)
+				min_rssithresh =
 				dfs->dfs_b5radars[n].br_pulse.b5_rssithresh;
-		if (dfs->dfs_b5radars[n].br_pulse.b5_maxdur > max_pulsedur)
-			max_pulsedur = dfs->dfs_b5radars[n].br_pulse.b5_maxdur;
-	}
 
-	if (ic->dfs_hw_bd_id !=  DFS_HWBD_QCA6174) {
-		for (n = 0; n < numb5radars; n++) {
-			dfs->dfs_b5radars_ext_seg[n].br_pulse = b5pulses[n];
+			if (dfs->dfs_b5radars[n].br_pulse.b5_maxdur >
+					max_pulsedur)
+				max_pulsedur =
+				dfs->dfs_b5radars[n].br_pulse.b5_maxdur;
+		}
+
+		if (ic->dfs_hw_bd_id !=  DFS_HWBD_QCA6174) {
+			for (n = 0; n < numb5radars; n++) {
+				dfs->dfs_b5radars_ext_seg[n].br_pulse =
+					b5pulses[n];
 			dfs->dfs_b5radars_ext_seg[n].br_pulse.b5_timewindow *=
-					DFS_BIN5_TIME_WINDOW_UNITS_MULTIPLIER;
+				DFS_BIN5_TIME_WINDOW_UNITS_MULTIPLIER;
 			b5_rssithresh =
-			    dfs->dfs_b5radars_ext_seg[n].br_pulse.b5_rssithresh;
+			dfs->dfs_b5radars_ext_seg[n].br_pulse.b5_rssithresh;
+
 			if (b5_rssithresh < min_rssithresh)
 				min_rssithresh = b5_rssithresh;
 
@@ -439,6 +453,7 @@ int dfs_init_radar_filters(struct ieee80211com *ic,
 			if (b5_maxdur > max_pulsedur)
 				max_pulsedur = b5_maxdur;
 
+			}
 		}
 	}
 

+ 16 - 0
core/wma/src/wma_features.c

@@ -7041,6 +7041,22 @@ void wma_dfs_configure(struct ieee80211com *ic)
 		rinfo.b5pulses = dfs_jpn_bin5pulses;
 		rinfo.numb5radars = QDF_ARRAY_SIZE(dfs_jpn_bin5pulses);
 		break;
+	case DFS_CN_REGION:
+		WMA_LOGI("%s: DFS-CN domain", __func__);
+		rinfo.dfsdomain = DFS_CN_REGION;
+		rinfo.dfs_radars = dfs_china_radars;
+		rinfo.numradars = QDF_ARRAY_SIZE(dfs_china_radars);
+		rinfo.b5pulses = NULL;
+		rinfo.numb5radars = 0;
+		break;
+	case DFS_KR_REGION:
+		WMA_LOGI("%s: DFS-KR domain", __func__);
+		rinfo.dfsdomain = DFS_KR_REGION;
+		rinfo.dfs_radars = dfs_korea_radars;
+		rinfo.numradars = QDF_ARRAY_SIZE(dfs_korea_radars);
+		rinfo.b5pulses = NULL;
+		rinfo.numb5radars = 0;
+		break;
 	default:
 		WMA_LOGI("%s: DFS-UNINT domain", __func__);
 		rinfo.dfsdomain = DFS_UNINIT_REGION;