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);
|
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
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
}
|
||||||
|
@@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user