Revert "qcacld-3.0: Block NDP_END_ALL req till last NDP_END is received"
This reverts commit 54c2fe240a
.
Change-Id: Ic0028674e4728b951215bf7b4d9a7535b8b49efe
CRs-Fixed: 3523826
此提交包含在:
@@ -83,6 +83,7 @@ enum nan_discovery_msg_type {
|
||||
* @NDP_PEER_DEPARTED: ndp peer departed/deleted
|
||||
* @NDP_SCHEDULE_UPDATE: ndp schedule update
|
||||
* @NDP_END_ALL: end all NDPs request
|
||||
* @NDP_HOST_UPDATE: update host about ndp status
|
||||
*/
|
||||
enum nan_datapath_msg_type {
|
||||
NAN_DATAPATH_INF_CREATE_REQ = 0,
|
||||
@@ -102,6 +103,7 @@ enum nan_datapath_msg_type {
|
||||
NDP_PEER_DEPARTED = 14,
|
||||
NDP_SCHEDULE_UPDATE = 15,
|
||||
NDP_END_ALL = 16,
|
||||
NDP_HOST_UPDATE = 17,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -765,6 +767,17 @@ struct nan_datapath_sch_update_event {
|
||||
uint32_t ndp_instances[NDP_NUM_INSTANCE_ID];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nan_datapath_host_event - ndp host event parameters
|
||||
* @vdev: vdev obj associated with the ndp
|
||||
* @ndp_termination_in_progress: flag that indicates whether NDPs associated
|
||||
* with the given vdev are being terminated
|
||||
*/
|
||||
struct nan_datapath_host_event {
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
bool ndp_termination_in_progress;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nan_callbacks - struct containing callback to non-converged driver
|
||||
* @os_if_nan_event_handler: OS IF Callback for handling NAN Discovery events
|
||||
|
@@ -999,6 +999,38 @@ static QDF_STATUS nan_handle_schedule_update(
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* nan_handle_host_update() - Updates Host about NAN Datapath status
|
||||
* @evt: Event data received from firmware
|
||||
* @vdev: pointer to vdev
|
||||
*
|
||||
* Return: status of operation
|
||||
*/
|
||||
static QDF_STATUS nan_handle_host_update(struct nan_datapath_host_event *evt,
|
||||
struct wlan_objmgr_vdev **vdev)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct nan_psoc_priv_obj *psoc_nan_obj;
|
||||
|
||||
*vdev = evt->vdev;
|
||||
psoc = wlan_vdev_get_psoc(evt->vdev);
|
||||
if (!psoc) {
|
||||
nan_err("psoc is NULL");
|
||||
return QDF_STATUS_E_NULL_VALUE;
|
||||
}
|
||||
|
||||
psoc_nan_obj = nan_get_psoc_priv_obj(psoc);
|
||||
if (!psoc_nan_obj) {
|
||||
nan_err("psoc_nan_obj is NULL");
|
||||
return QDF_STATUS_E_NULL_VALUE;
|
||||
}
|
||||
|
||||
psoc_nan_obj->cb_obj.os_if_ndp_event_handler(psoc, evt->vdev,
|
||||
NDP_HOST_UPDATE, evt);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS nan_discovery_event_handler(struct scheduler_msg *msg)
|
||||
{
|
||||
struct nan_event_params *nan_event;
|
||||
@@ -1087,6 +1119,11 @@ QDF_STATUS nan_datapath_event_handler(struct scheduler_msg *pe_msg)
|
||||
case NDP_SCHEDULE_UPDATE:
|
||||
nan_handle_schedule_update(pe_msg->bodyptr);
|
||||
break;
|
||||
case NDP_HOST_UPDATE:
|
||||
nan_handle_host_update(pe_msg->bodyptr, &cmd.vdev);
|
||||
cmd.cmd_type = WLAN_SER_CMD_NDP_END_ALL_REQ;
|
||||
wlan_serialization_remove_cmd(&cmd);
|
||||
break;
|
||||
default:
|
||||
nan_alert("Unhandled NDP event: %d", pe_msg->type);
|
||||
status = QDF_STATUS_E_NOSUPPORT;
|
||||
|
@@ -473,7 +473,8 @@ QDF_STATUS ucfg_disable_nan_discovery(struct wlan_objmgr_psoc *psoc,
|
||||
* @ndi_vdev_id: vdev_id of the NDI to be disabled
|
||||
*
|
||||
* Disable all the NDPs present on the given NDI by sending NDP_END_ALL
|
||||
* to firmware.
|
||||
* to firmware. Firmwere sends an immediate response(NDP_HOST_UPDATE) with
|
||||
* ndp_disable param as 1 followed by NDP_END indication for all the NDPs.
|
||||
*
|
||||
* Return: status of operation
|
||||
*/
|
||||
|
@@ -956,6 +956,7 @@ QDF_STATUS
|
||||
ucfg_nan_disable_ndi(struct wlan_objmgr_psoc *psoc, uint32_t ndi_vdev_id)
|
||||
{
|
||||
enum nan_datapath_state curr_ndi_state;
|
||||
struct nan_datapath_host_event *event;
|
||||
struct nan_vdev_priv_obj *ndi_vdev_priv;
|
||||
struct nan_datapath_end_all_ndps req = {0};
|
||||
struct wlan_objmgr_vdev *ndi_vdev;
|
||||
@@ -963,7 +964,7 @@ ucfg_nan_disable_ndi(struct wlan_objmgr_psoc *psoc, uint32_t ndi_vdev_id)
|
||||
QDF_STATUS status;
|
||||
int err;
|
||||
static const struct osif_request_params params = {
|
||||
.priv_size = 0,
|
||||
.priv_size = sizeof(struct nan_datapath_host_event),
|
||||
.timeout_ms = 1000,
|
||||
};
|
||||
|
||||
@@ -1009,6 +1010,7 @@ ucfg_nan_disable_ndi(struct wlan_objmgr_psoc *psoc, uint32_t ndi_vdev_id)
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
nan_err("Unable to disable NDP's on NDI");
|
||||
wlan_objmgr_vdev_release_ref(ndi_vdev, WLAN_NAN_ID);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
@@ -1021,7 +1023,18 @@ ucfg_nan_disable_ndi(struct wlan_objmgr_psoc *psoc, uint32_t ndi_vdev_id)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
policy_mgr_decr_session_set_pcl(psoc, QDF_NDI_MODE, ndi_vdev_id);
|
||||
event = osif_request_priv(request);
|
||||
if (!event->ndp_termination_in_progress) {
|
||||
nan_err("Failed to terminate NDP's on NDI");
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
} else {
|
||||
/*
|
||||
* Host can assume NDP delete is successful and
|
||||
* remove policy mgr entry
|
||||
*/
|
||||
policy_mgr_decr_session_set_pcl(psoc, QDF_NDI_MODE,
|
||||
ndi_vdev_id);
|
||||
}
|
||||
|
||||
cleanup:
|
||||
/* Restore original NDI state in case of failure */
|
||||
@@ -1030,8 +1043,6 @@ cleanup:
|
||||
else
|
||||
ucfg_nan_set_ndi_state(ndi_vdev, curr_ndi_state);
|
||||
|
||||
wlan_objmgr_vdev_release_ref(ndi_vdev, WLAN_NAN_ID);
|
||||
|
||||
if (request)
|
||||
osif_request_put(request);
|
||||
|
||||
|
新增問題並參考
封鎖使用者