qcacmn: Peer refcount FR update DB as per new design
Update peer DB as per new design peer_hash_table: add at peer_create and delete at peer delete peer_id_to_obj_map: add at peer map and delete at peer unmap peer_list: vdev level peer list add at peer create delete at peer delete Call dp_peer_cleanup() at unmap event dp_peer_cleanup -> dp_peer_tx_cleanup -> Tx capture cleanup | ---------> dp_peer_rx_cleanup -> Cleanup Rx REO TID queues & defrag queue free Introduce ref_cnt variable per VAP which will be incremented and decremented at peer alloc and free. This counter will be used to delay the vdev free if there are any active peers for vdev exist in system Change-Id: Iec13bceed0db0db71655fdbf6f96df8795b5077b
This commit is contained in:

کامیت شده توسط
snandini

والد
86d3df0605
کامیت
e253cee043
@@ -947,13 +947,14 @@ extern void dp_peer_find_hash_remove(struct dp_soc *soc, struct dp_peer *peer);
|
||||
extern void dp_peer_find_hash_erase(struct dp_soc *soc);
|
||||
void dp_peer_vdev_list_add(struct dp_soc *soc, struct dp_vdev *vdev,
|
||||
struct dp_peer *peer);
|
||||
uint8_t dp_peer_vdev_list_remove(struct dp_soc *soc, struct dp_vdev *vdev,
|
||||
struct dp_peer *peer);
|
||||
void dp_peer_vdev_list_remove(struct dp_soc *soc, struct dp_vdev *vdev,
|
||||
struct dp_peer *peer);
|
||||
void dp_peer_find_id_to_obj_add(struct dp_soc *soc,
|
||||
struct dp_peer *peer,
|
||||
uint16_t peer_id);
|
||||
void dp_peer_find_id_to_obj_remove(struct dp_soc *soc,
|
||||
uint16_t peer_id);
|
||||
void dp_vdev_unref_delete(struct dp_soc *soc, struct dp_vdev *vdev);
|
||||
/*
|
||||
* dp_peer_ppdu_delayed_ba_init() Initialize ppdu in peer
|
||||
* @peer: Datapath peer
|
||||
@@ -972,10 +973,8 @@ void dp_peer_ppdu_delayed_ba_cleanup(struct dp_peer *peer);
|
||||
|
||||
extern void dp_peer_rx_init(struct dp_pdev *pdev, struct dp_peer *peer);
|
||||
void dp_peer_tx_init(struct dp_pdev *pdev, struct dp_peer *peer);
|
||||
void dp_peer_cleanup(struct dp_vdev *vdev, struct dp_peer *peer,
|
||||
bool reuse);
|
||||
void dp_peer_rx_cleanup(struct dp_vdev *vdev, struct dp_peer *peer,
|
||||
bool reuse);
|
||||
void dp_peer_cleanup(struct dp_vdev *vdev, struct dp_peer *peer);
|
||||
void dp_peer_rx_cleanup(struct dp_vdev *vdev, struct dp_peer *peer);
|
||||
void dp_peer_unref_delete(struct dp_peer *peer);
|
||||
extern void *dp_find_peer_by_addr(struct cdp_pdev *dev,
|
||||
uint8_t *peer_mac_addr);
|
||||
@@ -2299,4 +2298,22 @@ dp_hmwds_ast_add_notify(struct dp_peer *peer,
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* dp_vdev_get_ref() - API to take a reference for VDEV object
|
||||
*
|
||||
* @soc : core DP soc context
|
||||
* @vdev : DP vdev
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS if reference held successfully
|
||||
* else QDF_STATUS_E_INVAL
|
||||
*/
|
||||
static inline
|
||||
QDF_STATUS dp_vdev_get_ref(struct dp_soc *soc, struct dp_vdev *vdev)
|
||||
{
|
||||
if (!qdf_atomic_inc_not_zero(&vdev->ref_cnt))
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#endif /* #ifndef _DP_INTERNAL_H_ */
|
||||
|
مرجع در شماره جدید
Block a user