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:
gaurank kathpalia
2020-12-07 12:00:19 +05:30
odevzdal snandini
rodič 2747a1523f
revize 81465cfdd5
6 změnil soubory, kde provedl 108 přidání a 22 odebrání

Zobrazit soubor

@@ -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

Zobrazit soubor

@@ -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

Zobrazit soubor

@@ -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.

Zobrazit soubor

@@ -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,

Zobrazit soubor

@@ -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

Zobrazit soubor

@@ -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",