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
这个提交包含在:
@@ -19,6 +19,7 @@
|
||||
|
||||
#include <wlan_utility.h>
|
||||
#include <dp_internal.h>
|
||||
#include "dp_rings.h"
|
||||
#include <dp_htt.h>
|
||||
#include "dp_be.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)
|
||||
{
|
||||
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);
|
||||
|
||||
@@ -744,6 +746,10 @@ QDF_STATUS dp_peer_setup_ppeds_be(struct dp_soc *soc, struct dp_peer *peer,
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static inline void dp_ppeds_stop_soc_be(struct dp_soc *soc)
|
||||
{
|
||||
}
|
||||
#endif /* WLAN_SUPPORT_PPEDS */
|
||||
|
||||
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);
|
||||
int i = 0;
|
||||
|
||||
qdf_atomic_set(&soc->cmn_init_done, 0);
|
||||
|
||||
dp_ppeds_stop_soc_be(soc);
|
||||
|
||||
dp_tx_deinit_bank_profiles(be_soc);
|
||||
for (i = 0; i < MAX_TXDESC_POOLS; i++)
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
|
||||
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);
|
||||
|
||||
@@ -1042,10 +1076,14 @@ static QDF_STATUS dp_soc_init_be(struct dp_soc *soc)
|
||||
/* write WBM/REO cookie conversion CFG register */
|
||||
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:
|
||||
dp_soc_deinit_be(soc);
|
||||
return qdf_status;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
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
|
||||
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;
|
||||
QDF_STATUS qdf_status = QDF_STATUS_SUCCESS;
|
||||
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
|
||||
struct cdp_ds_vp_params vp_params = {0};
|
||||
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);
|
||||
if (!be_vdev) {
|
||||
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) {
|
||||
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);
|
||||
if (qdf_status == QDF_STATUS_E_NULL_VALUE) {
|
||||
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) {
|
||||
@@ -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]);
|
||||
}
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
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)
|
||||
{
|
||||
return sizeof(struct dp_soc_be);
|
||||
@@ -1654,6 +1735,13 @@ dp_init_near_full_arch_ops_be(struct dp_arch_ops *arch_ops)
|
||||
}
|
||||
#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
|
||||
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_detach = dp_soc_detach_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_init = dp_soc_srng_init_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->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_srng_init = dp_srng_init_be;
|
||||
dp_initialize_arch_ops_be_ipa(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,
|
||||
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);
|
||||
@@ -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)
|
||||
{
|
||||
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
|
||||
|
||||
/**
|
||||
* 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
|
||||
* @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_deinit = dp_pdev_deinit_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
|
||||
.txrx_peer_teardown = dp_peer_teardown_wifi3,
|
||||
#else
|
||||
@@ -11273,7 +11296,8 @@ dp_soc_attach(struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
|
||||
dp_err("wlan_cfg_ctx failed\n");
|
||||
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)) {
|
||||
dp_err("failed to allocate link desc pool banks");
|
||||
@@ -11353,13 +11377,15 @@ fail0:
|
||||
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 hif_opaque_softc *hif_handle,
|
||||
HTC_HANDLE htc_handle, qdf_device_t qdf_osdev,
|
||||
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
|
||||
|
@@ -3393,13 +3393,6 @@ void dp_soc_deinit(void *txrx_soc)
|
||||
struct dp_soc *soc = (struct dp_soc *)txrx_soc;
|
||||
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);
|
||||
|
||||
/* 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
|
||||
|
||||
#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,
|
||||
enum cdp_host_reo_dest_ring *reo_dest,
|
||||
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))
|
||||
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;
|
||||
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);
|
||||
if (!htt_soc)
|
||||
goto fail1;
|
||||
@@ -4672,8 +4622,6 @@ fail3:
|
||||
fail2:
|
||||
htt_soc_detach(htt_soc);
|
||||
fail1:
|
||||
soc->arch_ops.txrx_soc_deinit(soc);
|
||||
fail0:
|
||||
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);
|
||||
}
|
||||
|
||||
soc->arch_ops.soc_cfg_attach(soc);
|
||||
}
|
||||
|
||||
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_tx_desc_pool_alloc: Allocate 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 {
|
||||
/* INIT/DEINIT Arch Ops */
|
||||
QDF_STATUS (*txrx_soc_attach)(struct dp_soc *soc,
|
||||
struct cdp_soc_attach_params *params);
|
||||
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_srng_alloc)(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);
|
||||
QDF_STATUS (*dp_rxdma_ring_sel_cfg)(struct dp_soc *soc);
|
||||
void (*soc_cfg_attach)(struct dp_soc *soc);
|
||||
QDF_STATUS (*txrx_peer_setup)(struct dp_soc *soc,
|
||||
struct dp_peer *peer);
|
||||
QDF_STATUS (*txrx_peer_setup)(struct cdp_soc_t *soc_hdl,
|
||||
uint8_t vdev_id, uint8_t *peer_mac,
|
||||
struct cdp_peer_setup_info *setup_info);
|
||||
void (*peer_get_reo_hash)(struct dp_vdev *vdev,
|
||||
struct cdp_peer_setup_info *setup_info,
|
||||
enum cdp_host_reo_dest_ring *reo_dest,
|
||||
@@ -2464,6 +2467,9 @@ struct dp_arch_ops {
|
||||
uint32_t num_elem,
|
||||
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_rings.h"
|
||||
#include <dp_internal.h>
|
||||
#include <dp_htt.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;
|
||||
|
||||
dp_soc_cfg_attach(soc);
|
||||
|
||||
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;
|
||||
@@ -112,13 +115,27 @@ static QDF_STATUS dp_soc_detach_li(struct dp_soc *soc)
|
||||
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)
|
||||
{
|
||||
qdf_atomic_set(&soc->cmn_init_done, 0);
|
||||
|
||||
dp_soc_deinit(soc);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -194,9 +211,11 @@ static QDF_STATUS dp_peer_map_attach_li(struct dp_soc *soc)
|
||||
}
|
||||
#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)
|
||||
@@ -382,6 +401,13 @@ dp_rxdma_ring_sel_cfg_li(struct dp_soc *soc)
|
||||
}
|
||||
#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
|
||||
static inline
|
||||
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->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->txrx_srng_init = dp_srng_init_li;
|
||||
}
|
||||
|
||||
#ifdef QCA_DP_TX_HW_SW_NBUF_DESC_PREFETCH
|
||||
|
在新工单中引用
屏蔽一个用户