qcacmn: Add support to set MAC address command in WMI

As part of new enhancements, driver is supporting MAC address update
after VDE creation in the FW. To support this feature add WMI support
to send MAC address command to the FW.

Change-Id: Ie4b7291520793c8aa501fefccaf7b91ab22e9054
CRs-Fixed: 3084119
This commit is contained in:
Bapiraju Alla
2021-11-29 05:56:28 -08:00
gecommit door Madan Koyyalamudi
bovenliggende 16219ce7ce
commit 707fb8a2f8
5 gewijzigde bestanden met toevoegingen van 106 en 0 verwijderingen

Bestand weergeven

@@ -4579,4 +4579,16 @@ QDF_STATUS
wmi_unified_pdev_set_mec_timer(struct wmi_unified *wmi_handle,
struct set_mec_timer_params *param);
#endif
#ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
/**
* wmi_unified_send_set_mac_addr() - Send VDEV set MAC address command to FW
* @wmi_handle: WMI handle
* @params: Set MAC address command params
*
* Return: QDF_STATUS_SUCCESS for success or error code
*/
QDF_STATUS wmi_unified_send_set_mac_addr(struct wmi_unified *wmi_handle,
struct set_mac_addr_params *params);
#endif
#endif /* _WMI_UNIFIED_API_H_ */

Bestand weergeven

@@ -4722,6 +4722,9 @@ typedef enum {
#endif
wmi_pdev_fips_extend_event_id,
wmi_roam_frame_event_id,
#ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
wmi_vdev_update_mac_addr_conf_eventid,
#endif
wmi_events_max,
} wmi_conv_event_id;
@@ -5336,6 +5339,9 @@ typedef enum {
wmi_service_phy_dma_byte_swap_support,
wmi_service_spectral_session_info_support,
wmi_service_mu_snif,
#ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
wmi_service_dynamic_update_vdev_macaddr_support,
#endif
wmi_services_max,
} wmi_conv_service_ids;
#define WMI_SERVICE_UNAVAILABLE 0xFFFF
@@ -8301,6 +8307,20 @@ struct set_mec_timer_params {
};
#endif
#ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
/**
* struct set_mac_addr_params - Set MAC address command parameter
* @vdev_id: vdev id
* @mac_addr: VDEV MAC address
* @mmld_addr: MLD address of the vdev
*/
struct set_mac_addr_params {
uint8_t vdev_id;
struct qdf_mac_addr mac_addr;
struct qdf_mac_addr mld_addr;
};
#endif
#ifdef WLAN_FEATURE_SON
/**
* struct wmi_host_inst_rssi_stats_resp - inst rssi stats

Bestand weergeven

@@ -2789,6 +2789,11 @@ QDF_STATUS
(*extract_inst_rssi_stats_resp)(wmi_unified_t wmi_handle, void *evt_buf,
struct wmi_host_inst_rssi_stats_resp *inst_rssi_resp);
#endif
#ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
QDF_STATUS (*send_set_mac_address_cmd)(wmi_unified_t wmi,
struct set_mac_addr_params *params);
#endif
};
/* Forward declartion for psoc*/

Bestand weergeven

@@ -3662,3 +3662,14 @@ wmi_unified_pdev_set_mec_timer(struct wmi_unified *wmi_handle,
return QDF_STATUS_E_FAILURE;
}
#endif
#ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
QDF_STATUS wmi_unified_send_set_mac_addr(struct wmi_unified *wmi_handle,
struct set_mac_addr_params *params)
{
if (wmi_handle->ops->send_set_mac_address_cmd)
return wmi_handle->ops->send_set_mac_address_cmd(wmi_handle,
params);
return QDF_STATUS_E_FAILURE;
}
#endif

Bestand weergeven

@@ -16770,6 +16770,51 @@ send_set_halphy_cal_tlv(wmi_unified_t wmi_handle,
return ret;
}
#ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
/**
* send_set_mac_address_cmd_tlv() - send set MAC address command to fw
* @wmi: wmi handle
* @params: set MAC address command params
*
* Return: QDF_STATUS_SUCCESS for success or error code
*/
static QDF_STATUS
send_set_mac_address_cmd_tlv(wmi_unified_t wmi,
struct set_mac_addr_params *params)
{
wmi_vdev_update_mac_addr_cmd_fixed_param *cmd;
wmi_buf_t buf;
int32_t len = sizeof(*cmd);
buf = wmi_buf_alloc(wmi, len);
if (!buf)
return QDF_STATUS_E_NOMEM;
cmd = (wmi_vdev_update_mac_addr_cmd_fixed_param *)wmi_buf_data(buf);
WMITLV_SET_HDR(
&cmd->tlv_header,
WMITLV_TAG_STRUC_wmi_vdev_update_mac_addr_cmd_fixed_param,
WMITLV_GET_STRUCT_TLVLEN
(wmi_vdev_update_mac_addr_cmd_fixed_param));
cmd->vdev_id = params->vdev_id;
WMI_CHAR_ARRAY_TO_MAC_ADDR(params->mac_addr.bytes, &cmd->vdev_macaddr);
WMI_CHAR_ARRAY_TO_MAC_ADDR(params->mld_addr.bytes, &cmd->mld_macaddr);
wmi_debug("vdev %d mac_addr " QDF_MAC_ADDR_FMT " mld_addr "
QDF_MAC_ADDR_FMT, cmd->vdev_id,
QDF_MAC_ADDR_REF(params->mac_addr.bytes),
QDF_MAC_ADDR_REF(params->mld_addr.bytes));
wmi_mtrace(WMI_VDEV_UPDATE_MAC_ADDR_CMDID, cmd->vdev_id, 0);
if (wmi_unified_cmd_send(wmi, buf, len,
WMI_VDEV_UPDATE_MAC_ADDR_CMDID)) {
wmi_buf_free(buf);
return QDF_STATUS_E_FAILURE;
}
return QDF_STATUS_SUCCESS;
}
#endif
struct wmi_ops tlv_ops = {
.send_vdev_create_cmd = send_vdev_create_cmd_tlv,
.send_vdev_delete_cmd = send_vdev_delete_cmd_tlv,
@@ -17178,9 +17223,14 @@ struct wmi_ops tlv_ops = {
.send_mgmt_rx_reo_filter_config_cmd =
send_mgmt_rx_reo_filter_config_cmd_tlv,
#endif
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
.send_roam_set_param_cmd = send_roam_set_param_cmd_tlv,
#endif /* WLAN_FEATURE_ROAM_OFFLOAD */
#ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
.send_set_mac_address_cmd = send_set_mac_address_cmd_tlv,
#endif
};
/**
@@ -17619,6 +17669,10 @@ event_ids[wmi_roam_scan_chan_list_id] =
#endif
event_ids[wmi_roam_frame_event_id] =
WMI_ROAM_FRAME_EVENTID;
#ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
event_ids[wmi_vdev_update_mac_addr_conf_eventid] =
WMI_VDEV_UPDATE_MAC_ADDR_CONF_EVENTID;
#endif
}
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
@@ -18058,6 +18112,10 @@ static void populate_tlv_service(uint32_t *wmi_service)
wmi_service[wmi_service_spectral_session_info_support] =
WMI_SERVICE_UNAVAILABLE;
wmi_service[wmi_service_mu_snif] = WMI_SERVICE_MU_SNIF;
#ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
wmi_service[wmi_service_dynamic_update_vdev_macaddr_support] =
WMI_SERVICE_DYNAMIC_VDEV_MAC_ADDR_UPDATE_SUPPORT;
#endif
}
/**