qcacmn: Move per packet params to txrx_peer

Move the parameters from the dp_peer which are used
in per packet path to txrx_peer and params related
to monitor path to monitor peer.

Initialize txrx_peer and monitor peers.

Change-Id: I0449c67c1cd47deb76bc89b5ddc64174f6694eb0
CRs-Fixed: 3095637
This commit is contained in:
Pavankumar Nandeshwar
2021-12-15 03:09:31 -08:00
committad av Madan Koyyalamudi
förälder a795c47f70
incheckning 9c6800383c
9 ändrade filer med 405 tillägg och 220 borttagningar

Visa fil

@@ -37,6 +37,9 @@
#define DP_PEER_HASH_LOAD_MULT 2
#define DP_PEER_HASH_LOAD_SHIFT 0
/* Threshold for peer's cached buf queue beyond which frames are dropped */
#define DP_RX_CACHED_BUFQ_THRESH 64
#define dp_peer_alert(params...) QDF_TRACE_FATAL(QDF_MODULE_ID_DP_PEER, params)
#define dp_peer_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_DP_PEER, params)
#define dp_peer_warn(params...) QDF_TRACE_WARN(QDF_MODULE_ID_DP_PEER, params)
@@ -66,7 +69,7 @@ struct ast_del_ctxt {
typedef void dp_peer_iter_func(struct dp_soc *soc, struct dp_peer *peer,
void *arg);
void dp_peer_unref_delete(struct dp_peer *peer, enum dp_mod_id id);
void dp_txrx_peer_unref_delete(dp_txrx_ref_handle *handle);
void dp_txrx_peer_unref_delete(dp_txrx_ref_handle handle, enum dp_mod_id id);
struct dp_peer *dp_peer_find_hash_find(struct dp_soc *soc,
uint8_t *peer_mac_addr,
int mac_addr_is_aligned,
@@ -166,21 +169,28 @@ struct dp_peer *dp_peer_get_ref_by_id(struct dp_soc *soc,
* @soc : core DP soc context
* @peer_id : peer id from peer object can be retrieved
* @handle : reference handle
* @mod_id : ID ot module requesting reference
*
* Return: struct dp_txrx_peer*: Pointer to txrx DP peer object
*/
static inline struct dp_txrx_peer *
dp_txrx_peer_get_ref_by_id(struct dp_soc *soc,
uint16_t peer_id,
dp_txrx_ref_handle *handle)
dp_txrx_ref_handle *handle,
enum dp_mod_id mod_id)
{
struct dp_peer *peer;
peer = dp_peer_get_ref_by_id(soc, peer_id, DP_MOD_ID_TX_RX);
peer = dp_peer_get_ref_by_id(soc, peer_id, mod_id);
if (!peer)
return NULL;
if (!peer->txrx_peer) {
dp_peer_unref_delete(peer, mod_id);
return NULL;
}
*handle = (dp_txrx_ref_handle)peer;
return peer->txrx_peer;
}
@@ -1064,6 +1074,10 @@ void dp_peer_delete(struct dp_soc *soc,
void *arg);
#ifdef WLAN_FEATURE_11BE_MLO
/* is MLO connection mld peer */
#define IS_MLO_DP_MLD_TXRX_PEER(_peer) ((_peer)->mld_peer)
/* set peer type */
#define DP_PEER_SET_TYPE(_peer, _type_val) \
((_peer)->peer_type = (_type_val))
@@ -1530,7 +1544,45 @@ bool dp_peer_is_primary_link_peer(struct dp_peer *peer)
else
return false;
}
/**
* dp_tgt_txrx_peer_get_ref_by_id() - Gets tgt txrx peer for given the peer id
*
* @soc : core DP soc context
* @peer_id : peer id from peer object can be retrieved
* @handle : reference handle
* @mod_id : ID ot module requesting reference
*
* Return: struct dp_txrx_peer*: Pointer to txrx DP peer object
*/
static inline struct dp_txrx_peer *
dp_tgt_txrx_peer_get_ref_by_id(struct dp_soc *soc,
uint16_t peer_id,
dp_txrx_ref_handle *handle,
enum dp_mod_id mod_id)
{
struct dp_peer *peer;
struct dp_txrx_peer *txrx_peer;
peer = dp_peer_get_ref_by_id(soc, peer_id, mod_id);
if (!peer)
return NULL;
txrx_peer = dp_get_txrx_peer(peer);
if (txrx_peer) {
*handle = (dp_txrx_ref_handle)peer;
return txrx_peer;
}
dp_peer_unref_delete(peer, mod_id);
return NULL;
}
#else
#define IS_MLO_DP_MLD_TXRX_PEER(_peer) false
#define DP_PEER_SET_TYPE(_peer, _type_val) /* no op */
/* is legacy peer */
#define IS_DP_LEGACY_PEER(_peer) true
@@ -1637,6 +1689,27 @@ bool dp_peer_is_primary_link_peer(struct dp_peer *peer)
{
return true;
}
/**
* dp_tgt_txrx_peer_get_ref_by_id() - Gets tgt txrx peer for given the peer id
*
* @soc : core DP soc context
* @peer_id : peer id from peer object can be retrieved
* @handle : reference handle
* @mod_id : ID ot module requesting reference
*
* Return: struct dp_txrx_peer*: Pointer to txrx DP peer object
*/
static inline struct dp_txrx_peer *
dp_tgt_txrx_peer_get_ref_by_id(struct dp_soc *soc,
uint16_t peer_id,
dp_txrx_ref_handle *handle,
enum dp_mod_id mod_id)
{
return dp_txrx_peer_get_ref_by_id(soc, peer_id, handle, mod_id);
}
#endif /* WLAN_FEATURE_11BE_MLO */
#if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP)
@@ -1719,6 +1792,56 @@ void dp_peer_rx_tids_destroy(struct dp_peer *peer)
peer->rx_tid = NULL;
}
static inline
void dp_peer_defrag_rx_tids_init(struct dp_txrx_peer *txrx_peer)
{
uint8_t i;
qdf_mem_zero(&txrx_peer->rx_tid, DP_MAX_TIDS *
sizeof(struct dp_rx_tid_defrag));
for (i = 0; i < DP_MAX_TIDS; i++)
qdf_spinlock_create(&txrx_peer->rx_tid[i].defrag_tid_lock);
}
static inline
void dp_peer_defrag_rx_tids_deinit(struct dp_txrx_peer *txrx_peer)
{
uint8_t i;
for (i = 0; i < DP_MAX_TIDS; i++)
qdf_spinlock_destroy(&txrx_peer->rx_tid[i].defrag_tid_lock);
}
#ifdef PEER_CACHE_RX_PKTS
static inline
void dp_peer_rx_bufq_resources_init(struct dp_txrx_peer *txrx_peer)
{
qdf_spinlock_create(&txrx_peer->bufq_info.bufq_lock);
txrx_peer->bufq_info.thresh = DP_RX_CACHED_BUFQ_THRESH;
qdf_list_create(&txrx_peer->bufq_info.cached_bufq,
DP_RX_CACHED_BUFQ_THRESH);
}
static inline
void dp_peer_rx_bufq_resources_deinit(struct dp_txrx_peer *txrx_peer)
{
qdf_list_destroy(&txrx_peer->bufq_info.cached_bufq);
qdf_spinlock_destroy(&txrx_peer->bufq_info.bufq_lock);
}
#else
static inline
void dp_peer_rx_bufq_resources_init(struct dp_txrx_peer *txrx_peer)
{
}
static inline
void dp_peer_rx_bufq_resources_deinit(struct dp_txrx_peer *txrx_peer)
{
}
#endif
#ifdef REO_SHARED_QREF_TABLE_EN
void dp_peer_rx_reo_shared_qaddr_delete(struct dp_soc *soc,
struct dp_peer *peer);