qcacmn: NDP_END_REQ implementation
Add implementation of NDP_END_REQ. Change-Id: Ifa0bdcdee09c15c68bb12c63ba1157c71650c5bc CRs-Fixed: 2014795
This commit is contained in:

gecommit door
Sandeep Puligilla

bovenliggende
f2bc82eb18
commit
52e9bb6d6f
@@ -497,6 +497,9 @@ struct nan_callbacks {
|
||||
int (*get_peer_idx)(uint8_t, struct qdf_mac_addr *);
|
||||
QDF_STATUS (*add_ndi_peer)(uint32_t, struct qdf_mac_addr);
|
||||
|
||||
void (*peer_departed_ind)(uint8_t, uint16_t, struct qdf_mac_addr *,
|
||||
bool);
|
||||
void (*ndp_delete_peers)(struct peer_nan_datapath_map*, uint8_t);
|
||||
void (*delete_peers_by_addr)(uint8_t, struct qdf_mac_addr);
|
||||
};
|
||||
|
||||
|
@@ -115,7 +115,6 @@ static void nan_req_incomplete(void *req, uint32_t cmdtype)
|
||||
static void nan_req_activated(void *in_req, uint32_t cmdtype)
|
||||
{
|
||||
uint32_t req_type;
|
||||
QDF_STATUS status;
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_lmac_if_nan_tx_ops *tx_ops;
|
||||
@@ -413,6 +412,57 @@ static QDF_STATUS nan_handle_responder_rsp(
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static QDF_STATUS nan_handle_ndp_end_rsp(
|
||||
struct nan_datapath_end_rsp_event *rsp,
|
||||
struct wlan_objmgr_vdev **vdev)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct nan_psoc_priv_obj *psoc_nan_obj;
|
||||
|
||||
*vdev = rsp->vdev;
|
||||
psoc = wlan_vdev_get_psoc(rsp->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_event_handler(psoc, rsp->vdev,
|
||||
NDP_END_RSP, rsp);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static QDF_STATUS nan_handle_end_ind(
|
||||
struct nan_datapath_end_indication_event *ind)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct nan_psoc_priv_obj *psoc_nan_obj;
|
||||
|
||||
psoc = wlan_vdev_get_psoc(ind->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.ndp_delete_peers(ind->ndp_map, ind->num_ndp_ids);
|
||||
psoc_nan_obj->cb_obj.os_if_event_handler(psoc, ind->vdev,
|
||||
NDP_END_IND, ind);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS nan_event_handler(struct scheduler_msg *pe_msg)
|
||||
{
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
@@ -448,6 +498,14 @@ QDF_STATUS nan_event_handler(struct scheduler_msg *pe_msg)
|
||||
cmd.cmd_type = WLAN_SER_CMD_NDP_RESP_REQ;
|
||||
wlan_serialization_remove_cmd(&cmd);
|
||||
break;
|
||||
case NDP_END_RSP:
|
||||
nan_handle_ndp_end_rsp(pe_msg->bodyptr, &cmd.vdev);
|
||||
cmd.cmd_type = WLAN_SER_CMD_NDP_DATA_END_INIT_REQ;
|
||||
wlan_serialization_remove_cmd(&cmd);
|
||||
break;
|
||||
case NDP_END_IND:
|
||||
nan_handle_end_ind(pe_msg->bodyptr);
|
||||
break;
|
||||
default:
|
||||
nan_alert("Unhandled NDP event: %d", pe_msg->type);
|
||||
status = QDF_STATUS_E_NOSUPPORT;
|
||||
|
@@ -440,6 +440,40 @@ free_resources:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static struct nan_datapath_end_req *ucfg_nan_copy_end_req(
|
||||
struct wlan_objmgr_vdev *vdev,
|
||||
struct nan_datapath_end_req *in_req)
|
||||
{
|
||||
struct nan_datapath_end_req *req;
|
||||
|
||||
req = qdf_mem_malloc(sizeof(*req));
|
||||
if (!req) {
|
||||
nan_alert("malloc failed");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
qdf_mem_copy(req, in_req, sizeof(*req));
|
||||
if (in_req->num_ndp_instances) {
|
||||
req->ndp_ids = qdf_mem_malloc(sizeof(uint32_t) *
|
||||
in_req->num_ndp_instances);
|
||||
if (!req->ndp_ids) {
|
||||
nan_alert("malloc failed");
|
||||
goto free_resources;
|
||||
}
|
||||
qdf_mem_copy(req->ndp_ids, in_req->ndp_ids,
|
||||
sizeof(uint32_t) * in_req->num_ndp_instances);
|
||||
}
|
||||
|
||||
/* do not get ref here, rather take ref when request is activated */
|
||||
req->vdev = vdev;
|
||||
return req;
|
||||
|
||||
free_resources:
|
||||
qdf_mem_free(req->ndp_ids);
|
||||
qdf_mem_free(req);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
QDF_STATUS ucfg_nan_req_processor(struct wlan_objmgr_vdev *vdev,
|
||||
void *in_req, uint32_t req_type)
|
||||
{
|
||||
@@ -459,6 +493,9 @@ QDF_STATUS ucfg_nan_req_processor(struct wlan_objmgr_vdev *vdev,
|
||||
case NDP_RESPONDER_REQ:
|
||||
req = ucfg_nan_copy_responder_req(vdev, in_req);
|
||||
break;
|
||||
case NDP_END_REQ:
|
||||
req = ucfg_nan_copy_end_req(vdev, in_req);
|
||||
break;
|
||||
default:
|
||||
nan_err("in correct message req type: %d", req_type);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
@@ -522,6 +559,7 @@ int ucfg_nan_register_hdd_callbacks(struct wlan_objmgr_psoc *psoc,
|
||||
|
||||
psoc_obj->cb_obj.get_peer_idx = cb_obj->get_peer_idx;
|
||||
psoc_obj->cb_obj.new_peer_ind = cb_obj->new_peer_ind;
|
||||
psoc_obj->cb_obj.peer_departed_ind = cb_obj->peer_departed_ind;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -537,6 +575,7 @@ int ucfg_nan_register_lim_callbacks(struct wlan_objmgr_psoc *psoc,
|
||||
}
|
||||
|
||||
psoc_obj->cb_obj.add_ndi_peer = cb_obj->add_ndi_peer;
|
||||
psoc_obj->cb_obj.ndp_delete_peers = cb_obj->ndp_delete_peers;
|
||||
psoc_obj->cb_obj.delete_peers_by_addr = cb_obj->delete_peers_by_addr;
|
||||
|
||||
return 0;
|
||||
|
Verwijs in nieuw issue
Block a user