Эх сурвалжийг харах

Merge "qca-wifi: Extract Peer Ratecode list event data"

Linux Build Service Account 6 жил өмнө
parent
commit
d735f5e25d

+ 80 - 0
wmi/src/wmi_unified_smart_ant_tlv.c

@@ -296,6 +296,9 @@ send_set_ant_switch_tbl_cmd_tlv(wmi_unified_t wmi_handle,
 	buf_ptr += WMI_TLV_HDR_SIZE;
 	ctrl_chain = (wmi_pdev_set_ant_ctrl_chain *)buf_ptr;
 
+	WMITLV_SET_HDR(&ctrl_chain->tlv_header,
+		       WMITLV_TAG_STRUC_wmi_pdev_set_ant_ctrl_chain,
+		       WMITLV_GET_STRUCT_TLVLEN(wmi_pdev_set_ant_ctrl_chain));
 	ctrl_chain->pdev_id =
 		wmi_handle->ops->convert_pdev_id_host_to_target(param->pdev_id);
 	ctrl_chain->antCtrlChain = param->antCtrlChain;
@@ -304,6 +307,7 @@ send_set_ant_switch_tbl_cmd_tlv(wmi_unified_t wmi_handle,
 	if (wmi_unified_cmd_send(wmi_handle, buf, len,
 				 WMI_PDEV_SET_ANTENNA_SWITCH_TABLE_CMDID)) {
 		wmi_buf_free(buf);
+		WMI_LOGE("%s :WMI Failed\n", __func__);
 		return QDF_STATUS_E_FAILURE;
 	}
 
@@ -470,6 +474,81 @@ static QDF_STATUS send_smart_ant_set_node_config_cmd_tlv(
 	return ret;
 }
 
+/**
+ * extract_peer_ratecode_list_ev_tlv() - extract peer ratecode from event
+ * @wmi_handle: wmi handle
+ * @param evt_buf: pointer to event buffer
+ * @param peer_mac: Pointer to hold peer mac address
+ * @param rate_cap: Pointer to hold ratecode
+ *
+ * @return QDF_STATUS_SUCCESS on success or error code
+ */
+static QDF_STATUS extract_peer_ratecode_list_ev_tlv(
+				wmi_unified_t wmi_handle,
+				void *evt_buf,
+				uint8_t *peer_mac,
+				wmi_sa_rate_cap *rate_cap)
+{
+	WMI_PEER_RATECODE_LIST_EVENTID_param_tlvs *param_buf;
+	wmi_peer_ratecode_list_event_fixed_param *ev;
+	wmi_peer_cck_ofdm_rate_info *ofdm_rate;
+	wmi_peer_mcs_rate_info *mcs_rate;
+	uint8_t i, htindex, j;
+	uint8_t shift = 0;
+
+	param_buf = (WMI_PEER_RATECODE_LIST_EVENTID_param_tlvs *)evt_buf;
+	ev = (wmi_peer_ratecode_list_event_fixed_param *)param_buf->fixed_param;
+	WMI_MAC_ADDR_TO_CHAR_ARRAY(&ev->peer_macaddr, peer_mac);
+
+	for (i = 0; i < SA_BYTES_IN_DWORD; i++) {
+		rate_cap->ratecount[i] = ((ev->ratecount >> (i*8)) &
+						SA_MASK_BYTE);
+	}
+
+	htindex = 0;
+	if (rate_cap->ratecount[0]) {
+		if (param_buf->num_ratecode_legacy >
+				SA_MAX_LEGACY_RATE_DWORDS) {
+			WMI_LOGE("Invalid Number of ratecode_legacy %d",
+					param_buf->num_ratecode_legacy);
+			return QDF_STATUS_E_FAILURE;
+		}
+		for (i = 0; i < param_buf->num_ratecode_legacy; i++) {
+			ofdm_rate = param_buf->ratecode_legacy;
+			for (j = 0; j < SA_BYTES_IN_DWORD; j++) {
+				rate_cap->ratecode_legacy[htindex] =
+					((ofdm_rate->ratecode_legacy >> (8*j)) &
+					SA_MASK_BYTE);
+				htindex++;
+			}
+			ofdm_rate++;
+		}
+	}
+
+	htindex = 0;
+	if (param_buf->num_ratecode_mcs > SA_MAX_HT_RATE_DWORDS) {
+		WMI_LOGE("Invalid Number of ratecode_mcs %d",
+				param_buf->num_ratecode_mcs);
+		return QDF_STATUS_E_FAILURE;
+	}
+	for (i = 0; i < param_buf->num_ratecode_mcs; i++) {
+		mcs_rate = param_buf->ratecode_mcs;
+		for (j = 0; j < SA_BYTES_IN_DWORD; j++) {
+			shift = (8*j);
+			rate_cap->ratecode_20[htindex] =
+			    ((mcs_rate->ratecode_20 >> (shift)) & SA_MASK_BYTE);
+			rate_cap->ratecode_40[htindex] =
+			    ((mcs_rate->ratecode_40 >> (shift)) & SA_MASK_BYTE);
+			rate_cap->ratecode_80[htindex] =
+			    ((mcs_rate->ratecode_80 >> (shift)) & SA_MASK_BYTE);
+			htindex++;
+		}
+		mcs_rate++;
+	}
+
+	return QDF_STATUS_SUCCESS;
+}
+
 void wmi_smart_ant_attach_tlv(wmi_unified_t wmi_handle)
 {
 	struct wmi_ops *ops = wmi_handle->ops;
@@ -482,4 +561,5 @@ void wmi_smart_ant_attach_tlv(wmi_unified_t wmi_handle)
 	ops->send_smart_ant_set_node_config_cmd =
 				send_smart_ant_set_node_config_cmd_tlv;
 	ops->send_set_ant_switch_tbl_cmd = send_set_ant_switch_tbl_cmd_tlv;
+	ops->extract_peer_ratecode_list_ev = extract_peer_ratecode_list_ev_tlv;
 }