qcacld-3.0: Add connect and disconnect support in connection manager
Add support for connect and disconnect path in legacy cld files with respect to connection manager. Change-Id: Ia42dd45d943de20d91279c0197b0f17a5c0326eb CRs-Fixed: 2805807
This commit is contained in:
parent
d5a8d40514
commit
e4defd9d16
16
Kbuild
16
Kbuild
@ -1276,13 +1276,15 @@ CM_INC := -I$(WLAN_ROOT)/$(CM_DIR)/dispatcher/inc \
|
||||
|
||||
MLME_INC += $(CM_INC)
|
||||
|
||||
CM_ROAM_OBJS := $(CM_DIR)/dispatcher/src/wlan_cm_tgt_if_tx_api.o \
|
||||
$(CM_DIR)/dispatcher/src/wlan_cm_roam_api.o \
|
||||
$(CM_DIR)/dispatcher/src/wlan_cm_roam_ucfg_api.o \
|
||||
$(CM_TGT_IF_DIR)/src/target_if_cm_roam_offload.o \
|
||||
$(CM_DIR)/core/src/wlan_cm_roam_offload.o
|
||||
|
||||
MLME_OBJS += $(CM_ROAM_OBJS)
|
||||
MLME_OBJS += $(CM_DIR)/dispatcher/src/wlan_cm_tgt_if_tx_api.o \
|
||||
$(CM_DIR)/dispatcher/src/wlan_cm_roam_api.o \
|
||||
$(CM_DIR)/dispatcher/src/wlan_cm_roam_ucfg_api.o \
|
||||
$(CM_TGT_IF_DIR)/src/target_if_cm_roam_offload.o \
|
||||
$(CM_DIR)/core/src/wlan_cm_roam_offload.o
|
||||
ifeq ($(CONFIG_CM_ENABLE), y)
|
||||
MLME_OBJS += $(CM_DIR)/core/src/wlan_cm_vdev_connect.o \
|
||||
$(CM_DIR)/core/src/wlan_cm_vdev_disconnect.o
|
||||
endif
|
||||
|
||||
####### WFA_CONFIG ########
|
||||
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "target_if_cm_roam_offload.h"
|
||||
#include "wlan_crypto_global_api.h"
|
||||
#include "target_if_wfa_testcmd.h"
|
||||
#include <../../core/src/wlan_cm_vdev_api.h>
|
||||
|
||||
static struct vdev_mlme_ops sta_mlme_ops;
|
||||
static struct vdev_mlme_ops ap_mlme_ops;
|
||||
@ -1663,4 +1664,13 @@ static struct mlme_ext_ops ext_ops = {
|
||||
.mlme_vdev_ext_hdl_destroy = vdevmgr_mlme_ext_hdl_destroy,
|
||||
.mlme_vdev_ext_hdl_post_create = vdevmgr_mlme_ext_post_hdl_create,
|
||||
.mlme_vdev_ext_delete_rsp = vdevmgr_vdev_delete_rsp_handle,
|
||||
#ifdef FEATURE_CM_ENABLE
|
||||
.mlme_cm_ext_connect_req_cb = cm_handle_connect_req,
|
||||
.mlme_cm_ext_bss_peer_create_req_cb = cm_send_bss_peer_create_req,
|
||||
.mlme_cm_ext_connect_complete_ind_cb = cm_handle_connect_complete,
|
||||
.mlme_cm_ext_disconnect_req_cb = cm_handle_disconnect_req,
|
||||
.mlme_cm_ext_bss_peer_delete_req_cb = cm_send_bss_peer_delete_req,
|
||||
.mlme_cm_ext_disconnect_complete_ind_cb = cm_disconnect_complete_ind,
|
||||
.mlme_cm_ext_vdev_down_req_cb = cm_send_vdev_down_req,
|
||||
#endif
|
||||
};
|
||||
|
161
components/umac/mlme/connection_mgr/core/src/wlan_cm_vdev_api.h
Normal file
161
components/umac/mlme/connection_mgr/core/src/wlan_cm_vdev_api.h
Normal file
@ -0,0 +1,161 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2015, 2020, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: wlan_cm_vdev_api.h
|
||||
*
|
||||
* This header file maintain legacy connect, disconnect APIs of connection
|
||||
* manager to initiate vdev manager operations
|
||||
*/
|
||||
|
||||
#ifndef __WLAN_CM_VDEV_API_H__
|
||||
#define __WLAN_CM_VDEV_API_H__
|
||||
|
||||
#ifdef FEATURE_CM_ENABLE
|
||||
#include <wlan_cm_public_struct.h>
|
||||
#include "scheduler_api.h"
|
||||
|
||||
/**
|
||||
* struct cm_vdev_join_req - connect req from legacy CM to peer manager
|
||||
* @vdev_id: vdev id
|
||||
* @cm_id: Connect manager id
|
||||
* @force_rsne_override: force the arbitrary rsne received in connect req to be
|
||||
* used with out validation, used for the scenarios where the device is used
|
||||
* as a testbed device with special functionality and not recommended
|
||||
* for production.
|
||||
* @assoc_ie: assoc ie to be used in assoc req
|
||||
* @scan_ie: Default scan ie to be used in the uncast probe req
|
||||
* @entry: scan entry for the candidate
|
||||
*/
|
||||
struct cm_vdev_join_req {
|
||||
uint8_t vdev_id;
|
||||
wlan_cm_id cm_id;
|
||||
bool force_rsne_override;
|
||||
struct element_info assoc_ie;
|
||||
struct element_info scan_ie;
|
||||
struct scan_cache_entry *entry;
|
||||
};
|
||||
|
||||
/**
|
||||
* cm_handle_connect_req() - Connection manager ext connect request to start
|
||||
* vdev and peer assoc state machine
|
||||
* @vdev: VDEV object
|
||||
* @req: Vdev connect request
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS
|
||||
cm_handle_connect_req(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_cm_vdev_connect_req *req);
|
||||
|
||||
/**
|
||||
* cm_send_bss_peer_create_req() - Connection manager ext bss peer create
|
||||
* request
|
||||
* @vdev: VDEV object
|
||||
* @peer_mac: Peer mac address
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS
|
||||
cm_send_bss_peer_create_req(struct wlan_objmgr_vdev *vdev,
|
||||
struct qdf_mac_addr *peer_mac);
|
||||
|
||||
/**
|
||||
* cm_handle_connect_complete() - Connection manager ext connect complete
|
||||
* indication
|
||||
* @vdev: VDEV object
|
||||
* @rsp: Connection manager connect response
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS
|
||||
cm_handle_connect_complete(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_cm_connect_rsp *rsp);
|
||||
|
||||
/**
|
||||
* cm_handle_disconnect_req() - Connection manager ext disconnect
|
||||
* req to vdev and peer sm
|
||||
* @vdev: VDEV object
|
||||
* @req: vdev disconnect request
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS
|
||||
cm_handle_disconnect_req(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_cm_vdev_discon_req *req);
|
||||
|
||||
/**
|
||||
* cm_send_bss_peer_delete_req() - Connection manager ext bss peer delete
|
||||
* request
|
||||
* @vdev: VDEV object
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS
|
||||
cm_send_bss_peer_delete_req(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* cm_disconnect_complete_ind() - Connection manager ext disconnect
|
||||
* complete indication
|
||||
* @vdev: VDEV object
|
||||
* @rsp: Connection manager disconnect response
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS
|
||||
cm_disconnect_complete_ind(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_cm_discon_rsp *rsp);
|
||||
|
||||
/**
|
||||
* cm_send_vdev_down_req() - Connection manager ext req to send vdev down
|
||||
* to FW
|
||||
* @vdev: VDEV object
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS cm_send_vdev_down_req(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* cm_free_join_req() - Free cm vdev connect req params
|
||||
* @join_req: join request
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
void cm_free_join_req(struct cm_vdev_join_req *join_req);
|
||||
|
||||
/**
|
||||
* cm_process_join_req() - Process vdev join req
|
||||
* @msg: scheduler message
|
||||
*
|
||||
* Process connect request in LIM and copy all join req params.
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS cm_process_join_req(struct scheduler_msg *msg);
|
||||
|
||||
/**
|
||||
* cm_process_disconnect_req() - Process vdev disconnect request
|
||||
* @msg: scheduler message
|
||||
*
|
||||
* Process disconnect request in LIM.
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS cm_process_disconnect_req(struct scheduler_msg *msg);
|
||||
|
||||
|
||||
#endif /* FEATURE_CM_ENABLE */
|
||||
#endif /* __WLAN_CM_VDEV_API_H__ */
|
@ -0,0 +1,136 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2015, 2020, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: Implements legacy connect specific APIs of connection manager to
|
||||
* initiate vdev manager operations
|
||||
*/
|
||||
|
||||
#include "wlan_cm_vdev_api.h"
|
||||
#include "wlan_scan_utils_api.h"
|
||||
#include "wlan_mlme_dbg.h"
|
||||
|
||||
void cm_free_join_req(struct cm_vdev_join_req *join_req)
|
||||
{
|
||||
if (!join_req)
|
||||
return;
|
||||
|
||||
util_scan_free_cache_entry(join_req->entry);
|
||||
join_req->entry = NULL;
|
||||
qdf_mem_free(join_req->assoc_ie.ptr);
|
||||
qdf_mem_free(join_req->scan_ie.ptr);
|
||||
join_req->assoc_ie.ptr = NULL;
|
||||
join_req->scan_ie.ptr = NULL;
|
||||
qdf_mem_free(join_req);
|
||||
}
|
||||
|
||||
static QDF_STATUS cm_flush_join_req(struct scheduler_msg *msg)
|
||||
{
|
||||
struct cm_vdev_join_req *join_req;
|
||||
|
||||
if (!msg || !msg->bodyptr) {
|
||||
mlme_err("msg or msg->bodyptr is NULL");
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
join_req = msg->bodyptr;
|
||||
cm_free_join_req(join_req);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static QDF_STATUS
|
||||
cm_copy_join_params(struct cm_vdev_join_req *join_req,
|
||||
struct wlan_cm_vdev_connect_req *req)
|
||||
{
|
||||
join_req->assoc_ie.ptr = qdf_mem_malloc(req->assoc_ie.len);
|
||||
|
||||
if (!join_req->assoc_ie.ptr)
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
|
||||
qdf_mem_copy(join_req->assoc_ie.ptr, req->assoc_ie.ptr,
|
||||
req->assoc_ie.len);
|
||||
|
||||
join_req->scan_ie.ptr = qdf_mem_malloc(req->scan_ie.len);
|
||||
|
||||
if (!join_req->scan_ie.ptr)
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
|
||||
qdf_mem_copy(join_req->scan_ie.ptr, req->scan_ie.ptr,
|
||||
req->scan_ie.len);
|
||||
|
||||
join_req->entry = util_scan_copy_cache_entry(req->bss->entry);
|
||||
|
||||
if (!join_req->entry)
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
|
||||
join_req->vdev_id = req->vdev_id;
|
||||
join_req->cm_id = req->cm_id;
|
||||
join_req->force_rsne_override = req->force_rsne_override;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
cm_handle_connect_req(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_cm_vdev_connect_req *req)
|
||||
{
|
||||
struct cm_vdev_join_req *join_req;
|
||||
struct scheduler_msg msg;
|
||||
QDF_STATUS status;
|
||||
|
||||
if (!vdev || !req)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
qdf_mem_zero(&msg, sizeof(msg));
|
||||
join_req = qdf_mem_malloc(sizeof(*join_req));
|
||||
|
||||
if (!join_req)
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
|
||||
status = cm_copy_join_params(join_req, req);
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
cm_free_join_req(join_req);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
msg.bodyptr = join_req;
|
||||
msg.callback = cm_process_join_req;
|
||||
msg.flush_callback = cm_flush_join_req;
|
||||
|
||||
status = scheduler_post_message(QDF_MODULE_ID_MLME,
|
||||
QDF_MODULE_ID_PE,
|
||||
QDF_MODULE_ID_PE, &msg);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
cm_free_join_req(join_req);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
cm_send_bss_peer_create_req(struct wlan_objmgr_vdev *vdev,
|
||||
struct qdf_mac_addr *peer_mac)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
cm_handle_connect_complete(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_cm_connect_rsp *rsp)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2015, 2020, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: Implements leagcy disconnect connect specific APIs of
|
||||
* connection mgr to initiate vdev manager operations
|
||||
*/
|
||||
|
||||
#include "wlan_cm_vdev_api.h"
|
||||
|
||||
QDF_STATUS
|
||||
cm_handle_disconnect_req(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_cm_vdev_discon_req *req)
|
||||
{
|
||||
struct wlan_cm_vdev_discon_req *discon_req;
|
||||
struct scheduler_msg msg;
|
||||
QDF_STATUS status;
|
||||
|
||||
if (!vdev || !req)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
qdf_mem_zero(&msg, sizeof(msg));
|
||||
|
||||
discon_req = qdf_mem_malloc(sizeof(*discon_req));
|
||||
|
||||
if (!discon_req)
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
|
||||
qdf_mem_copy(discon_req, req, sizeof(*req));
|
||||
msg.bodyptr = discon_req;
|
||||
msg.callback = cm_process_disconnect_req;
|
||||
|
||||
status = scheduler_post_message(QDF_MODULE_ID_MLME,
|
||||
QDF_MODULE_ID_PE,
|
||||
QDF_MODULE_ID_PE, &msg);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
qdf_mem_free(discon_req);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
cm_send_bss_peer_delete_req(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
cm_disconnect_complete_ind(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_cm_discon_rsp *rsp)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS cm_send_vdev_down_req(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
@ -56,6 +56,7 @@
|
||||
#include <wlan_crypto_global_api.h>
|
||||
#include "../../core/src/vdev_mgr_ops.h"
|
||||
#include "wma.h"
|
||||
#include <../../core/src/wlan_cm_vdev_api.h>
|
||||
|
||||
/* SME REQ processing function templates */
|
||||
static bool __lim_process_sme_sys_ready_ind(struct mac_context *, uint32_t *);
|
||||
@ -1166,6 +1167,58 @@ lim_get_vdev_rmf_capable(struct mac_context *mac, struct pe_session *session)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEATURE_CM_ENABLE
|
||||
static QDF_STATUS
|
||||
lim_cm_handle_join_req(struct cm_vdev_join_req *req)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS cm_process_join_req(struct scheduler_msg *msg)
|
||||
{
|
||||
struct cm_vdev_join_req *req;
|
||||
QDF_STATUS status;
|
||||
|
||||
if (!msg || !msg->bodyptr) {
|
||||
mlme_err("msg or msg->bodyptr is NULL");
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
req = msg->bodyptr;
|
||||
|
||||
status = lim_cm_handle_join_req(req);
|
||||
|
||||
cm_free_join_req(req);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
static QDF_STATUS
|
||||
lim_cm_handle_disconnect_req(struct wlan_cm_vdev_discon_req *req)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS cm_process_disconnect_req(struct scheduler_msg *msg)
|
||||
{
|
||||
struct wlan_cm_vdev_discon_req *req;
|
||||
QDF_STATUS status;
|
||||
|
||||
if (!msg || !msg->bodyptr) {
|
||||
mlme_err("msg or msg->bodyptr is NULL");
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
req = msg->bodyptr;
|
||||
|
||||
status = lim_cm_handle_disconnect_req(req);
|
||||
|
||||
qdf_mem_free(req);
|
||||
|
||||
return status;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* __lim_process_sme_join_req() - process SME_JOIN_REQ message
|
||||
* @mac_ctx: Pointer to Global MAC structure
|
||||
|
Loading…
Reference in New Issue
Block a user