qcacmn: Route soc init/deinit handling via arch ops API's
Currently dp_soc_init/deinit API's are called first for common soc initialization/deinitialization and then architecture level init/deinit APIs are called from base dp_soc_init/deinit. But with RHINE architecture dp_soc_init/deinit API's are not common, so we cannot call these APIs as base. To handle this scenario routing all the soc level init/deinit from arch ops APIs and arch ops APIs will take care of calling common soc_init/deinit. Change-Id: Ibb10d452931630c917088b4d222c7fbd82621f6a CRs-Fixed: 3404205
This commit is contained in:

committed by
Madan Koyyalamudi

parent
88804f2cfc
commit
a7cd30b5da
@@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
#include <wlan_utility.h>
|
#include <wlan_utility.h>
|
||||||
#include <dp_internal.h>
|
#include <dp_internal.h>
|
||||||
|
#include "dp_rings.h"
|
||||||
#include <dp_htt.h>
|
#include <dp_htt.h>
|
||||||
#include "dp_be.h"
|
#include "dp_be.h"
|
||||||
#include "dp_be_tx.h"
|
#include "dp_be_tx.h"
|
||||||
@@ -100,6 +101,7 @@ static void dp_ppeds_inuse_desc(struct dp_soc *soc)
|
|||||||
static void dp_soc_cfg_attach_be(struct dp_soc *soc)
|
static void dp_soc_cfg_attach_be(struct dp_soc *soc)
|
||||||
{
|
{
|
||||||
struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx = soc->wlan_cfg_ctx;
|
struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx = soc->wlan_cfg_ctx;
|
||||||
|
dp_soc_cfg_attach(soc);
|
||||||
|
|
||||||
wlan_cfg_set_rx_rel_ring_id(soc_cfg_ctx, WBM2SW_REL_ERR_RING_NUM);
|
wlan_cfg_set_rx_rel_ring_id(soc_cfg_ctx, WBM2SW_REL_ERR_RING_NUM);
|
||||||
|
|
||||||
@@ -744,6 +746,10 @@ QDF_STATUS dp_peer_setup_ppeds_be(struct dp_soc *soc, struct dp_peer *peer,
|
|||||||
{
|
{
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void dp_ppeds_stop_soc_be(struct dp_soc *soc)
|
||||||
|
{
|
||||||
|
}
|
||||||
#endif /* WLAN_SUPPORT_PPEDS */
|
#endif /* WLAN_SUPPORT_PPEDS */
|
||||||
|
|
||||||
void dp_reo_shared_qaddr_detach(struct dp_soc *soc)
|
void dp_reo_shared_qaddr_detach(struct dp_soc *soc)
|
||||||
@@ -993,6 +999,10 @@ static QDF_STATUS dp_soc_deinit_be(struct dp_soc *soc)
|
|||||||
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
|
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
|
qdf_atomic_set(&soc->cmn_init_done, 0);
|
||||||
|
|
||||||
|
dp_ppeds_stop_soc_be(soc);
|
||||||
|
|
||||||
dp_tx_deinit_bank_profiles(be_soc);
|
dp_tx_deinit_bank_profiles(be_soc);
|
||||||
for (i = 0; i < MAX_TXDESC_POOLS; i++)
|
for (i = 0; i < MAX_TXDESC_POOLS; i++)
|
||||||
dp_hw_cookie_conversion_deinit(be_soc,
|
dp_hw_cookie_conversion_deinit(be_soc,
|
||||||
@@ -1007,11 +1017,35 @@ static QDF_STATUS dp_soc_deinit_be(struct dp_soc *soc)
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static QDF_STATUS dp_soc_init_be(struct dp_soc *soc)
|
static QDF_STATUS dp_soc_deinit_be_wrapper(struct dp_soc *soc)
|
||||||
|
{
|
||||||
|
QDF_STATUS qdf_status;
|
||||||
|
|
||||||
|
qdf_status = dp_soc_deinit_be(soc);
|
||||||
|
if (QDF_IS_STATUS_ERROR(qdf_status))
|
||||||
|
return qdf_status;
|
||||||
|
|
||||||
|
dp_soc_deinit(soc);
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *dp_soc_init_be(struct dp_soc *soc, HTC_HANDLE htc_handle,
|
||||||
|
struct hif_opaque_softc *hif_handle)
|
||||||
{
|
{
|
||||||
QDF_STATUS qdf_status = QDF_STATUS_SUCCESS;
|
QDF_STATUS qdf_status = QDF_STATUS_SUCCESS;
|
||||||
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
|
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
void *ret_addr;
|
||||||
|
|
||||||
|
wlan_minidump_log(soc, sizeof(*soc), soc->ctrl_psoc,
|
||||||
|
WLAN_MD_DP_SOC, "dp_soc");
|
||||||
|
|
||||||
|
soc->hif_handle = hif_handle;
|
||||||
|
|
||||||
|
soc->hal_soc = hif_get_hal_handle(soc->hif_handle);
|
||||||
|
if (!soc->hal_soc)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
dp_ppeds_init_soc_be(soc);
|
dp_ppeds_init_soc_be(soc);
|
||||||
|
|
||||||
@@ -1042,10 +1076,14 @@ static QDF_STATUS dp_soc_init_be(struct dp_soc *soc)
|
|||||||
/* write WBM/REO cookie conversion CFG register */
|
/* write WBM/REO cookie conversion CFG register */
|
||||||
dp_cc_reg_cfg_init(soc, true);
|
dp_cc_reg_cfg_init(soc, true);
|
||||||
|
|
||||||
return qdf_status;
|
ret_addr = dp_soc_init(soc, htc_handle, hif_handle);
|
||||||
|
if (!ret_addr)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
return ret_addr;
|
||||||
fail:
|
fail:
|
||||||
dp_soc_deinit_be(soc);
|
dp_soc_deinit_be(soc);
|
||||||
return qdf_status;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static QDF_STATUS dp_pdev_attach_be(struct dp_pdev *pdev,
|
static QDF_STATUS dp_pdev_attach_be(struct dp_pdev *pdev,
|
||||||
@@ -1137,18 +1175,33 @@ static QDF_STATUS dp_vdev_detach_be(struct dp_soc *soc, struct dp_vdev *vdev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WLAN_SUPPORT_PPEDS
|
#ifdef WLAN_SUPPORT_PPEDS
|
||||||
static QDF_STATUS dp_peer_setup_be(struct dp_soc *soc, struct dp_peer *peer)
|
static void dp_soc_txrx_peer_setup_be(struct dp_soc *soc, uint8_t vdev_id,
|
||||||
|
uint8_t *peer_mac)
|
||||||
{
|
{
|
||||||
struct dp_vdev_be *be_vdev;
|
struct dp_vdev_be *be_vdev;
|
||||||
QDF_STATUS qdf_status = QDF_STATUS_SUCCESS;
|
QDF_STATUS qdf_status = QDF_STATUS_SUCCESS;
|
||||||
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
|
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
|
||||||
struct cdp_ds_vp_params vp_params = {0};
|
struct cdp_ds_vp_params vp_params = {0};
|
||||||
struct cdp_soc_t *cdp_soc = &soc->cdp_soc;
|
struct cdp_soc_t *cdp_soc = &soc->cdp_soc;
|
||||||
|
enum wlan_op_mode vdev_opmode;
|
||||||
|
struct dp_peer *peer;
|
||||||
|
|
||||||
|
peer = dp_peer_find_hash_find(soc, peer_mac, 0, vdev_id, DP_MOD_ID_CDP);
|
||||||
|
if (!peer)
|
||||||
|
return;
|
||||||
|
vdev_opmode = peer->vdev->opmode;
|
||||||
|
|
||||||
|
if (vdev_opmode != wlan_op_mode_ap &&
|
||||||
|
vdev_opmode != wlan_op_mode_sta) {
|
||||||
|
dp_peer_unref_delete(peer, DP_MOD_ID_CDP);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
be_vdev = dp_get_be_vdev_from_dp_vdev(peer->vdev);
|
be_vdev = dp_get_be_vdev_from_dp_vdev(peer->vdev);
|
||||||
if (!be_vdev) {
|
if (!be_vdev) {
|
||||||
qdf_err("BE vap is null");
|
qdf_err("BE vap is null");
|
||||||
return QDF_STATUS_E_NULL_VALUE;
|
qdf_status = QDF_STATUS_E_NULL_VALUE;
|
||||||
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1156,7 +1209,8 @@ static QDF_STATUS dp_peer_setup_be(struct dp_soc *soc, struct dp_peer *peer)
|
|||||||
*/
|
*/
|
||||||
if (!cdp_soc->ol_ops->get_ppeds_profile_info_for_vap) {
|
if (!cdp_soc->ol_ops->get_ppeds_profile_info_for_vap) {
|
||||||
dp_err("%pK: Register get ppeds profile info first\n", cdp_soc);
|
dp_err("%pK: Register get ppeds profile info first\n", cdp_soc);
|
||||||
return QDF_STATUS_E_NULL_VALUE;
|
qdf_status = QDF_STATUS_E_NULL_VALUE;
|
||||||
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1167,7 +1221,8 @@ static QDF_STATUS dp_peer_setup_be(struct dp_soc *soc, struct dp_peer *peer)
|
|||||||
&vp_params);
|
&vp_params);
|
||||||
if (qdf_status == QDF_STATUS_E_NULL_VALUE) {
|
if (qdf_status == QDF_STATUS_E_NULL_VALUE) {
|
||||||
dp_err("%pK: Could not find ppeds profile info vdev\n", be_vdev);
|
dp_err("%pK: Could not find ppeds profile info vdev\n", be_vdev);
|
||||||
return QDF_STATUS_E_NULL_VALUE;
|
qdf_status = QDF_STATUS_E_NULL_VALUE;
|
||||||
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vp_params.ppe_vp_type == PPE_VP_USER_TYPE_DS) {
|
if (vp_params.ppe_vp_type == PPE_VP_USER_TYPE_DS) {
|
||||||
@@ -1175,15 +1230,41 @@ static QDF_STATUS dp_peer_setup_be(struct dp_soc *soc, struct dp_peer *peer)
|
|||||||
(void *)&be_soc->ppe_vp_profile[vp_params.ppe_vp_profile_idx]);
|
(void *)&be_soc->ppe_vp_profile[vp_params.ppe_vp_profile_idx]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return qdf_status;
|
fail:
|
||||||
|
dp_peer_unref_delete(peer, DP_MOD_ID_CDP);
|
||||||
|
if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
|
||||||
|
dp_err("Unable to do ppeds peer setup");
|
||||||
|
qdf_assert_always(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
static QDF_STATUS dp_peer_setup_be(struct dp_soc *soc, struct dp_peer *peer)
|
static inline
|
||||||
|
void dp_soc_txrx_peer_setup_be(struct dp_soc *soc, uint8_t vdev_id,
|
||||||
|
uint8_t *peer_mac)
|
||||||
{
|
{
|
||||||
return QDF_STATUS_SUCCESS;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static QDF_STATUS dp_peer_setup_be(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
||||||
|
uint8_t *peer_mac,
|
||||||
|
struct cdp_peer_setup_info *setup_info)
|
||||||
|
{
|
||||||
|
struct dp_soc *soc = (struct dp_soc *)soc_hdl;
|
||||||
|
QDF_STATUS qdf_status = QDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
|
qdf_status = dp_peer_setup_wifi3(soc_hdl, vdev_id, peer_mac,
|
||||||
|
setup_info);
|
||||||
|
if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
|
||||||
|
dp_err("Unable to dp peer setup");
|
||||||
|
return qdf_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
dp_soc_txrx_peer_setup_be(soc, vdev_id, peer_mac);
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
qdf_size_t dp_get_soc_context_size_be(void)
|
qdf_size_t dp_get_soc_context_size_be(void)
|
||||||
{
|
{
|
||||||
return sizeof(struct dp_soc_be);
|
return sizeof(struct dp_soc_be);
|
||||||
@@ -1654,6 +1735,13 @@ dp_init_near_full_arch_ops_be(struct dp_arch_ops *arch_ops)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static inline
|
||||||
|
QDF_STATUS dp_srng_init_be(struct dp_soc *soc, struct dp_srng *srng,
|
||||||
|
int ring_type, int ring_num, int mac_id)
|
||||||
|
{
|
||||||
|
return dp_srng_init_idx(soc, srng, ring_type, ring_num, mac_id, 0);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef WLAN_SUPPORT_PPEDS
|
#ifdef WLAN_SUPPORT_PPEDS
|
||||||
static void dp_soc_ppeds_srng_deinit(struct dp_soc *soc)
|
static void dp_soc_ppeds_srng_deinit(struct dp_soc *soc)
|
||||||
{
|
{
|
||||||
@@ -2735,7 +2823,7 @@ void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops)
|
|||||||
arch_ops->txrx_soc_attach = dp_soc_attach_be;
|
arch_ops->txrx_soc_attach = dp_soc_attach_be;
|
||||||
arch_ops->txrx_soc_detach = dp_soc_detach_be;
|
arch_ops->txrx_soc_detach = dp_soc_detach_be;
|
||||||
arch_ops->txrx_soc_init = dp_soc_init_be;
|
arch_ops->txrx_soc_init = dp_soc_init_be;
|
||||||
arch_ops->txrx_soc_deinit = dp_soc_deinit_be;
|
arch_ops->txrx_soc_deinit = dp_soc_deinit_be_wrapper;
|
||||||
arch_ops->txrx_soc_srng_alloc = dp_soc_srng_alloc_be;
|
arch_ops->txrx_soc_srng_alloc = dp_soc_srng_alloc_be;
|
||||||
arch_ops->txrx_soc_srng_init = dp_soc_srng_init_be;
|
arch_ops->txrx_soc_srng_init = dp_soc_srng_init_be;
|
||||||
arch_ops->txrx_soc_srng_deinit = dp_soc_srng_deinit_be;
|
arch_ops->txrx_soc_srng_deinit = dp_soc_srng_deinit_be;
|
||||||
@@ -2790,6 +2878,7 @@ void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops)
|
|||||||
arch_ops->peer_get_reo_hash = dp_peer_get_reo_hash_be;
|
arch_ops->peer_get_reo_hash = dp_peer_get_reo_hash_be;
|
||||||
arch_ops->reo_remap_config = dp_reo_remap_config_be;
|
arch_ops->reo_remap_config = dp_reo_remap_config_be;
|
||||||
arch_ops->txrx_get_vdev_mcast_param = dp_txrx_get_vdev_mcast_param_be;
|
arch_ops->txrx_get_vdev_mcast_param = dp_txrx_get_vdev_mcast_param_be;
|
||||||
|
arch_ops->txrx_srng_init = dp_srng_init_be;
|
||||||
dp_initialize_arch_ops_be_ipa(arch_ops);
|
dp_initialize_arch_ops_be_ipa(arch_ops);
|
||||||
dp_initialize_arch_ops_be_single_dev(arch_ops);
|
dp_initialize_arch_ops_be_single_dev(arch_ops);
|
||||||
}
|
}
|
||||||
|
@@ -1392,7 +1392,8 @@ qdf_export_symbol(dp_srng_free);
|
|||||||
QDF_STATUS dp_srng_init(struct dp_soc *soc, struct dp_srng *srng, int ring_type,
|
QDF_STATUS dp_srng_init(struct dp_soc *soc, struct dp_srng *srng, int ring_type,
|
||||||
int ring_num, int mac_id)
|
int ring_num, int mac_id)
|
||||||
{
|
{
|
||||||
return dp_srng_init_idx(soc, srng, ring_type, ring_num, mac_id, 0);
|
return soc->arch_ops.txrx_srng_init(soc, srng, ring_type,
|
||||||
|
ring_num, mac_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
qdf_export_symbol(dp_srng_init);
|
qdf_export_symbol(dp_srng_init);
|
||||||
@@ -2951,7 +2952,9 @@ void dp_soc_print_inactive_objects(struct dp_soc *soc)
|
|||||||
*/
|
*/
|
||||||
static void dp_soc_deinit_wifi3(struct cdp_soc_t *txrx_soc)
|
static void dp_soc_deinit_wifi3(struct cdp_soc_t *txrx_soc)
|
||||||
{
|
{
|
||||||
dp_soc_deinit(txrx_soc);
|
struct dp_soc *soc = (struct dp_soc *)txrx_soc;
|
||||||
|
|
||||||
|
soc->arch_ops.txrx_soc_deinit(soc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -4861,6 +4864,26 @@ static void dp_mlo_peer_authorize(struct dp_soc *soc,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_peer_setup_wifi3_wrapper() - initialize the peer
|
||||||
|
* @soc_hdl: soc handle object
|
||||||
|
* @vdev_id : vdev_id of vdev object
|
||||||
|
* @peer_mac: Peer's mac address
|
||||||
|
* @setup_info: peer setup info for MLO
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
static QDF_STATUS
|
||||||
|
dp_peer_setup_wifi3_wrapper(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
||||||
|
uint8_t *peer_mac,
|
||||||
|
struct cdp_peer_setup_info *setup_info)
|
||||||
|
{
|
||||||
|
struct dp_soc *soc = (struct dp_soc *)soc_hdl;
|
||||||
|
|
||||||
|
return soc->arch_ops.txrx_peer_setup(soc_hdl, vdev_id,
|
||||||
|
peer_mac, setup_info);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_cp_peer_del_resp_handler() - Handle the peer delete response
|
* dp_cp_peer_del_resp_handler() - Handle the peer delete response
|
||||||
* @soc_hdl: Datapath SOC handle
|
* @soc_hdl: Datapath SOC handle
|
||||||
@@ -10093,7 +10116,7 @@ static struct cdp_cmn_ops dp_ops_cmn = {
|
|||||||
.txrx_pdev_detach = dp_pdev_detach_wifi3,
|
.txrx_pdev_detach = dp_pdev_detach_wifi3,
|
||||||
.txrx_pdev_deinit = dp_pdev_deinit_wifi3,
|
.txrx_pdev_deinit = dp_pdev_deinit_wifi3,
|
||||||
.txrx_peer_create = dp_peer_create_wifi3,
|
.txrx_peer_create = dp_peer_create_wifi3,
|
||||||
.txrx_peer_setup = dp_peer_setup_wifi3,
|
.txrx_peer_setup = dp_peer_setup_wifi3_wrapper,
|
||||||
#ifdef FEATURE_AST
|
#ifdef FEATURE_AST
|
||||||
.txrx_peer_teardown = dp_peer_teardown_wifi3,
|
.txrx_peer_teardown = dp_peer_teardown_wifi3,
|
||||||
#else
|
#else
|
||||||
@@ -11273,7 +11296,8 @@ dp_soc_attach(struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
|
|||||||
dp_err("wlan_cfg_ctx failed\n");
|
dp_err("wlan_cfg_ctx failed\n");
|
||||||
goto fail2;
|
goto fail2;
|
||||||
}
|
}
|
||||||
dp_soc_cfg_attach(soc);
|
|
||||||
|
soc->arch_ops.soc_cfg_attach(soc);
|
||||||
|
|
||||||
if (dp_hw_link_desc_pool_banks_alloc(soc, WLAN_INVALID_PDEV_ID)) {
|
if (dp_hw_link_desc_pool_banks_alloc(soc, WLAN_INVALID_PDEV_ID)) {
|
||||||
dp_err("failed to allocate link desc pool banks");
|
dp_err("failed to allocate link desc pool banks");
|
||||||
@@ -11353,13 +11377,15 @@ fail0:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *dp_soc_init_wifi3(struct cdp_soc_t *soc,
|
void *dp_soc_init_wifi3(struct cdp_soc_t *cdp_soc,
|
||||||
struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
|
struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
|
||||||
struct hif_opaque_softc *hif_handle,
|
struct hif_opaque_softc *hif_handle,
|
||||||
HTC_HANDLE htc_handle, qdf_device_t qdf_osdev,
|
HTC_HANDLE htc_handle, qdf_device_t qdf_osdev,
|
||||||
struct ol_if_ops *ol_ops, uint16_t device_id)
|
struct ol_if_ops *ol_ops, uint16_t device_id)
|
||||||
{
|
{
|
||||||
return dp_soc_init((struct dp_soc *)soc, htc_handle, hif_handle);
|
struct dp_soc *soc = (struct dp_soc *)cdp_soc;
|
||||||
|
|
||||||
|
return soc->arch_ops.txrx_soc_init(soc, htc_handle, hif_handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -3393,13 +3393,6 @@ void dp_soc_deinit(void *txrx_soc)
|
|||||||
struct dp_soc *soc = (struct dp_soc *)txrx_soc;
|
struct dp_soc *soc = (struct dp_soc *)txrx_soc;
|
||||||
struct htt_soc *htt_soc = soc->htt_handle;
|
struct htt_soc *htt_soc = soc->htt_handle;
|
||||||
|
|
||||||
qdf_atomic_set(&soc->cmn_init_done, 0);
|
|
||||||
|
|
||||||
if (soc->arch_ops.txrx_soc_ppeds_stop)
|
|
||||||
soc->arch_ops.txrx_soc_ppeds_stop(soc);
|
|
||||||
|
|
||||||
soc->arch_ops.txrx_soc_deinit(soc);
|
|
||||||
|
|
||||||
dp_monitor_soc_deinit(soc);
|
dp_monitor_soc_deinit(soc);
|
||||||
|
|
||||||
/* free peer tables & AST tables allocated during peer_map_attach */
|
/* free peer tables & AST tables allocated during peer_map_attach */
|
||||||
@@ -3469,33 +3462,6 @@ dp_htt_setup_rxdma_err_dst_ring(struct dp_soc *soc, int mac_id,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WLAN_SUPPORT_PPEDS
|
|
||||||
|
|
||||||
static inline
|
|
||||||
void dp_soc_txrx_peer_setup(enum wlan_op_mode vdev_opmode, struct dp_soc *soc,
|
|
||||||
struct dp_peer *peer)
|
|
||||||
{
|
|
||||||
if (((vdev_opmode == wlan_op_mode_ap) ||
|
|
||||||
(vdev_opmode == wlan_op_mode_sta)) &&
|
|
||||||
(soc->arch_ops.txrx_peer_setup)) {
|
|
||||||
if (soc->arch_ops.txrx_peer_setup(soc, peer)
|
|
||||||
!= QDF_STATUS_SUCCESS) {
|
|
||||||
dp_err("unable to setup target peer features");
|
|
||||||
qdf_assert_always(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
static inline
|
|
||||||
void dp_soc_txrx_peer_setup(enum wlan_op_mode vdev_opmode, struct dp_soc *soc,
|
|
||||||
struct dp_peer *peer)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* WLAN_SUPPORT_PPEDS */
|
|
||||||
|
|
||||||
void dp_vdev_get_default_reo_hash(struct dp_vdev *vdev,
|
void dp_vdev_get_default_reo_hash(struct dp_vdev *vdev,
|
||||||
enum cdp_host_reo_dest_ring *reo_dest,
|
enum cdp_host_reo_dest_ring *reo_dest,
|
||||||
bool *hash_based)
|
bool *hash_based)
|
||||||
@@ -3729,8 +3695,6 @@ dp_peer_setup_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dp_soc_txrx_peer_setup(vdev_opmode, soc, peer);
|
|
||||||
|
|
||||||
if (!IS_MLO_DP_MLD_PEER(peer))
|
if (!IS_MLO_DP_MLD_PEER(peer))
|
||||||
dp_peer_ppdu_delayed_ba_init(peer);
|
dp_peer_ppdu_delayed_ba_init(peer);
|
||||||
|
|
||||||
@@ -4482,20 +4446,6 @@ void *dp_soc_init(struct dp_soc *soc, HTC_HANDLE htc_handle,
|
|||||||
uint8_t i;
|
uint8_t i;
|
||||||
int num_dp_msi;
|
int num_dp_msi;
|
||||||
|
|
||||||
wlan_minidump_log(soc, sizeof(*soc), soc->ctrl_psoc,
|
|
||||||
WLAN_MD_DP_SOC, "dp_soc");
|
|
||||||
|
|
||||||
soc->hif_handle = hif_handle;
|
|
||||||
|
|
||||||
soc->hal_soc = hif_get_hal_handle(soc->hif_handle);
|
|
||||||
if (!soc->hal_soc)
|
|
||||||
goto fail0;
|
|
||||||
|
|
||||||
if (!QDF_IS_STATUS_SUCCESS(soc->arch_ops.txrx_soc_init(soc))) {
|
|
||||||
dp_err("unable to do target specific init");
|
|
||||||
goto fail0;
|
|
||||||
}
|
|
||||||
|
|
||||||
htt_soc = htt_soc_attach(soc, htc_handle);
|
htt_soc = htt_soc_attach(soc, htc_handle);
|
||||||
if (!htt_soc)
|
if (!htt_soc)
|
||||||
goto fail1;
|
goto fail1;
|
||||||
@@ -4672,8 +4622,6 @@ fail3:
|
|||||||
fail2:
|
fail2:
|
||||||
htt_soc_detach(htt_soc);
|
htt_soc_detach(htt_soc);
|
||||||
fail1:
|
fail1:
|
||||||
soc->arch_ops.txrx_soc_deinit(soc);
|
|
||||||
fail0:
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5301,7 +5249,6 @@ void dp_soc_cfg_attach(struct dp_soc *soc)
|
|||||||
wlan_cfg_num_reo_dest_rings(soc->wlan_cfg_ctx);
|
wlan_cfg_num_reo_dest_rings(soc->wlan_cfg_ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
soc->arch_ops.soc_cfg_attach(soc);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void dp_pdev_set_default_reo(struct dp_pdev *pdev)
|
void dp_pdev_set_default_reo(struct dp_pdev *pdev)
|
||||||
|
@@ -2231,13 +2231,15 @@ enum dp_context_type {
|
|||||||
* @dp_rx_null_q_desc_handle: Handle Null Queue Exception Error
|
* @dp_rx_null_q_desc_handle: Handle Null Queue Exception Error
|
||||||
* @dp_tx_desc_pool_alloc: Allocate arch specific TX descriptor pool
|
* @dp_tx_desc_pool_alloc: Allocate arch specific TX descriptor pool
|
||||||
* @dp_tx_desc_pool_free: Free arch specific TX descriptor pool
|
* @dp_tx_desc_pool_free: Free arch specific TX descriptor pool
|
||||||
|
* @txrx_srng_init: Init txrx srng
|
||||||
*/
|
*/
|
||||||
struct dp_arch_ops {
|
struct dp_arch_ops {
|
||||||
/* INIT/DEINIT Arch Ops */
|
/* INIT/DEINIT Arch Ops */
|
||||||
QDF_STATUS (*txrx_soc_attach)(struct dp_soc *soc,
|
QDF_STATUS (*txrx_soc_attach)(struct dp_soc *soc,
|
||||||
struct cdp_soc_attach_params *params);
|
struct cdp_soc_attach_params *params);
|
||||||
QDF_STATUS (*txrx_soc_detach)(struct dp_soc *soc);
|
QDF_STATUS (*txrx_soc_detach)(struct dp_soc *soc);
|
||||||
QDF_STATUS (*txrx_soc_init)(struct dp_soc *soc);
|
void* (*txrx_soc_init)(struct dp_soc *soc, HTC_HANDLE htc_handle,
|
||||||
|
struct hif_opaque_softc *hif_handle);
|
||||||
QDF_STATUS (*txrx_soc_deinit)(struct dp_soc *soc);
|
QDF_STATUS (*txrx_soc_deinit)(struct dp_soc *soc);
|
||||||
QDF_STATUS (*txrx_soc_srng_alloc)(struct dp_soc *soc);
|
QDF_STATUS (*txrx_soc_srng_alloc)(struct dp_soc *soc);
|
||||||
QDF_STATUS (*txrx_soc_srng_init)(struct dp_soc *soc);
|
QDF_STATUS (*txrx_soc_srng_init)(struct dp_soc *soc);
|
||||||
@@ -2254,8 +2256,9 @@ struct dp_arch_ops {
|
|||||||
void (*txrx_peer_map_detach)(struct dp_soc *soc);
|
void (*txrx_peer_map_detach)(struct dp_soc *soc);
|
||||||
QDF_STATUS (*dp_rxdma_ring_sel_cfg)(struct dp_soc *soc);
|
QDF_STATUS (*dp_rxdma_ring_sel_cfg)(struct dp_soc *soc);
|
||||||
void (*soc_cfg_attach)(struct dp_soc *soc);
|
void (*soc_cfg_attach)(struct dp_soc *soc);
|
||||||
QDF_STATUS (*txrx_peer_setup)(struct dp_soc *soc,
|
QDF_STATUS (*txrx_peer_setup)(struct cdp_soc_t *soc_hdl,
|
||||||
struct dp_peer *peer);
|
uint8_t vdev_id, uint8_t *peer_mac,
|
||||||
|
struct cdp_peer_setup_info *setup_info);
|
||||||
void (*peer_get_reo_hash)(struct dp_vdev *vdev,
|
void (*peer_get_reo_hash)(struct dp_vdev *vdev,
|
||||||
struct cdp_peer_setup_info *setup_info,
|
struct cdp_peer_setup_info *setup_info,
|
||||||
enum cdp_host_reo_dest_ring *reo_dest,
|
enum cdp_host_reo_dest_ring *reo_dest,
|
||||||
@@ -2464,6 +2467,9 @@ struct dp_arch_ops {
|
|||||||
uint32_t num_elem,
|
uint32_t num_elem,
|
||||||
uint8_t pool_id);
|
uint8_t pool_id);
|
||||||
void (*dp_tx_desc_pool_free)(struct dp_soc *soc, uint8_t pool_id);
|
void (*dp_tx_desc_pool_free)(struct dp_soc *soc, uint8_t pool_id);
|
||||||
|
|
||||||
|
QDF_STATUS (*txrx_srng_init)(struct dp_soc *soc, struct dp_srng *srng,
|
||||||
|
int ring_type, int ring_num, int mac_id);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -18,6 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dp_types.h"
|
#include "dp_types.h"
|
||||||
|
#include "dp_rings.h"
|
||||||
#include <dp_internal.h>
|
#include <dp_internal.h>
|
||||||
#include <dp_htt.h>
|
#include <dp_htt.h>
|
||||||
#include "dp_li.h"
|
#include "dp_li.h"
|
||||||
@@ -77,6 +78,8 @@ static void dp_soc_cfg_attach_li(struct dp_soc *soc)
|
|||||||
{
|
{
|
||||||
struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx = soc->wlan_cfg_ctx;
|
struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx = soc->wlan_cfg_ctx;
|
||||||
|
|
||||||
|
dp_soc_cfg_attach(soc);
|
||||||
|
|
||||||
wlan_cfg_set_rx_rel_ring_id(soc_cfg_ctx, WBM2SW_REL_ERR_RING_NUM);
|
wlan_cfg_set_rx_rel_ring_id(soc_cfg_ctx, WBM2SW_REL_ERR_RING_NUM);
|
||||||
|
|
||||||
soc_cfg_ctx->tcl_wbm_map_array = g_tcl_wbm_map_array;
|
soc_cfg_ctx->tcl_wbm_map_array = g_tcl_wbm_map_array;
|
||||||
@@ -112,13 +115,27 @@ static QDF_STATUS dp_soc_detach_li(struct dp_soc *soc)
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static QDF_STATUS dp_soc_init_li(struct dp_soc *soc)
|
static void *dp_soc_init_li(struct dp_soc *soc, HTC_HANDLE htc_handle,
|
||||||
|
struct hif_opaque_softc *hif_handle)
|
||||||
{
|
{
|
||||||
return QDF_STATUS_SUCCESS;
|
wlan_minidump_log(soc, sizeof(*soc), soc->ctrl_psoc,
|
||||||
|
WLAN_MD_DP_SOC, "dp_soc");
|
||||||
|
|
||||||
|
soc->hif_handle = hif_handle;
|
||||||
|
|
||||||
|
soc->hal_soc = hif_get_hal_handle(soc->hif_handle);
|
||||||
|
if (!soc->hal_soc)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return dp_soc_init(soc, htc_handle, hif_handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
static QDF_STATUS dp_soc_deinit_li(struct dp_soc *soc)
|
static QDF_STATUS dp_soc_deinit_li(struct dp_soc *soc)
|
||||||
{
|
{
|
||||||
|
qdf_atomic_set(&soc->cmn_init_done, 0);
|
||||||
|
|
||||||
|
dp_soc_deinit(soc);
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -194,9 +211,11 @@ static QDF_STATUS dp_peer_map_attach_li(struct dp_soc *soc)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static QDF_STATUS dp_peer_setup_li(struct dp_soc *soc, struct dp_peer *peer)
|
static QDF_STATUS dp_peer_setup_li(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
||||||
|
uint8_t *peer_mac,
|
||||||
|
struct cdp_peer_setup_info *setup_info)
|
||||||
{
|
{
|
||||||
return QDF_STATUS_SUCCESS;
|
return dp_peer_setup_wifi3(soc_hdl, vdev_id, peer_mac, setup_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
qdf_size_t dp_get_soc_context_size_li(void)
|
qdf_size_t dp_get_soc_context_size_li(void)
|
||||||
@@ -382,6 +401,13 @@ dp_rxdma_ring_sel_cfg_li(struct dp_soc *soc)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static inline
|
||||||
|
QDF_STATUS dp_srng_init_li(struct dp_soc *soc, struct dp_srng *srng,
|
||||||
|
int ring_type, int ring_num, int mac_id)
|
||||||
|
{
|
||||||
|
return dp_srng_init_idx(soc, srng, ring_type, ring_num, mac_id, 0);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef QCA_DP_ENABLE_TX_COMP_RING4
|
#ifdef QCA_DP_ENABLE_TX_COMP_RING4
|
||||||
static inline
|
static inline
|
||||||
void dp_deinit_txcomp_ring4(struct dp_soc *soc)
|
void dp_deinit_txcomp_ring4(struct dp_soc *soc)
|
||||||
@@ -683,6 +709,7 @@ void dp_initialize_arch_ops_li(struct dp_arch_ops *arch_ops)
|
|||||||
arch_ops->get_reo_qdesc_addr = dp_rx_get_reo_qdesc_addr_li;
|
arch_ops->get_reo_qdesc_addr = dp_rx_get_reo_qdesc_addr_li;
|
||||||
arch_ops->txrx_get_vdev_mcast_param = dp_txrx_get_vdev_mcast_param_li;
|
arch_ops->txrx_get_vdev_mcast_param = dp_txrx_get_vdev_mcast_param_li;
|
||||||
arch_ops->get_hw_link_id = dp_get_hw_link_id_li;
|
arch_ops->get_hw_link_id = dp_get_hw_link_id_li;
|
||||||
|
arch_ops->txrx_srng_init = dp_srng_init_li;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef QCA_DP_TX_HW_SW_NBUF_DESC_PREFETCH
|
#ifdef QCA_DP_TX_HW_SW_NBUF_DESC_PREFETCH
|
||||||
|
Reference in New Issue
Block a user