qcacld-3.0: Add logic to create bss peer from connection manager
Add logic to create bss peer from connection manager. Change-Id: Ia150669b2bbc55ddf722a92617de2a13b7357cb5 CRs-Fixed: 2832727
Tento commit je obsažen v:
@@ -59,6 +59,16 @@ struct cm_vdev_join_rsp {
|
||||
struct wlan_cm_connect_resp connect_rsp;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct cm_peer_create_req - bss peer create req
|
||||
* @vdev_id: vdev_id
|
||||
* @peer_mac: peer mac to create
|
||||
*/
|
||||
struct cm_peer_create_req {
|
||||
uint8_t vdev_id;
|
||||
struct qdf_mac_addr peer_mac;
|
||||
};
|
||||
|
||||
/**
|
||||
* cm_handle_connect_req() - Connection manager ext connect request to start
|
||||
* vdev and peer assoc state machine
|
||||
@@ -156,6 +166,14 @@ void cm_free_join_req(struct cm_vdev_join_req *join_req);
|
||||
*/
|
||||
QDF_STATUS cm_process_join_req(struct scheduler_msg *msg);
|
||||
|
||||
/**
|
||||
* cm_process_peer_create() - Process bss peer create req
|
||||
* @msg: scheduler message
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS cm_process_peer_create(struct scheduler_msg *msg);
|
||||
|
||||
/**
|
||||
* cm_process_disconnect_req() - Process vdev disconnect request
|
||||
* @msg: scheduler message
|
||||
|
@@ -155,7 +155,33 @@ QDF_STATUS
|
||||
cm_send_bss_peer_create_req(struct wlan_objmgr_vdev *vdev,
|
||||
struct qdf_mac_addr *peer_mac)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
struct scheduler_msg msg;
|
||||
QDF_STATUS status;
|
||||
struct cm_peer_create_req *req;
|
||||
|
||||
if (!vdev || !peer_mac)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
qdf_mem_zero(&msg, sizeof(msg));
|
||||
req = qdf_mem_malloc(sizeof(*req));
|
||||
|
||||
if (!req)
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
|
||||
req->vdev_id = wlan_vdev_get_id(vdev);
|
||||
qdf_copy_macaddr(&req->peer_mac, peer_mac);
|
||||
|
||||
msg.bodyptr = req;
|
||||
msg.callback = cm_process_peer_create;
|
||||
|
||||
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(req);
|
||||
|
||||
return status;
|
||||
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
|
@@ -43,6 +43,7 @@
|
||||
#include "../../core/src/vdev_mgr_ops.h"
|
||||
#include "wlan_pmo_ucfg_api.h"
|
||||
#include "wlan_objmgr_vdev_obj.h"
|
||||
#include <wlan_cm_api.h>
|
||||
|
||||
static void lim_process_mlm_auth_req(struct mac_context *, uint32_t *);
|
||||
static void lim_process_mlm_assoc_req(struct mac_context *, uint32_t *);
|
||||
@@ -386,21 +387,40 @@ failure:
|
||||
lim_post_sme_message(mac, LIM_MLM_JOIN_CNF, (uint32_t *) &mlm_join_cnf);
|
||||
}
|
||||
|
||||
/**
|
||||
* lim_process_mlm_post_join_suspend_link() - This function is called after the
|
||||
* suspend link while joining off channel.
|
||||
* @mac_ctx: Pointer to Global MAC structure
|
||||
* @session: session
|
||||
*
|
||||
* This function does following:
|
||||
* Check for suspend state.
|
||||
* If success, proceed with setting link state to receive the
|
||||
* probe response/beacon from intended AP.
|
||||
* Switch to the APs channel.
|
||||
* On an error case, send the MLM_JOIN_CNF with error status.
|
||||
*
|
||||
* @Return None
|
||||
*/
|
||||
#ifdef FEATURE_CM_ENABLE
|
||||
void lim_send_peer_create_resp(struct mac_context *mac, uint8_t vdev_id,
|
||||
QDF_STATUS status, uint8_t *peer_mac)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac->psoc,
|
||||
vdev_id,
|
||||
WLAN_LEGACY_MAC_ID);
|
||||
wlan_cm_bss_peer_create_rsp(vdev, status,
|
||||
(struct qdf_mac_addr *)peer_mac);
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
|
||||
}
|
||||
|
||||
static void
|
||||
lim_process_mlm_post_join_suspend_link(struct mac_context *mac_ctx,
|
||||
struct pe_session *session)
|
||||
{
|
||||
lim_deactivate_and_change_timer(mac_ctx, eLIM_JOIN_FAIL_TIMER);
|
||||
|
||||
/* assign appropriate sessionId to the timer object */
|
||||
mac_ctx->lim.lim_timers.gLimJoinFailureTimer.sessionId =
|
||||
session->peSessionId;
|
||||
|
||||
lim_post_join_set_link_state_callback(mac_ctx, session->vdev_id,
|
||||
QDF_STATUS_SUCCESS);
|
||||
}
|
||||
#else
|
||||
void lim_send_peer_create_resp(struct mac_context *mac, uint8_t vdev_id,
|
||||
QDF_STATUS status, uint8_t *peer_mac)
|
||||
{
|
||||
lim_post_join_set_link_state_callback(mac, vdev_id, status);
|
||||
}
|
||||
|
||||
static void
|
||||
lim_process_mlm_post_join_suspend_link(struct mac_context *mac_ctx,
|
||||
struct pe_session *session)
|
||||
@@ -413,6 +433,7 @@ lim_process_mlm_post_join_suspend_link(struct mac_context *mac_ctx,
|
||||
|
||||
wma_add_bss_peer_sta(session->vdev_id, session->bssId);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* lim_process_mlm_join_req() - process mlm join request.
|
||||
|
@@ -1511,6 +1511,25 @@ QDF_STATUS cm_process_disconnect_req(struct scheduler_msg *msg)
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS cm_process_peer_create(struct scheduler_msg *msg)
|
||||
{
|
||||
struct cm_peer_create_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 = wma_add_bss_peer_sta(req->vdev_id, req->peer_mac.bytes);
|
||||
|
||||
qdf_mem_free(req);
|
||||
|
||||
return status;
|
||||
}
|
||||
#endif
|
||||
|
||||
static bool lim_is_fast_roam_enabled(struct mac_context *mac_ctx,
|
||||
|
@@ -1362,6 +1362,8 @@ void
|
||||
lim_post_join_set_link_state_callback(struct mac_context *mac, uint32_t vdev_id,
|
||||
QDF_STATUS status);
|
||||
|
||||
void lim_send_peer_create_resp(struct mac_context *mac, uint8_t vdev_id,
|
||||
QDF_STATUS status, uint8_t *peer_mac);
|
||||
/*
|
||||
* lim_process_mlm_deauth_req() - This function is called to process
|
||||
* MLM_DEAUTH_REQ message from SME
|
||||
|
@@ -1962,7 +1962,7 @@ wma_create_sta_mode_bss_peer(tp_wma_handle wma,
|
||||
return status;
|
||||
|
||||
end:
|
||||
lim_post_join_set_link_state_callback(mac, vdev_id, status);
|
||||
lim_send_peer_create_resp(mac, vdev_id, status, peer_addr);
|
||||
|
||||
return status;
|
||||
}
|
||||
@@ -3074,9 +3074,8 @@ fail:
|
||||
(peer_create_rsp->status > 0) ? true : false);
|
||||
|
||||
if (mac)
|
||||
lim_post_join_set_link_state_callback(mac,
|
||||
peer_create_rsp->vdev_id,
|
||||
status);
|
||||
lim_send_peer_create_resp(mac, peer_create_rsp->vdev_id, status,
|
||||
peer_mac.bytes);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -3329,8 +3328,9 @@ void wma_hold_req_timer(void *data)
|
||||
if (!mac)
|
||||
goto timer_destroy;
|
||||
|
||||
lim_post_join_set_link_state_callback(mac, tgt_req->vdev_id,
|
||||
QDF_STATUS_E_FAILURE);
|
||||
lim_send_peer_create_resp(mac, tgt_req->vdev_id,
|
||||
QDF_STATUS_E_TIMEOUT,
|
||||
(uint8_t *)tgt_req->user_data);
|
||||
|
||||
} else {
|
||||
wma_err("Unhandled timeout for msg_type:%d and type:%d",
|
||||
|
Odkázat v novém úkolu
Zablokovat Uživatele