qcacmn: Add txrx_peer in dp peer
Add txrx_peer in dp peer which will be used in per packet data path. Change-Id: I91f10b1640430300f4c9f002ca54b3903c556d41
This commit is contained in:

committed by
Madan Koyyalamudi

parent
951e13a2ea
commit
d7908ff22a
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
||||||
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
|
* Copyright (c) 2021,2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -1299,6 +1299,9 @@ void dp_peer_vdev_list_remove(struct dp_soc *soc, struct dp_vdev *vdev,
|
|||||||
void dp_peer_find_id_to_obj_add(struct dp_soc *soc,
|
void dp_peer_find_id_to_obj_add(struct dp_soc *soc,
|
||||||
struct dp_peer *peer,
|
struct dp_peer *peer,
|
||||||
uint16_t peer_id);
|
uint16_t peer_id);
|
||||||
|
void dp_txrx_peer_attach_add(struct dp_soc *soc,
|
||||||
|
struct dp_peer *peer,
|
||||||
|
struct dp_txrx_peer *txrx_peer);
|
||||||
void dp_peer_find_id_to_obj_remove(struct dp_soc *soc,
|
void dp_peer_find_id_to_obj_remove(struct dp_soc *soc,
|
||||||
uint16_t peer_id);
|
uint16_t peer_id);
|
||||||
void dp_vdev_unref_delete(struct dp_soc *soc, struct dp_vdev *vdev,
|
void dp_vdev_unref_delete(struct dp_soc *soc, struct dp_vdev *vdev,
|
||||||
|
@@ -6778,6 +6778,38 @@ void dp_peer_hw_txrx_stats_init(struct dp_soc *soc, struct dp_peer *peer)
|
|||||||
peer->hw_txrx_stats_en = 0;
|
peer->hw_txrx_stats_en = 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static QDF_STATUS dp_txrx_peer_detach(struct dp_soc *soc, struct dp_peer *peer)
|
||||||
|
{
|
||||||
|
struct dp_txrx_peer *txrx_peer;
|
||||||
|
|
||||||
|
txrx_peer = peer->txrx_peer;
|
||||||
|
peer->txrx_peer = NULL;
|
||||||
|
|
||||||
|
qdf_mem_free(txrx_peer);
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static QDF_STATUS dp_txrx_peer_attach(struct dp_soc *soc, struct dp_peer *peer)
|
||||||
|
{
|
||||||
|
struct dp_txrx_peer *txrx_peer;
|
||||||
|
|
||||||
|
txrx_peer = (struct dp_txrx_peer *)qdf_mem_malloc(sizeof(*txrx_peer));
|
||||||
|
|
||||||
|
if (!txrx_peer)
|
||||||
|
return QDF_STATUS_E_NOMEM; /* failure */
|
||||||
|
|
||||||
|
txrx_peer->peer_id = HTT_INVALID_PEER;
|
||||||
|
/* initialize the peer_id */
|
||||||
|
txrx_peer->vdev = peer->vdev;
|
||||||
|
|
||||||
|
dp_wds_ext_peer_init(peer);
|
||||||
|
|
||||||
|
dp_txrx_peer_attach_add(soc, peer, txrx_peer);
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* dp_peer_create_wifi3() - attach txrx peer
|
* dp_peer_create_wifi3() - attach txrx peer
|
||||||
* @soc_hdl: Datapath soc handle
|
* @soc_hdl: Datapath soc handle
|
||||||
@@ -6890,11 +6922,27 @@ dp_peer_create_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
|||||||
|
|
||||||
qdf_mem_zero(peer, sizeof(struct dp_peer));
|
qdf_mem_zero(peer, sizeof(struct dp_peer));
|
||||||
|
|
||||||
TAILQ_INIT(&peer->ast_entry_list);
|
|
||||||
|
|
||||||
/* store provided params */
|
/* store provided params */
|
||||||
peer->vdev = vdev;
|
peer->vdev = vdev;
|
||||||
|
|
||||||
|
/* initialize the peer_id */
|
||||||
|
peer->peer_id = HTT_INVALID_PEER;
|
||||||
|
|
||||||
|
qdf_mem_copy(
|
||||||
|
&peer->mac_addr.raw[0], peer_mac_addr, QDF_MAC_ADDR_SIZE);
|
||||||
|
|
||||||
DP_PEER_SET_TYPE(peer, peer_type);
|
DP_PEER_SET_TYPE(peer, peer_type);
|
||||||
|
if (IS_MLO_DP_MLD_PEER(peer)) {
|
||||||
|
dp_mld_peer_init_link_peers_info(peer);
|
||||||
|
if (dp_txrx_peer_attach(soc, peer) !=
|
||||||
|
QDF_STATUS_SUCCESS)
|
||||||
|
goto fail; /* failure */
|
||||||
|
} else if (dp_monitor_peer_attach(soc, peer) !=
|
||||||
|
QDF_STATUS_SUCCESS)
|
||||||
|
dp_warn("peer monitor ctx alloc failed");
|
||||||
|
|
||||||
|
TAILQ_INIT(&peer->ast_entry_list);
|
||||||
|
|
||||||
/* get the vdev reference for new peer */
|
/* get the vdev reference for new peer */
|
||||||
dp_vdev_get_ref(soc, vdev, DP_MOD_ID_CHILD);
|
dp_vdev_get_ref(soc, vdev, DP_MOD_ID_CHILD);
|
||||||
|
|
||||||
@@ -6910,12 +6958,6 @@ dp_peer_create_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
|||||||
dp_peer_hw_txrx_stats_init(soc, peer);
|
dp_peer_hw_txrx_stats_init(soc, peer);
|
||||||
dp_peer_rx_bufq_resources_init(peer);
|
dp_peer_rx_bufq_resources_init(peer);
|
||||||
|
|
||||||
qdf_mem_copy(
|
|
||||||
&peer->mac_addr.raw[0], peer_mac_addr, QDF_MAC_ADDR_SIZE);
|
|
||||||
|
|
||||||
/* initialize the peer_id */
|
|
||||||
peer->peer_id = HTT_INVALID_PEER;
|
|
||||||
|
|
||||||
/* reset the ast index to flowid table */
|
/* reset the ast index to flowid table */
|
||||||
dp_peer_reset_flowq_map(peer);
|
dp_peer_reset_flowq_map(peer);
|
||||||
|
|
||||||
@@ -6956,8 +6998,6 @@ dp_peer_create_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
dp_peer_rx_tids_create(peer);
|
dp_peer_rx_tids_create(peer);
|
||||||
if (IS_MLO_DP_MLD_PEER(peer))
|
|
||||||
dp_mld_peer_init_link_peers_info(peer);
|
|
||||||
|
|
||||||
peer->valid = 1;
|
peer->valid = 1;
|
||||||
dp_local_peer_id_alloc(pdev, peer);
|
dp_local_peer_id_alloc(pdev, peer);
|
||||||
@@ -6993,16 +7033,28 @@ dp_peer_create_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
|||||||
QDF_STATUS_SUCCESS)
|
QDF_STATUS_SUCCESS)
|
||||||
dp_warn("peer ext_stats ctx alloc failed");
|
dp_warn("peer ext_stats ctx alloc failed");
|
||||||
|
|
||||||
if (dp_monitor_peer_attach(soc, peer) !=
|
|
||||||
QDF_STATUS_SUCCESS)
|
|
||||||
dp_warn("peer monitor ctx alloc failed");
|
|
||||||
|
|
||||||
dp_set_peer_isolation(peer, false);
|
dp_set_peer_isolation(peer, false);
|
||||||
|
|
||||||
dp_peer_update_state(soc, peer, DP_PEER_STATE_INIT);
|
dp_peer_update_state(soc, peer, DP_PEER_STATE_INIT);
|
||||||
|
|
||||||
dp_vdev_unref_delete(soc, vdev, DP_MOD_ID_CDP);
|
dp_vdev_unref_delete(soc, vdev, DP_MOD_ID_CDP);
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
fail:
|
||||||
|
qdf_mem_free(peer);
|
||||||
|
dp_vdev_unref_delete(soc, vdev, DP_MOD_ID_CDP);
|
||||||
|
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static QDF_STATUS dp_peer_legacy_setup(struct dp_soc *soc, struct dp_peer *peer)
|
||||||
|
{
|
||||||
|
if (dp_txrx_peer_attach(soc, peer) !=
|
||||||
|
QDF_STATUS_SUCCESS) {
|
||||||
|
dp_err("peer txrx ctx alloc failed");
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -7302,6 +7354,12 @@ dp_peer_setup_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
|||||||
* not setup reo_queues and default route for bss_peer.
|
* not setup reo_queues and default route for bss_peer.
|
||||||
*/
|
*/
|
||||||
dp_monitor_peer_tx_init(pdev, peer);
|
dp_monitor_peer_tx_init(pdev, peer);
|
||||||
|
|
||||||
|
if (!setup_info)
|
||||||
|
if (dp_peer_legacy_setup(soc, peer) !=
|
||||||
|
QDF_STATUS_SUCCESS)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
if (peer->bss_peer && vdev->opmode == wlan_op_mode_ap) {
|
if (peer->bss_peer && vdev->opmode == wlan_op_mode_ap) {
|
||||||
status = QDF_STATUS_E_FAILURE;
|
status = QDF_STATUS_E_FAILURE;
|
||||||
goto fail;
|
goto fail;
|
||||||
@@ -7933,6 +7991,11 @@ void dp_peer_unref_delete(struct dp_peer *peer, enum dp_mod_id mod_id)
|
|||||||
dp_monitor_peer_detach(soc, peer);
|
dp_monitor_peer_detach(soc, peer);
|
||||||
|
|
||||||
qdf_spinlock_destroy(&peer->peer_state_lock);
|
qdf_spinlock_destroy(&peer->peer_state_lock);
|
||||||
|
|
||||||
|
/* dp_txrx_peer exists for mld peer and legacy peer */
|
||||||
|
if (peer->txrx_peer)
|
||||||
|
dp_txrx_peer_detach(soc, peer);
|
||||||
|
|
||||||
qdf_mem_free(peer);
|
qdf_mem_free(peer);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -7944,6 +8007,18 @@ void dp_peer_unref_delete(struct dp_peer *peer, enum dp_mod_id mod_id)
|
|||||||
|
|
||||||
qdf_export_symbol(dp_peer_unref_delete);
|
qdf_export_symbol(dp_peer_unref_delete);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* dp_txrx_peer_unref_delete() - unref and delete peer
|
||||||
|
* @handle: Datapath txrx ref handle
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void dp_txrx_peer_unref_delete(dp_txrx_ref_handle *handle)
|
||||||
|
{
|
||||||
|
dp_peer_unref_delete((struct dp_peer *)handle, DP_MOD_ID_TX_RX);
|
||||||
|
}
|
||||||
|
|
||||||
|
qdf_export_symbol(dp_txrx_peer_unref_delete);
|
||||||
|
|
||||||
#ifdef PEER_CACHE_RX_PKTS
|
#ifdef PEER_CACHE_RX_PKTS
|
||||||
static inline void dp_peer_rx_bufq_resources_deinit(struct dp_peer *peer)
|
static inline void dp_peer_rx_bufq_resources_deinit(struct dp_peer *peer)
|
||||||
{
|
{
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
||||||
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
|
* Copyright (c) 2021,2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -702,6 +702,34 @@ void dp_peer_vdev_list_remove(struct dp_soc *soc, struct dp_vdev *vdev,
|
|||||||
qdf_spin_unlock_bh(&vdev->peer_list_lock);
|
qdf_spin_unlock_bh(&vdev->peer_list_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* dp_txrx_peer_attach_add() - Attach txrx_peer and add it to peer_id table
|
||||||
|
* @soc: SoC handle
|
||||||
|
* @peer: peer handle
|
||||||
|
* @txrx_peer: txrx peer handle
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
void dp_txrx_peer_attach_add(struct dp_soc *soc,
|
||||||
|
struct dp_peer *peer,
|
||||||
|
struct dp_txrx_peer *txrx_peer)
|
||||||
|
{
|
||||||
|
qdf_spin_lock_bh(&soc->peer_map_lock);
|
||||||
|
|
||||||
|
peer->txrx_peer = txrx_peer;
|
||||||
|
|
||||||
|
if (peer->peer_id == HTT_INVALID_PEER) {
|
||||||
|
qdf_spin_unlock_bh(&soc->peer_map_lock);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
txrx_peer->peer_id = peer->peer_id;
|
||||||
|
|
||||||
|
QDF_ASSERT(soc->peer_id_to_obj_map[peer->peer_id]);
|
||||||
|
|
||||||
|
qdf_spin_unlock_bh(&soc->peer_map_lock);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* dp_peer_find_id_to_obj_add() - Add peer into peer_id table
|
* dp_peer_find_id_to_obj_add() - Add peer into peer_id table
|
||||||
* @soc: SoC handle
|
* @soc: SoC handle
|
||||||
@@ -718,6 +746,8 @@ void dp_peer_find_id_to_obj_add(struct dp_soc *soc,
|
|||||||
|
|
||||||
qdf_spin_lock_bh(&soc->peer_map_lock);
|
qdf_spin_lock_bh(&soc->peer_map_lock);
|
||||||
|
|
||||||
|
peer->peer_id = peer_id;
|
||||||
|
|
||||||
if (QDF_IS_STATUS_ERROR(dp_peer_get_ref(soc, peer, DP_MOD_ID_CONFIG))) {
|
if (QDF_IS_STATUS_ERROR(dp_peer_get_ref(soc, peer, DP_MOD_ID_CONFIG))) {
|
||||||
dp_err("unable to get peer ref at MAP mac: "QDF_MAC_ADDR_FMT" peer_id %u",
|
dp_err("unable to get peer ref at MAP mac: "QDF_MAC_ADDR_FMT" peer_id %u",
|
||||||
QDF_MAC_ADDR_REF(peer->mac_addr.raw), peer_id);
|
QDF_MAC_ADDR_REF(peer->mac_addr.raw), peer_id);
|
||||||
@@ -727,6 +757,8 @@ void dp_peer_find_id_to_obj_add(struct dp_soc *soc,
|
|||||||
|
|
||||||
if (!soc->peer_id_to_obj_map[peer_id]) {
|
if (!soc->peer_id_to_obj_map[peer_id]) {
|
||||||
soc->peer_id_to_obj_map[peer_id] = peer;
|
soc->peer_id_to_obj_map[peer_id] = peer;
|
||||||
|
if (peer->txrx_peer)
|
||||||
|
peer->txrx_peer->peer_id = peer_id;
|
||||||
} else {
|
} else {
|
||||||
/* Peer map event came for peer_id which
|
/* Peer map event came for peer_id which
|
||||||
* is already mapped, this is not expected
|
* is already mapped, this is not expected
|
||||||
@@ -752,6 +784,9 @@ void dp_peer_find_id_to_obj_remove(struct dp_soc *soc,
|
|||||||
|
|
||||||
qdf_spin_lock_bh(&soc->peer_map_lock);
|
qdf_spin_lock_bh(&soc->peer_map_lock);
|
||||||
peer = soc->peer_id_to_obj_map[peer_id];
|
peer = soc->peer_id_to_obj_map[peer_id];
|
||||||
|
peer->peer_id = HTT_INVALID_PEER;
|
||||||
|
if (peer->txrx_peer)
|
||||||
|
peer->txrx_peer->peer_id = HTT_INVALID_PEER;
|
||||||
soc->peer_id_to_obj_map[peer_id] = NULL;
|
soc->peer_id_to_obj_map[peer_id] = NULL;
|
||||||
dp_peer_unref_delete(peer, DP_MOD_ID_CONFIG);
|
dp_peer_unref_delete(peer, DP_MOD_ID_CONFIG);
|
||||||
qdf_spin_unlock_bh(&soc->peer_map_lock);
|
qdf_spin_unlock_bh(&soc->peer_map_lock);
|
||||||
@@ -2487,15 +2522,13 @@ static inline struct dp_peer *dp_peer_find_add_id(struct dp_soc *soc,
|
|||||||
vdev_id);
|
vdev_id);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QDF_ASSERT(peer->peer_id == HTT_INVALID_PEER);
|
||||||
|
|
||||||
dp_peer_find_id_to_obj_add(soc, peer, peer_id);
|
dp_peer_find_id_to_obj_add(soc, peer, peer_id);
|
||||||
dp_mlo_partner_chips_map(soc, peer, peer_id);
|
dp_mlo_partner_chips_map(soc, peer, peer_id);
|
||||||
if (peer->peer_id == HTT_INVALID_PEER) {
|
dp_monitor_peer_tid_peer_id_update(soc, peer,
|
||||||
peer->peer_id = peer_id;
|
peer->peer_id);
|
||||||
dp_monitor_peer_tid_peer_id_update(soc, peer,
|
|
||||||
peer->peer_id);
|
|
||||||
} else {
|
|
||||||
QDF_ASSERT(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
dp_peer_update_state(soc, peer, DP_PEER_STATE_ACTIVE);
|
dp_peer_update_state(soc, peer, DP_PEER_STATE_ACTIVE);
|
||||||
return peer;
|
return peer;
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
||||||
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
|
* Copyright (c) 2021,2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -66,6 +66,7 @@ struct ast_del_ctxt {
|
|||||||
typedef void dp_peer_iter_func(struct dp_soc *soc, struct dp_peer *peer,
|
typedef void dp_peer_iter_func(struct dp_soc *soc, struct dp_peer *peer,
|
||||||
void *arg);
|
void *arg);
|
||||||
void dp_peer_unref_delete(struct dp_peer *peer, enum dp_mod_id id);
|
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);
|
||||||
struct dp_peer *dp_peer_find_hash_find(struct dp_soc *soc,
|
struct dp_peer *dp_peer_find_hash_find(struct dp_soc *soc,
|
||||||
uint8_t *peer_mac_addr,
|
uint8_t *peer_mac_addr,
|
||||||
int mac_addr_is_aligned,
|
int mac_addr_is_aligned,
|
||||||
@@ -159,6 +160,31 @@ struct dp_peer *dp_peer_get_ref_by_id(struct dp_soc *soc,
|
|||||||
return peer;
|
return peer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_txrx_peer_get_ref_by_id() - Returns txrx peer object given the peer id
|
||||||
|
*
|
||||||
|
* @soc : core DP soc context
|
||||||
|
* @peer_id : peer id from peer object can be retrieved
|
||||||
|
* @handle : reference handle
|
||||||
|
*
|
||||||
|
* 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)
|
||||||
|
|
||||||
|
{
|
||||||
|
struct dp_peer *peer;
|
||||||
|
|
||||||
|
peer = dp_peer_get_ref_by_id(soc, peer_id, DP_MOD_ID_TX_RX);
|
||||||
|
if (!peer)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
*handle = (dp_txrx_ref_handle)peer;
|
||||||
|
return peer->txrx_peer;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef PEER_CACHE_RX_PKTS
|
#ifdef PEER_CACHE_RX_PKTS
|
||||||
/**
|
/**
|
||||||
* dp_rx_flush_rx_cached() - flush cached rx frames
|
* dp_rx_flush_rx_cached() - flush cached rx frames
|
||||||
@@ -1041,6 +1067,10 @@ void dp_peer_delete(struct dp_soc *soc,
|
|||||||
/* set peer type */
|
/* set peer type */
|
||||||
#define DP_PEER_SET_TYPE(_peer, _type_val) \
|
#define DP_PEER_SET_TYPE(_peer, _type_val) \
|
||||||
((_peer)->peer_type = (_type_val))
|
((_peer)->peer_type = (_type_val))
|
||||||
|
|
||||||
|
/* is legacy peer */
|
||||||
|
#define IS_DP_LEGACY_PEER(_peer) \
|
||||||
|
((_peer)->peer_type == CDP_LINK_PEER_TYPE && !((_peer)->mld_peer))
|
||||||
/* is MLO connection link peer */
|
/* is MLO connection link peer */
|
||||||
#define IS_MLO_DP_LINK_PEER(_peer) \
|
#define IS_MLO_DP_LINK_PEER(_peer) \
|
||||||
((_peer)->peer_type == CDP_LINK_PEER_TYPE && (_peer)->mld_peer)
|
((_peer)->peer_type == CDP_LINK_PEER_TYPE && (_peer)->mld_peer)
|
||||||
@@ -1398,6 +1428,8 @@ QDF_STATUS dp_peer_mlo_setup(
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
#define DP_PEER_SET_TYPE(_peer, _type_val) /* no op */
|
#define DP_PEER_SET_TYPE(_peer, _type_val) /* no op */
|
||||||
|
/* is legacy peer */
|
||||||
|
#define IS_DP_LEGACY_PEER(_peer) true
|
||||||
#define IS_MLO_DP_LINK_PEER(_peer) false
|
#define IS_MLO_DP_LINK_PEER(_peer) false
|
||||||
#define IS_MLO_DP_MLD_PEER(_peer) false
|
#define IS_MLO_DP_MLD_PEER(_peer) false
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
||||||
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
|
* Copyright (c) 2021,2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -214,30 +214,31 @@ enum dp_peer_state {
|
|||||||
* enum for modules ids of
|
* enum for modules ids of
|
||||||
*/
|
*/
|
||||||
enum dp_mod_id {
|
enum dp_mod_id {
|
||||||
DP_MOD_ID_TX_COMP = 0,
|
DP_MOD_ID_TX_RX,
|
||||||
DP_MOD_ID_RX = 1,
|
DP_MOD_ID_TX_COMP,
|
||||||
DP_MOD_ID_HTT_COMP = 2,
|
DP_MOD_ID_RX,
|
||||||
DP_MOD_ID_RX_ERR = 3,
|
DP_MOD_ID_HTT_COMP,
|
||||||
DP_MOD_ID_TX_PPDU_STATS = 4,
|
DP_MOD_ID_RX_ERR,
|
||||||
DP_MOD_ID_RX_PPDU_STATS = 5,
|
DP_MOD_ID_TX_PPDU_STATS,
|
||||||
DP_MOD_ID_CDP = 6,
|
DP_MOD_ID_RX_PPDU_STATS,
|
||||||
DP_MOD_ID_GENERIC_STATS = 7,
|
DP_MOD_ID_CDP,
|
||||||
DP_MOD_ID_TX_MULTIPASS = 8,
|
DP_MOD_ID_GENERIC_STATS,
|
||||||
DP_MOD_ID_TX_CAPTURE = 9,
|
DP_MOD_ID_TX_MULTIPASS,
|
||||||
DP_MOD_ID_NSS_OFFLOAD = 10,
|
DP_MOD_ID_TX_CAPTURE,
|
||||||
DP_MOD_ID_CONFIG = 11,
|
DP_MOD_ID_NSS_OFFLOAD,
|
||||||
DP_MOD_ID_HTT = 12,
|
DP_MOD_ID_CONFIG,
|
||||||
DP_MOD_ID_IPA = 13,
|
DP_MOD_ID_HTT,
|
||||||
DP_MOD_ID_AST = 14,
|
DP_MOD_ID_IPA,
|
||||||
DP_MOD_ID_MCAST2UCAST = 15,
|
DP_MOD_ID_AST,
|
||||||
DP_MOD_ID_CHILD = 16,
|
DP_MOD_ID_MCAST2UCAST,
|
||||||
DP_MOD_ID_MESH = 17,
|
DP_MOD_ID_CHILD,
|
||||||
DP_MOD_ID_TX_EXCEPTION = 18,
|
DP_MOD_ID_MESH,
|
||||||
DP_MOD_ID_TDLS = 19,
|
DP_MOD_ID_TX_EXCEPTION,
|
||||||
DP_MOD_ID_MISC = 20,
|
DP_MOD_ID_TDLS,
|
||||||
DP_MOD_ID_MSCS = 21,
|
DP_MOD_ID_MISC,
|
||||||
DP_MOD_ID_TX = 22,
|
DP_MOD_ID_MSCS,
|
||||||
DP_MOD_ID_MAX = 23,
|
DP_MOD_ID_TX,
|
||||||
|
DP_MOD_ID_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DP_PDEV_ITERATE_VDEV_LIST(_pdev, _vdev) \
|
#define DP_PDEV_ITERATE_VDEV_LIST(_pdev, _vdev) \
|
||||||
@@ -3310,8 +3311,24 @@ struct dp_mld_link_peers {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef void *dp_txrx_ref_handle;
|
||||||
|
|
||||||
|
struct dp_txrx_peer {
|
||||||
|
/* Core TxRx Peer */
|
||||||
|
|
||||||
|
/* VDEV to which this peer is associated */
|
||||||
|
struct dp_vdev *vdev;
|
||||||
|
|
||||||
|
/* peer ID for this peer */
|
||||||
|
uint16_t peer_id;
|
||||||
|
};
|
||||||
|
|
||||||
/* Peer structure for data path state */
|
/* Peer structure for data path state */
|
||||||
struct dp_peer {
|
struct dp_peer {
|
||||||
|
struct dp_txrx_peer *txrx_peer;
|
||||||
|
#ifdef WIFI_MONITOR_SUPPORT
|
||||||
|
struct dp_mon_peer *monitor_peer;
|
||||||
|
#endif
|
||||||
/* VDEV to which this peer is associated */
|
/* VDEV to which this peer is associated */
|
||||||
struct dp_vdev *vdev;
|
struct dp_vdev *vdev;
|
||||||
|
|
||||||
@@ -3440,9 +3457,6 @@ struct dp_peer {
|
|||||||
#ifdef WLAN_SUPPORT_MESH_LATENCY
|
#ifdef WLAN_SUPPORT_MESH_LATENCY
|
||||||
struct dp_peer_mesh_latency_parameter mesh_latency_params[DP_MAX_TIDS];
|
struct dp_peer_mesh_latency_parameter mesh_latency_params[DP_MAX_TIDS];
|
||||||
#endif
|
#endif
|
||||||
#ifdef WIFI_MONITOR_SUPPORT
|
|
||||||
struct dp_mon_peer *monitor_peer;
|
|
||||||
#endif
|
|
||||||
#ifdef WLAN_FEATURE_11BE_MLO
|
#ifdef WLAN_FEATURE_11BE_MLO
|
||||||
/* peer type */
|
/* peer type */
|
||||||
enum cdp_peer_type peer_type;
|
enum cdp_peer_type peer_type;
|
||||||
|
Reference in New Issue
Block a user