mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 23:24:22 -04:00
qcacmn: Add max peer count and peer count support to pdev
Max peer count includes self peer/bss peer as well Fixed issue in max peer check Change-Id: I72fd7af1b99760631467ee6bcf92af6a63ee38e1 CRs-Fixed: 2078904
This commit is contained in:
parent
8804f978eb
commit
4a3f486e6e
6 changed files with 87 additions and 8 deletions
|
|
@ -41,8 +41,6 @@
|
|||
/* Max sequence number */
|
||||
#define WLAN_MAX_SEQ_NUM 4096
|
||||
|
||||
/* Max no. of Stations can be associated to VDEV*/
|
||||
#define WLAN_UMAC_MAX_AP_PEERS WLAN_UMAC_PSOC_MAX_PEERS
|
||||
/* Max no. of peers for STA vap */
|
||||
#define WLAN_UMAC_MAX_STA_PEERS 2
|
||||
/* Max vdev_id */
|
||||
|
|
|
|||
|
|
@ -144,6 +144,8 @@ struct wlan_objmgr_pdev_mlme {
|
|||
* @wlan_vdev_list: List maintains the VDEVs created on this PDEV
|
||||
* @wlan_vdev_count: VDEVs count
|
||||
* @max_vdev_count: Max no. of VDEVs supported by this PDEV
|
||||
* @wlan_peer_count: Peer count
|
||||
* @max_peer_count: Max Peer count
|
||||
* @wlan_psoc: back pointer to PSOC, its attached to
|
||||
* @ref_cnt: Ref count
|
||||
* @ref_id_dbg: Array to track Ref count
|
||||
|
|
@ -154,6 +156,8 @@ struct wlan_objmgr_pdev_objmgr {
|
|||
qdf_list_t wlan_vdev_list;
|
||||
uint8_t wlan_vdev_count;
|
||||
uint8_t max_vdev_count;
|
||||
uint16_t wlan_peer_count;
|
||||
uint16_t max_peer_count;
|
||||
struct wlan_objmgr_psoc *wlan_psoc;
|
||||
qdf_atomic_t ref_cnt;
|
||||
qdf_atomic_t ref_id_dbg[WLAN_REF_ID_MAX];
|
||||
|
|
@ -780,4 +784,72 @@ static inline void *wlan_pdev_get_tgt_if_handle(struct wlan_objmgr_pdev *pdev)
|
|||
|
||||
return pdev->tgt_if_handle;
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_pdev_set_max_peer_count() - set max peer count
|
||||
* @vdev: PDEV object
|
||||
* @count: Max peer count
|
||||
*
|
||||
* API to set max peer count of PDEV
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static inline void wlan_pdev_set_max_peer_count(struct wlan_objmgr_pdev *pdev,
|
||||
uint16_t count)
|
||||
{
|
||||
pdev->pdev_objmgr.max_peer_count = count;
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_pdev_get_max_peer_count() - get max peer count
|
||||
* @pdev: PDEV object
|
||||
*
|
||||
* API to get max peer count of PDEV
|
||||
*
|
||||
* Return: max peer count
|
||||
*/
|
||||
static inline uint16_t wlan_pdev_get_max_peer_count(
|
||||
struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
return pdev->pdev_objmgr.max_peer_count;
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_pdev_get_peer_count() - get pdev peer count
|
||||
* @pdev: PDEV object
|
||||
*
|
||||
* API to get peer count from PDEV
|
||||
*
|
||||
* Return: peer_count - pdev's peer count
|
||||
*/
|
||||
static inline uint16_t wlan_pdev_get_peer_count(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
return pdev->pdev_objmgr.wlan_peer_count;
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_pdev_incr_peer_count() - increment pdev peer count
|
||||
* @pdev: PDEV object
|
||||
*
|
||||
* API to increment peer count of PDEV by 1
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static inline void wlan_pdev_incr_peer_count(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
pdev->pdev_objmgr.wlan_peer_count++;
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_pdev_decr_peer_count() - decrement pdev peer count
|
||||
* @pdev: PDEV object
|
||||
*
|
||||
* API to decrement peer count of PDEV by 1
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static inline void wlan_pdev_decr_peer_count(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
pdev->pdev_objmgr.wlan_peer_count--;
|
||||
}
|
||||
#endif /* _WLAN_OBJMGR_PDEV_H_*/
|
||||
|
|
|
|||
|
|
@ -1342,7 +1342,7 @@ static inline void wlan_vdev_reset_ospriv(struct wlan_objmgr_vdev *vdev)
|
|||
* wlan_vdev_get_peer_count() - get vdev peer count
|
||||
* @vdev: VDEV object
|
||||
*
|
||||
* API to get OS private pointer from VDEV
|
||||
* API to get peer count from VDEV
|
||||
*
|
||||
* Return: peer_count - vdev's peer count
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -126,6 +126,8 @@ struct wlan_objmgr_pdev *wlan_objmgr_pdev_obj_create(
|
|||
WLAN_UMAC_PDEV_MAX_VDEVS);
|
||||
pdev->pdev_objmgr.wlan_vdev_count = 0;
|
||||
pdev->pdev_objmgr.max_vdev_count = WLAN_UMAC_PDEV_MAX_VDEVS;
|
||||
pdev->pdev_objmgr.wlan_peer_count = 0;
|
||||
pdev->pdev_objmgr.max_peer_count = WLAN_UMAC_PSOC_MAX_PEERS;
|
||||
/* Save HDD/OSIF pointer */
|
||||
pdev->pdev_nif.pdev_ospriv = osdev_priv;
|
||||
qdf_atomic_init(&pdev->pdev_objmgr.ref_cnt);
|
||||
|
|
|
|||
|
|
@ -1355,7 +1355,7 @@ QDF_STATUS wlan_objmgr_psoc_peer_attach(struct wlan_objmgr_psoc *psoc,
|
|||
wlan_psoc_obj_lock(psoc);
|
||||
objmgr = &psoc->soc_objmgr;
|
||||
/* Max peer limit is reached, return failure */
|
||||
if (objmgr->wlan_peer_count > WLAN_UMAC_PSOC_MAX_PEERS) {
|
||||
if (objmgr->wlan_peer_count >= WLAN_UMAC_PSOC_MAX_PEERS) {
|
||||
wlan_psoc_obj_unlock(psoc);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -76,8 +76,8 @@ static QDF_STATUS wlan_objmgr_vdev_obj_free(struct wlan_objmgr_vdev *vdev)
|
|||
struct wlan_objmgr_pdev *pdev;
|
||||
|
||||
if (vdev == NULL) {
|
||||
obj_mgr_err("vdev is NULL");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
obj_mgr_err("vdev is NULL");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
/* if PDEV is NULL, return */
|
||||
pdev = wlan_vdev_get_pdev(vdev);
|
||||
|
|
@ -174,7 +174,8 @@ struct wlan_objmgr_vdev *wlan_objmgr_vdev_obj_create(
|
|||
if (wlan_vdev_mlme_get_opmode(vdev) == QDF_STA_MODE)
|
||||
vdev->vdev_objmgr.max_peer_count = WLAN_UMAC_MAX_STA_PEERS;
|
||||
else
|
||||
vdev->vdev_objmgr.max_peer_count = WLAN_UMAC_MAX_AP_PEERS;
|
||||
vdev->vdev_objmgr.max_peer_count =
|
||||
wlan_pdev_get_max_peer_count(pdev);
|
||||
|
||||
/* Initialize peer list */
|
||||
qdf_list_create(&vdev->vdev_objmgr.wlan_peer_list,
|
||||
|
|
@ -597,16 +598,21 @@ QDF_STATUS wlan_objmgr_vdev_peer_attach(struct wlan_objmgr_vdev *vdev,
|
|||
struct wlan_objmgr_peer *peer)
|
||||
{
|
||||
struct wlan_objmgr_vdev_objmgr *objmgr = &vdev->vdev_objmgr;
|
||||
struct wlan_objmgr_pdev *pdev;
|
||||
|
||||
wlan_vdev_obj_lock(vdev);
|
||||
pdev = wlan_vdev_get_pdev(vdev);
|
||||
/* If Max peer count exceeds, return failure */
|
||||
if (objmgr->wlan_peer_count > objmgr->max_peer_count) {
|
||||
if ((objmgr->wlan_peer_count >= objmgr->max_peer_count) ||
|
||||
(wlan_pdev_get_peer_count(pdev) >=
|
||||
wlan_pdev_get_max_peer_count(pdev))) {
|
||||
wlan_vdev_obj_unlock(vdev);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
/* Add peer to vdev's peer list */
|
||||
wlan_obj_vdev_peerlist_add_tail(&objmgr->wlan_peer_list, peer);
|
||||
objmgr->wlan_peer_count++;
|
||||
wlan_pdev_incr_peer_count(wlan_vdev_get_pdev(vdev));
|
||||
|
||||
if ((wlan_peer_get_peer_type(peer) == WLAN_PEER_AP) ||
|
||||
(wlan_peer_get_peer_type(peer) == WLAN_PEER_P2P_GO)) {
|
||||
|
|
@ -677,6 +683,7 @@ QDF_STATUS wlan_objmgr_vdev_peer_detach(struct wlan_objmgr_vdev *vdev,
|
|||
}
|
||||
/* decrement peer count */
|
||||
objmgr->wlan_peer_count--;
|
||||
wlan_pdev_decr_peer_count(wlan_vdev_get_pdev(vdev));
|
||||
wlan_vdev_obj_unlock(vdev);
|
||||
/* decrement vdev ref count after peer released its reference */
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_OBJMGR_ID);
|
||||
|
|
|
|||
Loading…
Reference in a new issue