qcacmn: Fix connection manager osif context initialization
Rename connection manager osif context and move the init and deinit to osif from umac. Change-Id: Id320e1b0e9bf53f1a2aa4a5bc536d6dec7f63bf2 CRs-Fixed: 2779890
This commit is contained in:
@@ -32,6 +32,23 @@
|
||||
*/
|
||||
QDF_STATUS osif_cm_register_cb(void);
|
||||
|
||||
/**
|
||||
* osif_cm_osif_priv_init() - API to init osif priv data for connection manager
|
||||
* @vdev: vdev pointer
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS osif_cm_osif_priv_init(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* osif_cm_osif_priv_deinit() - API to deinit osif priv data for connection
|
||||
* manager
|
||||
* @vdev: vdev pointer
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS osif_cm_osif_priv_deinit(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* osif_cm_reset_id_and_src_no_lock() - Function to resets last
|
||||
* connection manager command id and source in osif
|
||||
|
@@ -51,20 +51,20 @@ osif_validate_connect_and_reset_src_id(struct vdev_osif_priv *osif_priv,
|
||||
* cookie match else drop. If cookie match reset the cookie
|
||||
* and source.
|
||||
*/
|
||||
qdf_spinlock_acquire(&osif_priv->last_cmd_info.cmd_id_lock);
|
||||
if (cm_id != osif_priv->last_cmd_info.last_id ||
|
||||
osif_priv->last_cmd_info.last_source != CM_OSIF_CONNECT) {
|
||||
qdf_spinlock_acquire(&osif_priv->cm_info.cmd_id_lock);
|
||||
if (cm_id != osif_priv->cm_info.last_id ||
|
||||
osif_priv->cm_info.last_source != CM_OSIF_CONNECT) {
|
||||
osif_debug("Ignore as cm_id(%d)/src(%d) didn't match stored cm_id(%d)/src(%d)",
|
||||
cm_id, CM_OSIF_CONNECT,
|
||||
osif_priv->last_cmd_info.last_id,
|
||||
osif_priv->last_cmd_info.last_source);
|
||||
osif_priv->cm_info.last_id,
|
||||
osif_priv->cm_info.last_source);
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
goto rel_lock;
|
||||
}
|
||||
|
||||
osif_cm_reset_id_and_src_no_lock(osif_priv);
|
||||
rel_lock:
|
||||
qdf_spinlock_release(&osif_priv->last_cmd_info.cmd_id_lock);
|
||||
qdf_spinlock_release(&osif_priv->cm_info.cmd_id_lock);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
@@ -47,7 +47,7 @@ osif_validate_disconnect_and_reset_src_id(struct vdev_osif_priv *osif_priv,
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
|
||||
/* Always drop internal disconnect */
|
||||
qdf_spinlock_acquire(&osif_priv->last_cmd_info.cmd_id_lock);
|
||||
qdf_spinlock_acquire(&osif_priv->cm_info.cmd_id_lock);
|
||||
if (rsp->req.req.source == CM_INTERNAL_DISCONNECT) {
|
||||
osif_debug("ignore internal disconnect");
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
@@ -59,19 +59,19 @@ osif_validate_disconnect_and_reset_src_id(struct vdev_osif_priv *osif_priv,
|
||||
* cookie match else drop. If cookie match reset the cookie
|
||||
* and source
|
||||
*/
|
||||
if (rsp->req.cm_id != osif_priv->last_cmd_info.last_id ||
|
||||
rsp->req.req.source != osif_priv->last_cmd_info.last_source) {
|
||||
if (rsp->req.cm_id != osif_priv->cm_info.last_id ||
|
||||
rsp->req.req.source != osif_priv->cm_info.last_source) {
|
||||
osif_debug("Ignore as cm_id(%d)/src(%d) didn't match stored cm_id(%d)/src(%d)",
|
||||
rsp->req.cm_id, rsp->req.req.source,
|
||||
osif_priv->last_cmd_info.last_id,
|
||||
osif_priv->last_cmd_info.last_source);
|
||||
osif_priv->cm_info.last_id,
|
||||
osif_priv->cm_info.last_source);
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
goto rel_lock;
|
||||
}
|
||||
|
||||
osif_cm_reset_id_and_src_no_lock(osif_priv);
|
||||
rel_lock:
|
||||
qdf_spinlock_release(&osif_priv->last_cmd_info.cmd_id_lock);
|
||||
qdf_spinlock_release(&osif_priv->cm_info.cmd_id_lock);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
@@ -28,8 +28,8 @@
|
||||
|
||||
void osif_cm_reset_id_and_src_no_lock(struct vdev_osif_priv *osif_priv)
|
||||
{
|
||||
osif_priv->last_cmd_info.last_id = CM_ID_INVALID;
|
||||
osif_priv->last_cmd_info.last_source = CM_SOURCE_INVALID;
|
||||
osif_priv->cm_info.last_id = CM_ID_INVALID;
|
||||
osif_priv->cm_info.last_source = CM_SOURCE_INVALID;
|
||||
}
|
||||
|
||||
QDF_STATUS osif_cm_reset_id_and_src(struct wlan_objmgr_vdev *vdev)
|
||||
@@ -40,9 +40,9 @@ QDF_STATUS osif_cm_reset_id_and_src(struct wlan_objmgr_vdev *vdev)
|
||||
osif_err("Invalid vdev osif priv");
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
qdf_spinlock_acquire(&osif_priv->last_cmd_info.cmd_id_lock);
|
||||
qdf_spinlock_acquire(&osif_priv->cm_info.cmd_id_lock);
|
||||
osif_cm_reset_id_and_src_no_lock(osif_priv);
|
||||
qdf_spinlock_release(&osif_priv->last_cmd_info.cmd_id_lock);
|
||||
qdf_spinlock_release(&osif_priv->cm_info.cmd_id_lock);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
@@ -96,10 +96,10 @@ osif_cm_update_id_and_src_cb(struct wlan_objmgr_vdev *vdev,
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
qdf_spinlock_acquire(&osif_priv->last_cmd_info.cmd_id_lock);
|
||||
osif_priv->last_cmd_info.last_id = cm_id;
|
||||
osif_priv->last_cmd_info.last_source = source;
|
||||
qdf_spinlock_release(&osif_priv->last_cmd_info.cmd_id_lock);
|
||||
qdf_spinlock_acquire(&osif_priv->cm_info.cmd_id_lock);
|
||||
osif_priv->cm_info.last_id = cm_id;
|
||||
osif_priv->cm_info.last_source = source;
|
||||
qdf_spinlock_release(&osif_priv->cm_info.cmd_id_lock);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
@@ -160,3 +160,38 @@ QDF_STATUS osif_cm_register_cb(void)
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS osif_cm_osif_priv_init(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct vdev_osif_priv *osif_priv = wlan_vdev_get_ospriv(vdev);
|
||||
enum QDF_OPMODE mode = wlan_vdev_mlme_get_opmode(vdev);
|
||||
|
||||
if (mode != QDF_STA_MODE && mode != QDF_P2P_CLIENT_MODE)
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
if (!osif_priv) {
|
||||
osif_err("Invalid vdev osif priv");
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
qdf_spinlock_create(&osif_priv->cm_info.cmd_id_lock);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS osif_cm_osif_priv_deinit(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct vdev_osif_priv *osif_priv = wlan_vdev_get_ospriv(vdev);
|
||||
enum QDF_OPMODE mode = wlan_vdev_mlme_get_opmode(vdev);
|
||||
|
||||
if (mode != QDF_STA_MODE && mode != QDF_P2P_CLIENT_MODE)
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
if (!osif_priv) {
|
||||
osif_err("Invalid vdev osif priv");
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
qdf_spinlock_destroy(&osif_priv->cm_info.cmd_id_lock);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
@@ -22,6 +22,7 @@
|
||||
|
||||
#include "qdf_net_if.h"
|
||||
#include "wlan_cm_public_struct.h"
|
||||
#include <qca_vendor.h>
|
||||
|
||||
struct osif_scan_pdev;
|
||||
struct osif_tdls_vdev;
|
||||
@@ -40,19 +41,22 @@ struct pdev_osif_priv {
|
||||
struct qdf_net_if *nif;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct osif_cm_command_info - osif connection manager command info
|
||||
* @last_source: Last command request source
|
||||
* @last_id: Cookie from connection manager
|
||||
* @cmd_id_lock: lock to update and read last command source
|
||||
* @legacy: legacy data structure. Big data etc for MCC
|
||||
*/
|
||||
#ifdef FEATURE_CM_ENABLE
|
||||
struct osif_cm_command_info {
|
||||
/**
|
||||
* struct osif_cm_info - osif connection manager info
|
||||
* @last_source: Last command request source
|
||||
* @last_id: Last command from connection manager
|
||||
* @cmd_id_lock: lock to update and read last command source
|
||||
* @last_disconnect_reason: last disconnect reason to be indicated in get
|
||||
* station
|
||||
* @ext_priv: legacy data pointer.
|
||||
*/
|
||||
struct osif_cm_info {
|
||||
enum wlan_cm_source last_source;
|
||||
wlan_cm_id last_id;
|
||||
struct qdf_spinlock cmd_id_lock;
|
||||
void *legacy;
|
||||
enum qca_disconnect_reason_codes last_disconnect_reason;
|
||||
void *ext_priv;
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -60,14 +64,15 @@ struct osif_cm_command_info {
|
||||
* struct vdev_osif_priv - OS private structure of vdev
|
||||
* @wdev: wireless device handle
|
||||
* @legacy_osif_priv: legacy osif private handle
|
||||
* @connect_info: osif connection manager command info
|
||||
* @osif_tdls: osif tdls info
|
||||
* @cm_info: osif connection manager info
|
||||
*/
|
||||
struct vdev_osif_priv {
|
||||
struct wireless_dev *wdev;
|
||||
void *legacy_osif_priv;
|
||||
struct osif_tdls_vdev *osif_tdls;
|
||||
#ifdef FEATURE_CM_ENABLE
|
||||
struct osif_cm_command_info last_cmd_info;
|
||||
struct osif_cm_info cm_info;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@@ -75,50 +75,6 @@ static QDF_STATUS wlan_objmgr_vdev_object_status(
|
||||
return status;
|
||||
}
|
||||
|
||||
#ifdef FEATURE_CM_ENABLE
|
||||
/**
|
||||
* wlan_vdev_mlme_create_cmd_id_lock() - Function to create connection
|
||||
* manager command id lock
|
||||
* @osif_priv: Pointer to osif private data structure of vdev
|
||||
*
|
||||
* Context: Any context.
|
||||
* Return: None
|
||||
*/
|
||||
|
||||
static void
|
||||
wlan_vdev_mlme_create_cmd_id_lock(struct vdev_osif_priv *osif_priv)
|
||||
{
|
||||
qdf_spinlock_create(&osif_priv->last_cmd_info.cmd_id_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_vdev_mlme_destroy_cmd_id_lock() - Function to destroy connection
|
||||
* manager command id lock
|
||||
* @osif_priv: Pointer to osif private data structure of vdev
|
||||
*
|
||||
* Context: Any context.
|
||||
* Return: None
|
||||
*/
|
||||
static void
|
||||
wlan_vdev_mlme_destroy_cmd_id_lock(struct vdev_osif_priv *osif_priv)
|
||||
{
|
||||
qdf_spinlock_destroy(&osif_priv->last_cmd_info.cmd_id_lock);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static inline void
|
||||
wlan_vdev_mlme_create_cmd_id_lock(struct vdev_osif_priv *osif_priv)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void
|
||||
wlan_vdev_mlme_destroy_cmd_id_lock(struct vdev_osif_priv *osif_priv)
|
||||
{
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static QDF_STATUS wlan_objmgr_vdev_obj_free(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct wlan_objmgr_pdev *pdev;
|
||||
@@ -141,10 +97,6 @@ static QDF_STATUS wlan_objmgr_vdev_obj_free(struct wlan_objmgr_vdev *vdev)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (vdev->vdev_mlme.vdev_opmode == QDF_STA_MODE ||
|
||||
vdev->vdev_mlme.vdev_opmode == QDF_P2P_CLIENT_MODE)
|
||||
wlan_vdev_mlme_destroy_cmd_id_lock(wlan_vdev_get_ospriv(vdev));
|
||||
|
||||
/* Detach VDEV from PDEV VDEV's list */
|
||||
if (wlan_objmgr_pdev_vdev_detach(pdev, vdev) ==
|
||||
QDF_STATUS_E_FAILURE)
|
||||
@@ -262,10 +214,6 @@ struct wlan_objmgr_vdev *wlan_objmgr_vdev_obj_create(
|
||||
/* store os-specific pointer */
|
||||
vdev->vdev_nif.osdev = wlan_objmgr_vdev_get_osif_priv(vdev);
|
||||
|
||||
if (vdev->vdev_mlme.vdev_opmode == QDF_STA_MODE ||
|
||||
vdev->vdev_mlme.vdev_opmode == QDF_P2P_CLIENT_MODE)
|
||||
wlan_vdev_mlme_create_cmd_id_lock(vdev->vdev_nif.osdev);
|
||||
|
||||
/* peer count to 0 */
|
||||
vdev->vdev_objmgr.wlan_peer_count = 0;
|
||||
qdf_atomic_init(&vdev->vdev_objmgr.ref_cnt);
|
||||
|
Reference in New Issue
Block a user