qcacmn: Implement ndp schedule update and channel info in ndp confirm

Add support for ndp schedule update event and provide channel information
in ndp confirm event.

Change-Id: Ic2c073dd4f220627cc2bd1a2d52d858136b6b450
CRs-Fixed: 2180310
This commit is contained in:
Naveen Rawat
2018-01-09 17:54:41 -08:00
committato da nshrivas
parent 8e2eb4e404
commit ad053f2b83

Vedi File

@@ -51,6 +51,9 @@ static QDF_STATUS target_if_nan_event_flush_cb(struct scheduler_msg *msg)
case NDP_END_IND:
vdev = ((struct nan_datapath_end_indication_event *)ptr)->vdev;
break;
case NDP_SCHEDULE_UPDATE:
vdev = ((struct nan_datapath_sch_update_event *)ptr)->vdev;
break;
default:
break;
}
@@ -90,6 +93,9 @@ static QDF_STATUS target_if_nan_event_dispatcher(struct scheduler_msg *msg)
case NDP_END_IND:
vdev = ((struct nan_datapath_end_indication_event *)ptr)->vdev;
break;
case NDP_SCHEDULE_UPDATE:
vdev = ((struct nan_datapath_sch_update_event *)ptr)->vdev;
break;
default:
target_if_err("invalid msg type %d", msg->type);
status = QDF_STATUS_E_INVAL;
@@ -559,6 +565,55 @@ static int target_if_ndp_end_ind_handler(ol_scn_t scn, uint8_t *data,
return 0;
}
static int target_if_ndp_sch_update_handler(ol_scn_t scn, uint8_t *data,
uint32_t data_len)
{
QDF_STATUS status;
struct wlan_objmgr_psoc *psoc;
struct wmi_unified *wmi_handle;
struct scheduler_msg msg = {0};
struct nan_datapath_sch_update_event *rsp;
psoc = target_if_get_psoc_from_scn_hdl(scn);
if (!psoc) {
target_if_err("psoc is null");
return -EINVAL;
}
wmi_handle = get_wmi_unified_hdl_from_psoc(psoc);
if (!wmi_handle) {
target_if_err("wmi_handle is null.");
return -EINVAL;
}
rsp = qdf_mem_malloc(sizeof(*rsp));
if (!rsp) {
target_if_err("malloc failed");
return -ENOMEM;
}
status = wmi_extract_ndp_sch_update(wmi_handle, data, rsp);
if (QDF_IS_STATUS_ERROR(status)) {
target_if_err("parsing of event failed, %d", status);
qdf_mem_free(rsp);
return -EINVAL;
}
msg.bodyptr = rsp;
msg.type = NDP_SCHEDULE_UPDATE;
msg.callback = target_if_nan_event_dispatcher;
msg.flush_callback = target_if_nan_event_flush_cb;
target_if_debug("NDP_SCHEDULE_UPDATE sent: %d", msg.type);
status = scheduler_post_msg(QDF_MODULE_ID_TARGET_IF, &msg);
if (QDF_IS_STATUS_ERROR(status)) {
target_if_err("failed to post msg, status: %d", status);
target_if_nan_event_flush_cb(&msg);
return -EINVAL;
}
return 0;
}
static QDF_STATUS target_if_nan_req(void *req, uint32_t req_type)
{
/* send cmd to fw */
@@ -675,6 +730,16 @@ QDF_STATUS target_if_nan_register_events(struct wlan_objmgr_psoc *psoc)
return QDF_STATUS_E_FAILURE;
}
ret = wmi_unified_register_event_handler(handle,
wmi_ndl_schedule_update_event_id,
target_if_ndp_sch_update_handler,
WMI_RX_UMAC_CTX);
if (ret) {
target_if_err("wmi event registration failed, ret: %d", ret);
target_if_nan_deregister_events(psoc);
return QDF_STATUS_E_FAILURE;
}
return QDF_STATUS_SUCCESS;
}
@@ -683,6 +748,13 @@ QDF_STATUS target_if_nan_deregister_events(struct wlan_objmgr_psoc *psoc)
int ret, status = 0;
wmi_unified_t handle = get_wmi_unified_hdl_from_psoc(psoc);
ret = wmi_unified_unregister_event_handler(handle,
wmi_ndl_schedule_update_event_id);
if (ret) {
target_if_err("wmi event deregistration failed, ret: %d", ret);
status = ret;
}
ret = wmi_unified_unregister_event_handler(handle,
wmi_ndp_end_rsp_event_id);
if (ret) {