Răsfoiți Sursa

qcacmn: Convert wireless modes from target to host define

Convert wireless modes recieved in extended service ready to host
defines.

Change-Id: Iaabac651f5c0f6e781f26d31ff352d94742c2d90
CRs-Fixed: 1061096
Kiran Venkatappa 8 ani în urmă
părinte
comite
161654aefa
1 a modificat fișierele cu 79 adăugiri și 71 ștergeri
  1. 79 71
      wmi/src/wmi_unified_tlv.c

+ 79 - 71
wmi/src/wmi_unified_tlv.c

@@ -12562,105 +12562,112 @@ static QDF_STATUS extract_service_ready_tlv(wmi_unified_t wmi_handle,
 	return QDF_STATUS_SUCCESS;
 }
 
-/**
- * extract_hal_reg_cap_tlv() - extract HAL registered capabilities
- * @wmi_handle: wmi handle
- * @param evt_buf: Pointer to event buffer
- * @param cap: pointer to hold HAL reg capabilities
+/* convert_wireless_modes_tlv() - Convert REGDMN_MODE values sent by target
+ *         to host internal WMI_HOST_REGDMN_MODE values.
+ *         REGULATORY TODO : REGDMN_MODE_11AC_VHT*_2G values are not used by the
+ *         host currently. Add this in the future if required.
+ *         11AX (Phase II) : 11ax related values are not currently
+ *         advertised separately by FW. As part of phase II regulatory bring-up,
+ *         finalize the advertisement mechanism.
+ * @target_wireless_mode: target wireless mode received in message
  *
- * Return: QDF_STATUS_SUCCESS for success or error code
+ * Return: returns the host internal wireless mode.
  */
-static QDF_STATUS extract_hal_reg_cap_tlv(wmi_unified_t wmi_handle,
-	void *evt_buf, struct wlan_psoc_hal_reg_capability *cap)
+static inline uint32_t convert_wireless_modes_tlv(uint32_t target_wireless_mode)
 {
-	WMI_SERVICE_READY_EVENTID_param_tlvs *param_buf;
-	u_int32_t wireless_modes_orig = 0;
 
-	param_buf = (WMI_SERVICE_READY_EVENTID_param_tlvs *) evt_buf;
+	uint32_t wireless_modes = 0;
 
-	qdf_mem_copy(cap, (((uint8_t *)param_buf->hal_reg_capabilities) +
-		sizeof(uint32_t)),
-		sizeof(struct wlan_psoc_hal_reg_capability));
+	if (target_wireless_mode & REGDMN_MODE_11A)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_11A;
 
-	/* Convert REGDMN_MODE values sent by target to host internal
-	 * WMI_HOST_REGDMN_MODE values.
-	 *
-	 * REGULATORY TODO : REGDMN_MODE_11AC_VHT*_2G values are not used by the
-	 * host currently. Add this in the future if required.
-	 *
-	 * 11AX TODO (Phase II) : 11ax related values are not currently
-	 * advertised separately by FW. As part of phase II regulatory bring-up,
-	 * finalize the advertisement mechanism.
-	 */
+	if (target_wireless_mode & REGDMN_MODE_TURBO)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_TURBO;
 
-	wireless_modes_orig = param_buf->hal_reg_capabilities->wireless_modes;
-	cap->wireless_modes = 0;
+	if (target_wireless_mode & REGDMN_MODE_11B)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_11B;
 
-	if (wireless_modes_orig & REGDMN_MODE_11A)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_11A;
+	if (target_wireless_mode & REGDMN_MODE_PUREG)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_PUREG;
 
-	if (wireless_modes_orig & REGDMN_MODE_TURBO)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_TURBO;
+	if (target_wireless_mode & REGDMN_MODE_11G)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_11G;
 
-	if (wireless_modes_orig & REGDMN_MODE_11B)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_11B;
+	if (target_wireless_mode & REGDMN_MODE_108G)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_108G;
 
-	if (wireless_modes_orig & REGDMN_MODE_PUREG)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_PUREG;
+	if (target_wireless_mode & REGDMN_MODE_108A)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_108A;
 
-	if (wireless_modes_orig & REGDMN_MODE_11G)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_11G;
+	if (target_wireless_mode & REGDMN_MODE_XR)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_XR;
 
-	if (wireless_modes_orig & REGDMN_MODE_108G)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_108G;
+	if (target_wireless_mode & REGDMN_MODE_11A_HALF_RATE)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_11A_HALF_RATE;
 
-	if (wireless_modes_orig & REGDMN_MODE_108A)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_108A;
+	if (target_wireless_mode & REGDMN_MODE_11A_QUARTER_RATE)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_11A_QUARTER_RATE;
 
-	if (wireless_modes_orig & REGDMN_MODE_XR)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_XR;
+	if (target_wireless_mode & REGDMN_MODE_11NG_HT20)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_11NG_HT20;
 
-	if (wireless_modes_orig & REGDMN_MODE_11A_HALF_RATE)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_11A_HALF_RATE;
+	if (target_wireless_mode & REGDMN_MODE_11NA_HT20)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_11NA_HT20;
 
-	if (wireless_modes_orig & REGDMN_MODE_11A_QUARTER_RATE)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_11A_QUARTER_RATE;
+	if (target_wireless_mode & REGDMN_MODE_11NG_HT40PLUS)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_11NG_HT40PLUS;
 
-	if (wireless_modes_orig & REGDMN_MODE_11NG_HT20)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_11NG_HT20;
+	if (target_wireless_mode & REGDMN_MODE_11NG_HT40MINUS)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_11NG_HT40MINUS;
 
-	if (wireless_modes_orig & REGDMN_MODE_11NA_HT20)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_11NA_HT20;
+	if (target_wireless_mode & REGDMN_MODE_11NA_HT40PLUS)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_11NA_HT40PLUS;
 
-	if (wireless_modes_orig & REGDMN_MODE_11NG_HT40PLUS)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_11NG_HT40PLUS;
+	if (target_wireless_mode & REGDMN_MODE_11NA_HT40MINUS)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_11NA_HT40MINUS;
 
-	if (wireless_modes_orig & REGDMN_MODE_11NG_HT40MINUS)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_11NG_HT40MINUS;
+	if (target_wireless_mode & REGDMN_MODE_11AC_VHT20)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_11AC_VHT20;
 
-	if (wireless_modes_orig & REGDMN_MODE_11NA_HT40PLUS)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_11NA_HT40PLUS;
+	if (target_wireless_mode & REGDMN_MODE_11AC_VHT40PLUS)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_11AC_VHT40PLUS;
 
-	if (wireless_modes_orig & REGDMN_MODE_11NA_HT40MINUS)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_11NA_HT40MINUS;
+	if (target_wireless_mode & REGDMN_MODE_11AC_VHT40MINUS)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_11AC_VHT40MINUS;
 
-	if (wireless_modes_orig & REGDMN_MODE_11AC_VHT20)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_11AC_VHT20;
+	if (target_wireless_mode & REGDMN_MODE_11AC_VHT80)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_11AC_VHT80;
 
-	if (wireless_modes_orig & REGDMN_MODE_11AC_VHT40PLUS)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_11AC_VHT40PLUS;
+	if (target_wireless_mode & REGDMN_MODE_11AC_VHT160)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_11AC_VHT160;
 
-	if (wireless_modes_orig & REGDMN_MODE_11AC_VHT40MINUS)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_11AC_VHT40MINUS;
+	if (target_wireless_mode & REGDMN_MODE_11AC_VHT80_80)
+		wireless_modes |= WMI_HOST_REGDMN_MODE_11AC_VHT80_80;
 
-	if (wireless_modes_orig & REGDMN_MODE_11AC_VHT80)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_11AC_VHT80;
+	return wireless_modes;
+}
 
