qcacld-3.0: wma to target_if migration of btm_blacklist_event
Currently, wmi_roam_blacklist_event_id data is extracted and processing is also done in wma. This is not inline with component model where target_if takes care of data extraction and handover the extracted data to corresponding component(connection mgr in this case). Add changes to support the same. Change-Id: I41d2ef6c228acd8f86f24107c02d11f1a8ac6dea CRs-Fixed: 2990369
This commit is contained in:

committed by
Madan Koyyalamudi

szülő
a3c80b5790
commit
cb5b2dde46
@@ -278,6 +278,20 @@ QDF_STATUS
|
||||
wmi_extract_roam_event(wmi_unified_t wmi_handle, uint8_t *event,
|
||||
uint32_t data_len,
|
||||
struct roam_offload_roam_event *roam_event);
|
||||
|
||||
/**
|
||||
* wmi_extract_btm_blacklist_event - Extract btm blacklist event
|
||||
* @wmi_handle: WMI handle
|
||||
* @event: Event data received from firmware
|
||||
* @data_len: Event data length received from firmware
|
||||
* @dst_list: Extract the event and fill in dst_list
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS
|
||||
wmi_extract_btm_blacklist_event(wmi_unified_t wmi_handle,
|
||||
uint8_t *event, uint32_t data_len,
|
||||
struct roam_blacklist_event **dst_list);
|
||||
#endif /* ROAM_TARGET_IF_CONVERGENCE */
|
||||
#endif /* WLAN_FEATURE_ROAM_OFFLOAD */
|
||||
|
||||
|
@@ -378,5 +378,18 @@ wmi_extract_roam_event(wmi_unified_t wmi_handle, uint8_t *event,
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wmi_extract_btm_blacklist_event(wmi_unified_t wmi_handle,
|
||||
uint8_t *event, uint32_t data_len,
|
||||
struct roam_blacklist_event **dst_list)
|
||||
{
|
||||
if (wmi_handle->ops->extract_btm_bl_event)
|
||||
return wmi_handle->ops->extract_btm_bl_event(wmi_handle,
|
||||
event,
|
||||
data_len,
|
||||
dst_list);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
#endif /* ROAM_TARGET_IF_CONVERGENCE */
|
||||
#endif
|
||||
|
@@ -2068,6 +2068,115 @@ end:
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ROAM_TARGET_IF_CONVERGENCE
|
||||
static enum blm_reject_ap_reason wmi_get_reject_reason(uint32_t reason)
|
||||
{
|
||||
switch (reason) {
|
||||
case WMI_BL_REASON_NUD_FAILURE:
|
||||
return REASON_NUD_FAILURE;
|
||||
case WMI_BL_REASON_STA_KICKOUT:
|
||||
return REASON_STA_KICKOUT;
|
||||
case WMI_BL_REASON_ROAM_HO_FAILURE:
|
||||
return REASON_ROAM_HO_FAILURE;
|
||||
case WMI_BL_REASON_ASSOC_REJECT_POOR_RSSI:
|
||||
return REASON_ASSOC_REJECT_POOR_RSSI;
|
||||
case WMI_BL_REASON_ASSOC_REJECT_OCE:
|
||||
return REASON_ASSOC_REJECT_OCE;
|
||||
case WMI_BL_REASON_USERSPACE_BL:
|
||||
return REASON_USERSPACE_BL;
|
||||
case WMI_BL_REASON_USERSPACE_AVOID_LIST:
|
||||
return REASON_USERSPACE_AVOID_LIST;
|
||||
case WMI_BL_REASON_BTM_DIASSOC_IMMINENT:
|
||||
return REASON_BTM_DISASSOC_IMMINENT;
|
||||
case WMI_BL_REASON_BTM_BSS_TERMINATION:
|
||||
return REASON_BTM_BSS_TERMINATION;
|
||||
case WMI_BL_REASON_BTM_MBO_RETRY:
|
||||
return REASON_BTM_MBO_RETRY;
|
||||
case WMI_BL_REASON_REASSOC_RSSI_REJECT:
|
||||
return REASON_REASSOC_RSSI_REJECT;
|
||||
case WMI_BL_REASON_REASSOC_NO_MORE_STAS:
|
||||
return REASON_REASSOC_NO_MORE_STAS;
|
||||
default:
|
||||
return REASON_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
static QDF_STATUS
|
||||
extract_btm_blacklist_event(wmi_unified_t wmi_handle,
|
||||
uint8_t *event, uint32_t len,
|
||||
struct roam_blacklist_event **list)
|
||||
{
|
||||
WMI_ROAM_BLACKLIST_EVENTID_param_tlvs *param_buf;
|
||||
wmi_roam_blacklist_event_fixed_param *resp_event;
|
||||
wmi_roam_blacklist_with_timeout_tlv_param *src_list;
|
||||
struct roam_blacklist_timeout *roam_blacklist;
|
||||
struct roam_blacklist_event *dst_list;
|
||||
uint32_t num_entries, i;
|
||||
|
||||
param_buf = (WMI_ROAM_BLACKLIST_EVENTID_param_tlvs *)event;
|
||||
if (!param_buf) {
|
||||
wmi_err("Invalid event buffer");
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
resp_event = param_buf->fixed_param;
|
||||
if (!resp_event) {
|
||||
wmi_err("received null event data from target");
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
if (resp_event->vdev_id >= WLAN_MAX_VDEVS) {
|
||||
wmi_err("received invalid vdev_id %d", resp_event->vdev_id);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
num_entries = param_buf->num_blacklist_with_timeout;
|
||||
if (num_entries == 0) {
|
||||
/* no aps to blacklist just return*/
|
||||
wmi_err("No APs in blacklist received");
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
if (num_entries > MAX_RSSI_AVOID_BSSID_LIST) {
|
||||
wmi_err("num blacklist entries:%d exceeds maximum value",
|
||||
num_entries);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
src_list = param_buf->blacklist_with_timeout;
|
||||
if (len < (sizeof(*resp_event) + (num_entries * sizeof(*src_list)))) {
|
||||
wmi_err("Invalid length:%d", len);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
dst_list = qdf_mem_malloc(sizeof(struct roam_blacklist_event) +
|
||||
(sizeof(struct roam_blacklist_timeout) *
|
||||
num_entries));
|
||||
if (!dst_list)
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
|
||||
dst_list->vdev_id = resp_event->vdev_id;
|
||||
roam_blacklist = &dst_list->roam_blacklist[0];
|
||||
for (i = 0; i < num_entries; i++) {
|
||||
WMI_MAC_ADDR_TO_CHAR_ARRAY(&src_list->bssid,
|
||||
roam_blacklist->bssid.bytes);
|
||||
roam_blacklist->timeout = src_list->timeout;
|
||||
roam_blacklist->received_time = src_list->timestamp;
|
||||
roam_blacklist->original_timeout = src_list->original_timeout;
|
||||
roam_blacklist->reject_reason =
|
||||
wmi_get_reject_reason(src_list->reason);
|
||||
roam_blacklist->source = src_list->source;
|
||||
roam_blacklist++;
|
||||
src_list++;
|
||||
}
|
||||
|
||||
dst_list->num_entries = num_entries;
|
||||
*list = dst_list;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
|
||||
void wmi_roam_offload_attach_tlv(wmi_unified_t wmi_handle)
|
||||
{
|
||||
struct wmi_ops *ops = wmi_handle->ops;
|
||||
@@ -2080,6 +2189,7 @@ void wmi_roam_offload_attach_tlv(wmi_unified_t wmi_handle)
|
||||
ops->extract_roam_sync_event = extract_roam_sync_event_tlv;
|
||||
ops->extract_roam_sync_frame_event = extract_roam_sync_frame_event_tlv;
|
||||
ops->extract_roam_event = extract_roam_event_tlv;
|
||||
ops->extract_btm_bl_event = extract_btm_blacklist_event;
|
||||
#endif /* ROAM_TARGET_IF_CONVERGENCE */
|
||||
ops->send_set_ric_req_cmd = send_set_ric_req_cmd_tlv;
|
||||
ops->send_process_roam_synch_complete_cmd =
|
||||
|
Reference in New Issue
Block a user