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:
Abhishek Singh
2020-09-18 07:56:40 +05:30
committed by snandini
parent f1392936e6
commit b494f209e8
6 changed files with 88 additions and 83 deletions

View File

@@ -32,6 +32,23 @@
*/ */
QDF_STATUS osif_cm_register_cb(void); 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 * osif_cm_reset_id_and_src_no_lock() - Function to resets last
* connection manager command id and source in osif * connection manager command id and source in osif

View File

@@ -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 * cookie match else drop. If cookie match reset the cookie
* and source. * and source.
*/ */
qdf_spinlock_acquire(&osif_priv->last_cmd_info.cmd_id_lock); qdf_spinlock_acquire(&osif_priv->cm_info.cmd_id_lock);
if (cm_id != osif_priv->last_cmd_info.last_id || if (cm_id != osif_priv->cm_info.last_id ||
osif_priv->last_cmd_info.last_source != CM_OSIF_CONNECT) { 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)", osif_debug("Ignore as cm_id(%d)/src(%d) didn't match stored cm_id(%d)/src(%d)",
cm_id, CM_OSIF_CONNECT, cm_id, CM_OSIF_CONNECT,
osif_priv->last_cmd_info.last_id, osif_priv->cm_info.last_id,
osif_priv->last_cmd_info.last_source); osif_priv->cm_info.last_source);
status = QDF_STATUS_E_INVAL; status = QDF_STATUS_E_INVAL;
goto rel_lock; goto rel_lock;
} }
osif_cm_reset_id_and_src_no_lock(osif_priv); osif_cm_reset_id_and_src_no_lock(osif_priv);
rel_lock: 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; return status;
} }

View File

@@ -47,7 +47,7 @@ osif_validate_disconnect_and_reset_src_id(struct vdev_osif_priv *osif_priv,
QDF_STATUS status = QDF_STATUS_SUCCESS; QDF_STATUS status = QDF_STATUS_SUCCESS;
/* Always drop internal disconnect */ /* 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) { if (rsp->req.req.source == CM_INTERNAL_DISCONNECT) {
osif_debug("ignore internal disconnect"); osif_debug("ignore internal disconnect");
status = QDF_STATUS_E_INVAL; 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 * cookie match else drop. If cookie match reset the cookie
* and source * and source
*/ */
if (rsp->req.cm_id != osif_priv->last_cmd_info.last_id || if (rsp->req.cm_id != osif_priv->cm_info.last_id ||
rsp->req.req.source != osif_priv->last_cmd_info.last_source) { 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)", 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, rsp->req.cm_id, rsp->req.req.source,
osif_priv->last_cmd_info.last_id, osif_priv->cm_info.last_id,
osif_priv->last_cmd_info.last_source); osif_priv->cm_info.last_source);
status = QDF_STATUS_E_INVAL; status = QDF_STATUS_E_INVAL;
goto rel_lock; goto rel_lock;
} }
osif_cm_reset_id_and_src_no_lock(osif_priv); osif_cm_reset_id_and_src_no_lock(osif_priv);
rel_lock: 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; return status;
} }

View File

@@ -28,8 +28,8 @@
void osif_cm_reset_id_and_src_no_lock(struct vdev_osif_priv *osif_priv) 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->cm_info.last_id = CM_ID_INVALID;
osif_priv->last_cmd_info.last_source = CM_SOURCE_INVALID; osif_priv->cm_info.last_source = CM_SOURCE_INVALID;
} }
QDF_STATUS osif_cm_reset_id_and_src(struct wlan_objmgr_vdev *vdev) 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"); osif_err("Invalid vdev osif priv");
return QDF_STATUS_E_INVAL; 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); 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; 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; 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_priv->last_cmd_info.last_id = cm_id; osif_priv->cm_info.last_id = cm_id;
osif_priv->last_cmd_info.last_source = source; osif_priv->cm_info.last_source = source;
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; return QDF_STATUS_SUCCESS;
} }
@@ -160,3 +160,38 @@ QDF_STATUS osif_cm_register_cb(void)
return QDF_STATUS_SUCCESS; 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;
}

View File

@@ -22,6 +22,7 @@
#include "qdf_net_if.h" #include "qdf_net_if.h"
#include "wlan_cm_public_struct.h" #include "wlan_cm_public_struct.h"
#include <qca_vendor.h>
struct osif_scan_pdev; struct osif_scan_pdev;
struct osif_tdls_vdev; struct osif_tdls_vdev;
@@ -40,19 +41,22 @@ struct pdev_osif_priv {
struct qdf_net_if *nif; 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 #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; enum wlan_cm_source last_source;
wlan_cm_id last_id; wlan_cm_id last_id;
struct qdf_spinlock cmd_id_lock; struct qdf_spinlock cmd_id_lock;
void *legacy; enum qca_disconnect_reason_codes last_disconnect_reason;
void *ext_priv;
}; };
#endif #endif
@@ -60,14 +64,15 @@ struct osif_cm_command_info {
* struct vdev_osif_priv - OS private structure of vdev * struct vdev_osif_priv - OS private structure of vdev
* @wdev: wireless device handle * @wdev: wireless device handle
* @legacy_osif_priv: legacy osif private 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 vdev_osif_priv {
struct wireless_dev *wdev; struct wireless_dev *wdev;
void *legacy_osif_priv; void *legacy_osif_priv;
struct osif_tdls_vdev *osif_tdls; struct osif_tdls_vdev *osif_tdls;
#ifdef FEATURE_CM_ENABLE #ifdef FEATURE_CM_ENABLE
struct osif_cm_command_info last_cmd_info; struct osif_cm_info cm_info;
#endif #endif
}; };

View File

@@ -75,50 +75,6 @@ static QDF_STATUS wlan_objmgr_vdev_object_status(
return 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) static QDF_STATUS wlan_objmgr_vdev_obj_free(struct wlan_objmgr_vdev *vdev)
{ {
struct wlan_objmgr_pdev *pdev; 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; 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 */ /* Detach VDEV from PDEV VDEV's list */
if (wlan_objmgr_pdev_vdev_detach(pdev, vdev) == if (wlan_objmgr_pdev_vdev_detach(pdev, vdev) ==
QDF_STATUS_E_FAILURE) QDF_STATUS_E_FAILURE)
@@ -262,10 +214,6 @@ struct wlan_objmgr_vdev *wlan_objmgr_vdev_obj_create(
/* store os-specific pointer */ /* store os-specific pointer */
vdev->vdev_nif.osdev = wlan_objmgr_vdev_get_osif_priv(vdev); 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 */ /* peer count to 0 */
vdev->vdev_objmgr.wlan_peer_count = 0; vdev->vdev_objmgr.wlan_peer_count = 0;
qdf_atomic_init(&vdev->vdev_objmgr.ref_cnt); qdf_atomic_init(&vdev->vdev_objmgr.ref_cnt);