-	if (wireless_modes_orig & REGDMN_MODE_11AC_VHT160)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_11AC_VHT160;
+/**
+ * extract_hal_reg_cap_tlv() - extract HAL registered capabilities
+ * @wmi_handle: wmi handle
+ * @param evt_buf: Pointer to event buffer
+ * @param cap: pointer to hold HAL reg capabilities
+ *
+ * Return: QDF_STATUS_SUCCESS for success or error code
+ */
+static QDF_STATUS extract_hal_reg_cap_tlv(wmi_unified_t wmi_handle,
+	void *evt_buf, struct wlan_psoc_hal_reg_capability *cap)
+{
+	WMI_SERVICE_READY_EVENTID_param_tlvs *param_buf;
+
+	param_buf = (WMI_SERVICE_READY_EVENTID_param_tlvs *) evt_buf;
+
+	qdf_mem_copy(cap, (((uint8_t *)param_buf->hal_reg_capabilities) +
+		sizeof(uint32_t)),
+		sizeof(struct wlan_psoc_hal_reg_capability));
 
-	if (wireless_modes_orig & REGDMN_MODE_11AC_VHT80_80)
-		cap->wireless_modes |= WMI_HOST_REGDMN_MODE_11AC_VHT80_80;
+	cap->wireless_modes = convert_wireless_modes_tlv(
+			param_buf->hal_reg_capabilities->wireless_modes);
 
 	return QDF_STATUS_SUCCESS;
 }
@@ -13819,7 +13826,8 @@ static QDF_STATUS extract_reg_cap_service_ready_ext_tlv(
 	param->eeprom_reg_domain_ext = ext_reg_cap->eeprom_reg_domain_ext;
 	param->regcap1 = ext_reg_cap->regcap1;
 	param->regcap2 = ext_reg_cap->regcap2;
-	param->wireless_modes = ext_reg_cap->wireless_modes;
+	param->wireless_modes = convert_wireless_modes_tlv(
+						ext_reg_cap->wireless_modes);
 	param->low_2ghz_chan = ext_reg_cap->low_2ghz_chan;
 	param->high_2ghz_chan = ext_reg_cap->high_2ghz_chan;
 	param->low_5ghz_chan = ext_reg_cap->low_5ghz_chan;