qcacld-3.0: Enable vdev manager support for LFR3.0

Enable vdev manager support for LFR3.0

Change-Id: I5e8a420eadd98786fe43d7d6e60980209f7a42e1
CRs-Fixed: 2405842
This commit is contained in:
Sandeep Puligilla
2018-10-23 16:01:11 -07:00
committed by nshrivas
parent cd737decf2
commit 3746d5db95
5 changed files with 139 additions and 13 deletions

View File

@@ -197,6 +197,26 @@ static QDF_STATUS sta_mlme_vdev_notify_up_complete(struct vdev_mlme_obj *vdev_ml
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
/**
* sta_mlme_vdev_notify_roam_start() - MLME vdev Roam start callback
* @vdev_mlme: vdev mlme object
* @event_data_len: event data length
* @event_data: event data
*
* This function is called to VDEV MLME on roaming
* to UP state
*
* Return: QDF_STATUS
*/
static
QDF_STATUS sta_mlme_vdev_notify_roam_start(struct vdev_mlme_obj *vdev_mlme,
uint16_t event_data_len,
void *event_data)
{
return wma_sta_mlme_vdev_roam_notify(vdev_mlme, event_data_len,
event_data);
}
/** /**
* sta_mlme_vdev_disconnect_bss() - MLME vdev disconnect bss callback * sta_mlme_vdev_disconnect_bss() - MLME vdev disconnect bss callback
* @vdev_mlme: vdev mlme object * @vdev_mlme: vdev mlme object
@@ -715,6 +735,7 @@ static struct vdev_mlme_ops sta_mlme_ops = {
.mlme_vdev_sta_conn_start = sta_mlme_vdev_start_connection, .mlme_vdev_sta_conn_start = sta_mlme_vdev_start_connection,
.mlme_vdev_up_send = sta_mlme_vdev_up_send, .mlme_vdev_up_send = sta_mlme_vdev_up_send,
.mlme_vdev_notify_up_complete = sta_mlme_vdev_notify_up_complete, .mlme_vdev_notify_up_complete = sta_mlme_vdev_notify_up_complete,
.mlme_vdev_notify_roam_start = sta_mlme_vdev_notify_roam_start,
.mlme_vdev_disconnect_peers = sta_mlme_vdev_disconnect_bss, .mlme_vdev_disconnect_peers = sta_mlme_vdev_disconnect_bss,
.mlme_vdev_stop_send = sta_mlme_vdev_stop_send, .mlme_vdev_stop_send = sta_mlme_vdev_stop_send,
.mlme_vdev_stop_continue = vdevmgr_mlme_stop_continue, .mlme_vdev_stop_continue = vdevmgr_mlme_stop_continue,

View File

@@ -461,6 +461,20 @@ void wma_set_channel_switch_in_progress(struct wma_txrx_node *iface)
QDF_STATUS wma_sta_mlme_vdev_start_continue(struct vdev_mlme_obj *vdev_mlme, QDF_STATUS wma_sta_mlme_vdev_start_continue(struct vdev_mlme_obj *vdev_mlme,
uint16_t data_len, void *data); uint16_t data_len, void *data);
/**
* wma_sta_mlme_vdev_roam_notify - VDEV roam notify handling
* @vdev_mlme_obj: VDEV MLME comp object
* @data_len: data size
* @data: event data
*
* API invokes VDEV roam event handling
*
* Return: SUCCESS on successful completion of roam event handling
* FAILURE, if it fails due to any
*/
QDF_STATUS wma_sta_mlme_vdev_roam_notify(struct vdev_mlme_obj *vdev_mlme,
uint16_t data_len, void *data);
/** /**
* wma_ap_mlme_vdev_start_continue - VDEV start response handling * wma_ap_mlme_vdev_start_continue - VDEV start response handling
* @vdev_mlme_obj: VDEV MLME comp object * @vdev_mlme_obj: VDEV MLME comp object

View File

@@ -205,6 +205,20 @@ void wma_process_roam_synch_fail(WMA_HANDLE handle,
int wma_roam_synch_event_handler(void *handle, uint8_t *event, int wma_roam_synch_event_handler(void *handle, uint8_t *event,
uint32_t len); uint32_t len);
/**
* wma_mlme_roam_synch_event_handler_cb() - roam synch event handler
* @handle: wma handle
* @event: event data
* @len: length of data
*
* This function is roam synch event handler. It sends roam
* indication for upper layer.
*
* Return: Success or Failure status
*/
int wma_mlme_roam_synch_event_handler_cb(void *handle, uint8_t *event,
uint32_t len);
/** /**
* wma_roam_synch_frame_event_handler() - roam synch frame event handler * wma_roam_synch_frame_event_handler() - roam synch frame event handler
* @handle: wma handle * @handle: wma handle

View File

@@ -2389,18 +2389,7 @@ static void wma_roam_update_vdev(tp_wma_handle wma,
qdf_mem_free(add_sta_params); qdf_mem_free(add_sta_params);
} }
/** int wma_mlme_roam_synch_event_handler_cb(void *handle, uint8_t *event,
* wma_roam_synch_event_handler() - roam synch event handler
* @handle: wma handle
* @event: event data
* @len: length of data
*
* This function is roam synch event handler. It sends roam
* indication for upper layer.
*
* Return: Success or Failure status
*/
int wma_roam_synch_event_handler(void *handle, uint8_t *event,
uint32_t len) uint32_t len)
{ {
WMI_ROAM_SYNCH_EVENTID_param_tlvs *param_buf = NULL; WMI_ROAM_SYNCH_EVENTID_param_tlvs *param_buf = NULL;
@@ -2787,6 +2776,78 @@ int wma_roam_synch_frame_event_handler(void *handle, uint8_t *event,
return 0; return 0;
} }
#ifdef CONFIG_VDEV_SM
/**
* __wma_roam_synch_event_handler() - roam synch event handler
* @handle: wma handle
* @event: event data
* @len: length of data
*
* This function is roam synch event handler.It sends roam
* indication for upper layer.
*
* Return: Success or Failure status
*/
int wma_roam_synch_event_handler(void *handle, uint8_t *event,
uint32_t len)
{
QDF_STATUS qdf_status = QDF_STATUS_E_FAILURE;
int status = -EINVAL;
tp_wma_handle wma = (tp_wma_handle) handle;
struct wma_txrx_node *iface = NULL;
wmi_roam_synch_event_fixed_param *synch_event = NULL;
WMI_ROAM_SYNCH_EVENTID_param_tlvs *param_buf = NULL;
if (!event) {
wma_err_rl("event param null");
goto cleanup;
}
param_buf = (WMI_ROAM_SYNCH_EVENTID_param_tlvs *)event;
if (!param_buf) {
wma_err_rl("received null buf from target");
goto cleanup;
}
synch_event = param_buf->fixed_param;
if (!synch_event) {
wma_err_rl("received null event data from target");
goto cleanup;
}
if (synch_event->vdev_id >= wma->max_bssid) {
wma_err_rl("received invalid vdev_id %d",
synch_event->vdev_id);
goto cleanup;
}
iface = &wma->interfaces[synch_event->vdev_id];
qdf_status = wlan_vdev_mlme_sm_deliver_evt(iface->vdev,
WLAN_VDEV_SM_EV_ROAM,
sizeof(*synch_event),
synch_event);
if (QDF_IS_STATUS_ERROR(qdf_status)) {
wma_err("Failed to send the EV_ROAM");
} else {
wma_debug("Posted EV_ROAM to VDEV SM");
return 0;
}
cleanup:
if (wma && synch_event)
iface->roam_synch_in_progress = false;
return status;
}
#else
int wma_roam_synch_event_handler(void *handle, uint8_t *event,
uint32_t len)
{
wma_mlme_roam_synch_event_handler_cb(handle, event, len);
return 0;
}
#endif
#define RSN_CAPS_SHIFT 16 #define RSN_CAPS_SHIFT 16
/** /**
* wma_roam_scan_fill_self_caps() - fill capabilities * wma_roam_scan_fill_self_caps() - fill capabilities

View File

@@ -4923,6 +4923,22 @@ QDF_STATUS wma_sta_mlme_vdev_start_continue(struct vdev_mlme_obj *vdev_mlme,
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
QDF_STATUS wma_sta_mlme_vdev_roam_notify(struct vdev_mlme_obj *vdev_mlme,
uint16_t data_len, void *data)
{
tp_wma_handle wma = cds_get_context(QDF_MODULE_ID_WMA);
int ret;
QDF_STATUS status = QDF_STATUS_SUCCESS;
ret = wma_mlme_roam_synch_event_handler_cb(wma, data, data_len);
if (ret != 0) {
wma_err("Failed to process roam synch event");
status = QDF_STATUS_E_FAILURE;
}
return status;
}
QDF_STATUS wma_ap_mlme_vdev_start_continue(struct vdev_mlme_obj *vdev_mlme, QDF_STATUS wma_ap_mlme_vdev_start_continue(struct vdev_mlme_obj *vdev_mlme,
uint16_t data_len, void *data) uint16_t data_len, void *data)
{ {