qcacmn: Add configurable option for MSI interrupts
Provide multiple combinations to configure the msi interrupts of DP and CE based on the number of MSIs available in the platform. Number of MSIs used for CE and DP can be changed by modifying the MSI assignment table in platform driver. Best possible mask for that MSI is automatically chosen based on predetermined settings. Change-Id: I02b44fb033631d69d97f2d8d2d3f698541d37aad
This commit is contained in:

committed by
Madan Koyyalamudi

parent
2359af8cea
commit
718d6aeece
@@ -1203,10 +1203,10 @@ static QDF_STATUS dp_peer_ast_entry_del_by_pdev(struct cdp_soc_t *soc_handle,
|
|||||||
* Return: the index in the grp_mask array with the ring number.
|
* Return: the index in the grp_mask array with the ring number.
|
||||||
* -QDF_STATUS_E_NOENT if no entry is found
|
* -QDF_STATUS_E_NOENT if no entry is found
|
||||||
*/
|
*/
|
||||||
static int dp_srng_find_ring_in_mask(int ring_num, int *grp_mask)
|
static int dp_srng_find_ring_in_mask(int ring_num, uint8_t *grp_mask)
|
||||||
{
|
{
|
||||||
int ext_group_num;
|
int ext_group_num;
|
||||||
int mask = 1 << ring_num;
|
uint8_t mask = 1 << ring_num;
|
||||||
|
|
||||||
for (ext_group_num = 0; ext_group_num < WLAN_CFG_INT_NUM_CONTEXTS;
|
for (ext_group_num = 0; ext_group_num < WLAN_CFG_INT_NUM_CONTEXTS;
|
||||||
ext_group_num++) {
|
ext_group_num++) {
|
||||||
@@ -1221,7 +1221,7 @@ static int dp_srng_calculate_msi_group(struct dp_soc *soc,
|
|||||||
enum hal_ring_type ring_type,
|
enum hal_ring_type ring_type,
|
||||||
int ring_num)
|
int ring_num)
|
||||||
{
|
{
|
||||||
int *grp_mask;
|
uint8_t *grp_mask;
|
||||||
|
|
||||||
switch (ring_type) {
|
switch (ring_type) {
|
||||||
case WBM2SW_RELEASE:
|
case WBM2SW_RELEASE:
|
||||||
@@ -1304,6 +1304,53 @@ static int dp_srng_calculate_msi_group(struct dp_soc *soc,
|
|||||||
return dp_srng_find_ring_in_mask(ring_num, grp_mask);
|
return dp_srng_find_ring_in_mask(ring_num, grp_mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* dp_get_num_msi_available()- API to get number of MSIs available
|
||||||
|
* @dp_soc: DP soc Handle
|
||||||
|
* @interrupt_mode: Mode of interrupts
|
||||||
|
*
|
||||||
|
* Return: Number of MSIs available or 0 in case of integrated
|
||||||
|
*/
|
||||||
|
#if defined(WLAN_MAX_PDEVS) && (WLAN_MAX_PDEVS == 1)
|
||||||
|
static int dp_get_num_msi_available(struct dp_soc *soc, int interrupt_mode)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
/*
|
||||||
|
* dp_get_num_msi_available()- API to get number of MSIs available
|
||||||
|
* @dp_soc: DP soc Handle
|
||||||
|
* @interrupt_mode: Mode of interrupts
|
||||||
|
*
|
||||||
|
* Return: Number of MSIs available or 0 in case of integrated
|
||||||
|
*/
|
||||||
|
static int dp_get_num_msi_available(struct dp_soc *soc, int interrupt_mode)
|
||||||
|
{
|
||||||
|
int msi_data_count;
|
||||||
|
int msi_data_start;
|
||||||
|
int msi_irq_start;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (interrupt_mode == DP_INTR_INTEGRATED) {
|
||||||
|
return 0;
|
||||||
|
} else if (interrupt_mode == DP_INTR_MSI || interrupt_mode ==
|
||||||
|
DP_INTR_POLL) {
|
||||||
|
ret = pld_get_user_msi_assignment(soc->osdev->dev, "DP",
|
||||||
|
&msi_data_count,
|
||||||
|
&msi_data_start,
|
||||||
|
&msi_irq_start);
|
||||||
|
if (ret) {
|
||||||
|
qdf_err("Unable to get DP MSI assignment %d",
|
||||||
|
interrupt_mode);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
return msi_data_count;
|
||||||
|
}
|
||||||
|
qdf_err("Interrupt mode invalid %d", interrupt_mode);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_is_msi_group_number_invalid() - check msi_group_number valid or not
|
* dp_is_msi_group_number_invalid() - check msi_group_number valid or not
|
||||||
* @msi_group_number: MSI group number.
|
* @msi_group_number: MSI group number.
|
||||||
@@ -3470,7 +3517,7 @@ static uint8_t dp_soc_ring_if_nss_offloaded(struct dp_soc *soc, enum hal_ring_ty
|
|||||||
static void dp_soc_disable_unused_mac_intr_mask(struct dp_soc *soc,
|
static void dp_soc_disable_unused_mac_intr_mask(struct dp_soc *soc,
|
||||||
int mac_num)
|
int mac_num)
|
||||||
{
|
{
|
||||||
int *grp_mask = NULL;
|
uint8_t *grp_mask = NULL;
|
||||||
int group_number;
|
int group_number;
|
||||||
|
|
||||||
grp_mask = &soc->wlan_cfg_ctx->int_host2rxdma_ring_mask[0];
|
grp_mask = &soc->wlan_cfg_ctx->int_host2rxdma_ring_mask[0];
|
||||||
@@ -3503,7 +3550,7 @@ static void dp_soc_disable_unused_mac_intr_mask(struct dp_soc *soc,
|
|||||||
static void dp_soc_reset_intr_mask(struct dp_soc *soc)
|
static void dp_soc_reset_intr_mask(struct dp_soc *soc)
|
||||||
{
|
{
|
||||||
uint8_t j;
|
uint8_t j;
|
||||||
int *grp_mask = NULL;
|
uint8_t *grp_mask = NULL;
|
||||||
int group_number, mask, num_ring;
|
int group_number, mask, num_ring;
|
||||||
|
|
||||||
/* number of tx ring */
|
/* number of tx ring */
|
||||||
@@ -12906,6 +12953,7 @@ void *dp_soc_init(struct dp_soc *soc, HTC_HANDLE htc_handle,
|
|||||||
bool is_monitor_mode = false;
|
bool is_monitor_mode = false;
|
||||||
struct hal_reo_params reo_params;
|
struct hal_reo_params reo_params;
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
int num_dp_msi;
|
||||||
|
|
||||||
wlan_minidump_log(soc, sizeof(*soc), soc->ctrl_psoc,
|
wlan_minidump_log(soc, sizeof(*soc), soc->ctrl_psoc,
|
||||||
WLAN_MD_DP_SOC, "dp_soc");
|
WLAN_MD_DP_SOC, "dp_soc");
|
||||||
@@ -12941,8 +12989,13 @@ void *dp_soc_init(struct dp_soc *soc, HTC_HANDLE htc_handle,
|
|||||||
QDF_GLOBAL_MONITOR_MODE)
|
QDF_GLOBAL_MONITOR_MODE)
|
||||||
is_monitor_mode = true;
|
is_monitor_mode = true;
|
||||||
|
|
||||||
wlan_cfg_fill_interrupt_mask(soc->wlan_cfg_ctx, soc->intr_mode,
|
num_dp_msi = dp_get_num_msi_available(soc, soc->intr_mode);
|
||||||
is_monitor_mode);
|
if (num_dp_msi < 0) {
|
||||||
|
dp_init_err("%pK: dp_interrupt assignment failed", soc);
|
||||||
|
goto fail3;
|
||||||
|
}
|
||||||
|
wlan_cfg_fill_interrupt_mask(soc->wlan_cfg_ctx, num_dp_msi,
|
||||||
|
soc->intr_mode, is_monitor_mode);
|
||||||
|
|
||||||
/* initialize WBM_IDLE_LINK ring */
|
/* initialize WBM_IDLE_LINK ring */
|
||||||
if (dp_hw_link_desc_ring_init(soc)) {
|
if (dp_hw_link_desc_ring_init(soc)) {
|
||||||
|
@@ -103,6 +103,195 @@ static void hif_target_access_log_dump(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This structure contains the interrupt index for each Copy engine
|
||||||
|
* for various number of MSIs available in the system.
|
||||||
|
*/
|
||||||
|
static struct ce_int_assignment ce_int_context[NUM_CE_CONTEXT] = {
|
||||||
|
/* Default configuration */
|
||||||
|
{{ CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(1),
|
||||||
|
CE_INTERRUPT_IDX(2),
|
||||||
|
CE_INTERRUPT_IDX(3),
|
||||||
|
CE_INTERRUPT_IDX(4),
|
||||||
|
CE_INTERRUPT_IDX(5),
|
||||||
|
CE_INTERRUPT_IDX(6),
|
||||||
|
CE_INTERRUPT_IDX(7),
|
||||||
|
CE_INTERRUPT_IDX(8),
|
||||||
|
CE_INTERRUPT_IDX(9),
|
||||||
|
CE_INTERRUPT_IDX(10),
|
||||||
|
CE_INTERRUPT_IDX(11),
|
||||||
|
} },
|
||||||
|
/* Interrupt assignment for 1 MSI combination */
|
||||||
|
{{ CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
} },
|
||||||
|
/* Interrupt assignment for 2 MSI combination */
|
||||||
|
{{ CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(1),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(1),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(1),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
} },
|
||||||
|
/* Interrupt assignment for 3 MSI combination */
|
||||||
|
{{ CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(1),
|
||||||
|
CE_INTERRUPT_IDX(2),
|
||||||
|
CE_INTERRUPT_IDX(1),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(1),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
} },
|
||||||
|
/* Interrupt assignment for 4 MSI combination */
|
||||||
|
{{ CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(1),
|
||||||
|
CE_INTERRUPT_IDX(2),
|
||||||
|
CE_INTERRUPT_IDX(3),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(1),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0)
|
||||||
|
} },
|
||||||
|
/* Interrupt assignment for 5 MSI combination */
|
||||||
|
{{ CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(1),
|
||||||
|
CE_INTERRUPT_IDX(2),
|
||||||
|
CE_INTERRUPT_IDX(3),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(4),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0)
|
||||||
|
} },
|
||||||
|
/* Interrupt assignment for 6 MSI combination */
|
||||||
|
{{ CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(1),
|
||||||
|
CE_INTERRUPT_IDX(2),
|
||||||
|
CE_INTERRUPT_IDX(3),
|
||||||
|
CE_INTERRUPT_IDX(4),
|
||||||
|
CE_INTERRUPT_IDX(5),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0)
|
||||||
|
} },
|
||||||
|
/* Interrupt assignment for 7 MSI combination */
|
||||||
|
{{ CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(1),
|
||||||
|
CE_INTERRUPT_IDX(2),
|
||||||
|
CE_INTERRUPT_IDX(3),
|
||||||
|
CE_INTERRUPT_IDX(4),
|
||||||
|
CE_INTERRUPT_IDX(5),
|
||||||
|
CE_INTERRUPT_IDX(6),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0)
|
||||||
|
} },
|
||||||
|
/* Interrupt assignment for 8 MSI combination */
|
||||||
|
{{ CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(1),
|
||||||
|
CE_INTERRUPT_IDX(2),
|
||||||
|
CE_INTERRUPT_IDX(3),
|
||||||
|
CE_INTERRUPT_IDX(4),
|
||||||
|
CE_INTERRUPT_IDX(5),
|
||||||
|
CE_INTERRUPT_IDX(6),
|
||||||
|
CE_INTERRUPT_IDX(7),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0)
|
||||||
|
} },
|
||||||
|
/* Interrupt assignment for 9 MSI combination */
|
||||||
|
{{ CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(1),
|
||||||
|
CE_INTERRUPT_IDX(2),
|
||||||
|
CE_INTERRUPT_IDX(3),
|
||||||
|
CE_INTERRUPT_IDX(4),
|
||||||
|
CE_INTERRUPT_IDX(5),
|
||||||
|
CE_INTERRUPT_IDX(6),
|
||||||
|
CE_INTERRUPT_IDX(7),
|
||||||
|
CE_INTERRUPT_IDX(8),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0)
|
||||||
|
} },
|
||||||
|
/* Interrupt assignment for 10 MSI combination */
|
||||||
|
{{ CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(1),
|
||||||
|
CE_INTERRUPT_IDX(2),
|
||||||
|
CE_INTERRUPT_IDX(3),
|
||||||
|
CE_INTERRUPT_IDX(4),
|
||||||
|
CE_INTERRUPT_IDX(5),
|
||||||
|
CE_INTERRUPT_IDX(6),
|
||||||
|
CE_INTERRUPT_IDX(7),
|
||||||
|
CE_INTERRUPT_IDX(8),
|
||||||
|
CE_INTERRUPT_IDX(9),
|
||||||
|
CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(0)
|
||||||
|
} },
|
||||||
|
/* Interrupt assignment for 11 MSI combination */
|
||||||
|
{{ CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(1),
|
||||||
|
CE_INTERRUPT_IDX(2),
|
||||||
|
CE_INTERRUPT_IDX(3),
|
||||||
|
CE_INTERRUPT_IDX(4),
|
||||||
|
CE_INTERRUPT_IDX(5),
|
||||||
|
CE_INTERRUPT_IDX(6),
|
||||||
|
CE_INTERRUPT_IDX(7),
|
||||||
|
CE_INTERRUPT_IDX(8),
|
||||||
|
CE_INTERRUPT_IDX(9),
|
||||||
|
CE_INTERRUPT_IDX(10),
|
||||||
|
CE_INTERRUPT_IDX(0)
|
||||||
|
} },
|
||||||
|
/* Interrupt assignment for 12 MSI combination */
|
||||||
|
{{ CE_INTERRUPT_IDX(0),
|
||||||
|
CE_INTERRUPT_IDX(1),
|
||||||
|
CE_INTERRUPT_IDX(2),
|
||||||
|
CE_INTERRUPT_IDX(3),
|
||||||
|
CE_INTERRUPT_IDX(4),
|
||||||
|
CE_INTERRUPT_IDX(5),
|
||||||
|
CE_INTERRUPT_IDX(6),
|
||||||
|
CE_INTERRUPT_IDX(7),
|
||||||
|
CE_INTERRUPT_IDX(8),
|
||||||
|
CE_INTERRUPT_IDX(9),
|
||||||
|
CE_INTERRUPT_IDX(10),
|
||||||
|
CE_INTERRUPT_IDX(11)
|
||||||
|
} },
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
void hif_trigger_dump(struct hif_opaque_softc *hif_ctx,
|
void hif_trigger_dump(struct hif_opaque_softc *hif_ctx,
|
||||||
uint8_t cmd_id, bool start)
|
uint8_t cmd_id, bool start)
|
||||||
@@ -3376,11 +3565,20 @@ void hif_ce_prepare_config(struct hif_softc *scn)
|
|||||||
struct hif_opaque_softc *hif_hdl = GET_HIF_OPAQUE_HDL(scn);
|
struct hif_opaque_softc *hif_hdl = GET_HIF_OPAQUE_HDL(scn);
|
||||||
struct hif_target_info *tgt_info = hif_get_target_info_handle(hif_hdl);
|
struct hif_target_info *tgt_info = hif_get_target_info_handle(hif_hdl);
|
||||||
struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(scn);
|
struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(scn);
|
||||||
|
int ret;
|
||||||
|
int msi_data_count = 0;
|
||||||
|
int msi_data_start = 0;
|
||||||
|
int msi_irq_start = 0;
|
||||||
|
|
||||||
hif_ce_service_init();
|
hif_ce_service_init();
|
||||||
hif_state->ce_services = ce_services_attach(scn);
|
hif_state->ce_services = ce_services_attach(scn);
|
||||||
|
|
||||||
|
ret = pld_get_user_msi_assignment(scn->qdf_dev->dev, "CE",
|
||||||
|
&msi_data_count, &msi_data_start,
|
||||||
|
&msi_irq_start);
|
||||||
|
|
||||||
scn->ce_count = HOST_CE_COUNT;
|
scn->ce_count = HOST_CE_COUNT;
|
||||||
|
scn->int_assignment = &ce_int_context[msi_data_count];
|
||||||
/* if epping is enabled we need to use the epping configuration. */
|
/* if epping is enabled we need to use the epping configuration. */
|
||||||
if (QDF_IS_EPPING_ENABLED(mode)) {
|
if (QDF_IS_EPPING_ENABLED(mode)) {
|
||||||
hif_ce_prepare_epping_config(scn, hif_state);
|
hif_ce_prepare_epping_config(scn, hif_state);
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016-2020 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2016-2021 The Linux Foundation. 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
|
||||||
@@ -719,6 +719,7 @@ static void ce_srng_msi_ring_params_setup(struct hif_softc *scn, uint32_t ce_id,
|
|||||||
uint32_t msi_data_count;
|
uint32_t msi_data_count;
|
||||||
uint32_t msi_irq_start;
|
uint32_t msi_irq_start;
|
||||||
int ret;
|
int ret;
|
||||||
|
int irq_id;
|
||||||
|
|
||||||
ret = pld_get_user_msi_assignment(scn->qdf_dev->dev, "CE",
|
ret = pld_get_user_msi_assignment(scn->qdf_dev->dev, "CE",
|
||||||
&msi_data_count, &msi_data_start,
|
&msi_data_count, &msi_data_start,
|
||||||
@@ -728,15 +729,16 @@ static void ce_srng_msi_ring_params_setup(struct hif_softc *scn, uint32_t ce_id,
|
|||||||
if (ret)
|
if (ret)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
irq_id = scn->int_assignment->msi_idx[ce_id];
|
||||||
pld_get_msi_address(scn->qdf_dev->dev, &addr_low, &addr_high);
|
pld_get_msi_address(scn->qdf_dev->dev, &addr_low, &addr_high);
|
||||||
|
|
||||||
ring_params->msi_addr = addr_low;
|
ring_params->msi_addr = addr_low;
|
||||||
ring_params->msi_addr |= (qdf_dma_addr_t)(((uint64_t)addr_high) << 32);
|
ring_params->msi_addr |= (qdf_dma_addr_t)(((uint64_t)addr_high) << 32);
|
||||||
ring_params->msi_data = (ce_id % msi_data_count) + msi_data_start;
|
ring_params->msi_data = irq_id + msi_data_start;
|
||||||
ring_params->flags |= HAL_SRNG_MSI_INTR;
|
ring_params->flags |= HAL_SRNG_MSI_INTR;
|
||||||
|
|
||||||
hif_debug("ce_id %d, msi_addr %pK, msi_data %d", ce_id,
|
hif_debug("ce_id %d irq_id %d, msi_addr %pK, msi_data %d", ce_id,
|
||||||
(void *)ring_params->msi_addr, ring_params->msi_data);
|
irq_id, (void *)ring_params->msi_addr, ring_params->msi_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ce_srng_src_ring_setup(struct hif_softc *scn, uint32_t ce_id,
|
static void ce_srng_src_ring_setup(struct hif_softc *scn, uint32_t ce_id,
|
||||||
|
@@ -143,6 +143,16 @@
|
|||||||
#define HIF_GET_SOFTC(scn) ((struct hif_softc *)scn)
|
#define HIF_GET_SOFTC(scn) ((struct hif_softc *)scn)
|
||||||
#define GET_HIF_OPAQUE_HDL(scn) ((struct hif_opaque_softc *)scn)
|
#define GET_HIF_OPAQUE_HDL(scn) ((struct hif_opaque_softc *)scn)
|
||||||
|
|
||||||
|
#define NUM_CE_AVAILABLE 12
|
||||||
|
/* Add 1 here to store default configuration in index 0 */
|
||||||
|
#define NUM_CE_CONTEXT (NUM_CE_AVAILABLE + 1)
|
||||||
|
|
||||||
|
#define CE_INTERRUPT_IDX(x) x
|
||||||
|
|
||||||
|
struct ce_int_assignment {
|
||||||
|
uint8_t msi_idx[NUM_CE_AVAILABLE];
|
||||||
|
};
|
||||||
|
|
||||||
struct hif_ce_stats {
|
struct hif_ce_stats {
|
||||||
int hif_pipe_no_resrc_count;
|
int hif_pipe_no_resrc_count;
|
||||||
int ce_ring_delta_fail_count;
|
int ce_ring_delta_fail_count;
|
||||||
@@ -220,6 +230,7 @@ struct hif_softc {
|
|||||||
uint32_t ce_irq_summary;
|
uint32_t ce_irq_summary;
|
||||||
/* No of copy engines supported */
|
/* No of copy engines supported */
|
||||||
unsigned int ce_count;
|
unsigned int ce_count;
|
||||||
|
struct ce_int_assignment *int_assignment;
|
||||||
atomic_t active_tasklet_cnt;
|
atomic_t active_tasklet_cnt;
|
||||||
atomic_t active_grp_tasklet_cnt;
|
atomic_t active_grp_tasklet_cnt;
|
||||||
atomic_t link_suspended;
|
atomic_t link_suspended;
|
||||||
|
@@ -2058,7 +2058,7 @@ end:
|
|||||||
static int hif_ce_srng_msi_free_irq(struct hif_softc *scn)
|
static int hif_ce_srng_msi_free_irq(struct hif_softc *scn)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
int ce_id, irq;
|
int ce_id, irq, irq_id;
|
||||||
uint32_t msi_data_start;
|
uint32_t msi_data_start;
|
||||||
uint32_t msi_data_count;
|
uint32_t msi_data_count;
|
||||||
uint32_t msi_irq_start;
|
uint32_t msi_irq_start;
|
||||||
@@ -2083,13 +2083,14 @@ static int hif_ce_srng_msi_free_irq(struct hif_softc *scn)
|
|||||||
if (!ce_sc->tasklets[ce_id].inited)
|
if (!ce_sc->tasklets[ce_id].inited)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
msi_data = (ce_id % msi_data_count) + msi_irq_start;
|
irq_id = scn->int_assignment->msi_idx[ce_id];
|
||||||
|
msi_data = irq_id + msi_irq_start;
|
||||||
irq = pld_get_msi_irq(scn->qdf_dev->dev, msi_data);
|
irq = pld_get_msi_irq(scn->qdf_dev->dev, msi_data);
|
||||||
|
|
||||||
hif_pci_ce_irq_remove_affinity_hint(irq);
|
hif_pci_ce_irq_remove_affinity_hint(irq);
|
||||||
|
|
||||||
hif_debug("%s: (ce_id %d, msi_data %d, irq %d)", __func__,
|
hif_debug("%s: (ce_id %d, irq_id %d, msi_data %d, irq %d)",
|
||||||
ce_id, msi_data, irq);
|
__func__, irq_id, ce_id, msi_data, irq);
|
||||||
|
|
||||||
pfrm_free_irq(scn->qdf_dev->dev, irq, &ce_sc->tasklets[ce_id]);
|
pfrm_free_irq(scn->qdf_dev->dev, irq, &ce_sc->tasklets[ce_id]);
|
||||||
}
|
}
|
||||||
@@ -2875,6 +2876,7 @@ int hif_ce_msi_configure_irq_by_ceid(struct hif_softc *scn, int ce_id)
|
|||||||
uint32_t msi_data_start;
|
uint32_t msi_data_start;
|
||||||
uint32_t msi_data_count;
|
uint32_t msi_data_count;
|
||||||
unsigned int msi_data;
|
unsigned int msi_data;
|
||||||
|
int irq_id;
|
||||||
uint32_t msi_irq_start;
|
uint32_t msi_irq_start;
|
||||||
struct HIF_CE_state *ce_sc = HIF_GET_CE_STATE(scn);
|
struct HIF_CE_state *ce_sc = HIF_GET_CE_STATE(scn);
|
||||||
struct hif_pci_softc *pci_sc = HIF_GET_PCI_SOFTC(scn);
|
struct hif_pci_softc *pci_sc = HIF_GET_PCI_SOFTC(scn);
|
||||||
@@ -2888,15 +2890,21 @@ int hif_ce_msi_configure_irq_by_ceid(struct hif_softc *scn, int ce_id)
|
|||||||
&msi_data_count, &msi_data_start,
|
&msi_data_count, &msi_data_start,
|
||||||
&msi_irq_start);
|
&msi_irq_start);
|
||||||
|
|
||||||
|
if (ret) {
|
||||||
|
hif_err("Failed to get CE msi config");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
irq_id = scn->int_assignment->msi_idx[ce_id];
|
||||||
/* needs to match the ce_id -> irq data mapping
|
/* needs to match the ce_id -> irq data mapping
|
||||||
* used in the srng parameter configuration
|
* used in the srng parameter configuration
|
||||||
*/
|
*/
|
||||||
pci_slot = hif_get_pci_slot(scn);
|
pci_slot = hif_get_pci_slot(scn);
|
||||||
msi_data = (ce_id % msi_data_count) + msi_irq_start;
|
msi_data = irq_id + msi_irq_start;
|
||||||
irq = pld_get_msi_irq(scn->qdf_dev->dev, msi_data);
|
irq = pld_get_msi_irq(scn->qdf_dev->dev, msi_data);
|
||||||
hif_debug("%s: (ce_id %d, msi_data %d, irq %d tasklet %pK)",
|
hif_debug("%s: (ce_id %d, irq_id %d, msi_data %d, irq %d tasklet %pK)",
|
||||||
__func__, ce_id, msi_data, irq,
|
__func__, ce_id, irq_id, msi_data, irq,
|
||||||
&ce_sc->tasklets[ce_id]);
|
&ce_sc->tasklets[ce_id]);
|
||||||
|
|
||||||
/* implies the ce is also initialized */
|
/* implies the ce is also initialized */
|
||||||
if (!ce_sc->tasklets[ce_id].inited)
|
if (!ce_sc->tasklets[ce_id].inited)
|
||||||
|
@@ -91,235 +91,661 @@
|
|||||||
#define WLAN_CFG_HOST2RXDMA_RING_MASK_2 0x4
|
#define WLAN_CFG_HOST2RXDMA_RING_MASK_2 0x4
|
||||||
#define WLAN_CFG_HOST2RXDMA_RING_MASK_3 0x0
|
#define WLAN_CFG_HOST2RXDMA_RING_MASK_3 0x0
|
||||||
|
|
||||||
|
struct dp_int_mask_assignment {
|
||||||
|
uint8_t tx_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
||||||
|
uint8_t rx_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
||||||
|
uint8_t rx_mon_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
||||||
|
uint8_t host2rxdma_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
||||||
|
uint8_t rxdma2host_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
||||||
|
uint8_t host2rxdma_mon_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
||||||
|
uint8_t rxdma2host_mon_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
||||||
|
uint8_t rx_err_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
||||||
|
uint8_t rx_wbm_rel_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
||||||
|
uint8_t reo_status_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
||||||
|
};
|
||||||
|
|
||||||
#if defined(WLAN_MAX_PDEVS) && (WLAN_MAX_PDEVS == 1)
|
#if defined(WLAN_MAX_PDEVS) && (WLAN_MAX_PDEVS == 1)
|
||||||
static const int tx_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
#define NUM_INTERRUPT_COMBINATIONS 1
|
||||||
WLAN_CFG_TX_RING_MASK_0, 0, 0, 0, 0, 0, 0};
|
/*
|
||||||
|
* This structure contains the best possible mask assignment for a given
|
||||||
|
* number of MSIs available in the system.
|
||||||
|
*/
|
||||||
|
static struct dp_int_mask_assignment dp_mask_assignment[NUM_INTERRUPT_COMBINATIONS] = {
|
||||||
|
/*Default configuration */
|
||||||
|
{
|
||||||
|
/* tx ring masks */
|
||||||
|
{ WLAN_CFG_TX_RING_MASK_0,
|
||||||
|
0, 0, 0, 0, 0, 0},
|
||||||
|
/* rx ring masks */
|
||||||
#ifndef IPA_OFFLOAD
|
#ifndef IPA_OFFLOAD
|
||||||
static const int rx_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
{ 0,
|
||||||
0, WLAN_CFG_RX_RING_MASK_0, WLAN_CFG_RX_RING_MASK_1, WLAN_CFG_RX_RING_MASK_2, WLAN_CFG_RX_RING_MASK_3, 0, 0};
|
WLAN_CFG_RX_RING_MASK_0,
|
||||||
|
WLAN_CFG_RX_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_RING_MASK_2,
|
||||||
|
WLAN_CFG_RX_RING_MASK_3,
|
||||||
|
0, 0},
|
||||||
#else
|
#else
|
||||||
static const int rx_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
{ 0,
|
||||||
0, WLAN_CFG_RX_RING_MASK_0, WLAN_CFG_RX_RING_MASK_1, WLAN_CFG_RX_RING_MASK_2, 0, 0, 0};
|
WLAN_CFG_RX_RING_MASK_0,
|
||||||
|
WLAN_CFG_RX_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_RING_MASK_2,
|
||||||
|
0, 0, 0},
|
||||||
#endif
|
#endif
|
||||||
|
/* rx mon ring masks */
|
||||||
static const int rx_mon_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
{ 0,
|
||||||
0, WLAN_CFG_RX_MON_RING_MASK_0, WLAN_CFG_RX_MON_RING_MASK_1, 0, 0, 0, 0};
|
WLAN_CFG_RX_MON_RING_MASK_0,
|
||||||
|
WLAN_CFG_RX_MON_RING_MASK_1,
|
||||||
static const int host2rxdma_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
0, 0, 0, 0},
|
||||||
0, 0, 0, 0, 0, 0, 0};
|
/* host2rxdma ring masks */
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0},
|
||||||
static const int rxdma2host_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
/* rxdma2host ring masks */
|
||||||
0, 0, 0, 0, 0, WLAN_CFG_RXDMA2HOST_RING_MASK_0, WLAN_CFG_RXDMA2HOST_RING_MASK_1};
|
{ 0, 0, 0, 0, 0,
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_0,
|
||||||
static const int host2rxdma_mon_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
WLAN_CFG_RXDMA2HOST_RING_MASK_1 },
|
||||||
0, 0, 0, 0, 0, 0, 0};
|
/* host2rxdma mon ring masks */
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0},
|
||||||
static const int rxdma2host_mon_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
/* rxdma2host mon ring masks */
|
||||||
0, 0, 0, 0, 0, 0, 0};
|
{ 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rx err ring masks */
|
||||||
static const int rx_err_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
{ 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, WLAN_CFG_RX_ERR_RING_MASK_0};
|
WLAN_CFG_RX_ERR_RING_MASK_0},
|
||||||
|
/* rx wbm rel ring masks */
|
||||||
static const int rx_wbm_rel_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
{ 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, WLAN_CFG_RX_WBM_REL_RING_MASK_0};
|
WLAN_CFG_RX_WBM_REL_RING_MASK_0},
|
||||||
|
/* reo status ring masks */
|
||||||
static const int reo_status_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
{ 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, WLAN_CFG_REO_STATUS_RING_MASK_0};
|
WLAN_CFG_REO_STATUS_RING_MASK_0},
|
||||||
|
},
|
||||||
static const int tx_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
};
|
||||||
0, 0, 0, 0, 0, 0, 0};
|
|
||||||
|
|
||||||
static const int rx_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
|
||||||
0, 0, 0, 0, 0, 0, 0};
|
|
||||||
|
|
||||||
static const int rx_mon_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
|
||||||
0, 0, 0, 0, 0, 0, 0};
|
|
||||||
|
|
||||||
static const int host2rxdma_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
|
||||||
0, 0, 0, 0, 0, 0, 0};
|
|
||||||
|
|
||||||
static const int rxdma2host_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
|
||||||
0, 0, 0, 0, 0, 0, 0};
|
|
||||||
|
|
||||||
static const int host2rxdma_mon_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
|
||||||
0, 0, 0, 0, 0, 0, 0};
|
|
||||||
|
|
||||||
static const int rxdma2host_mon_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
|
||||||
0, 0, 0, 0, 0, 0, 0};
|
|
||||||
|
|
||||||
static const int rx_err_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
|
||||||
0, 0, 0, 0, 0, 0, 0};
|
|
||||||
|
|
||||||
static const int rx_wbm_rel_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
|
||||||
0, 0, 0, 0, 0, 0, 0};
|
|
||||||
|
|
||||||
static const int reo_status_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
|
||||||
0, 0, 0, 0, 0, 0, 0};
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
/* Integrated configuration + 8 possible MSI configurations */
|
||||||
static const int tx_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
#define NUM_INTERRUPT_COMBINATIONS 9
|
||||||
WLAN_CFG_TX_RING_MASK_0,
|
/*
|
||||||
WLAN_CFG_TX_RING_MASK_1,
|
* This structure contains the best possible mask assignment for a given
|
||||||
WLAN_CFG_TX_RING_MASK_2,
|
* number of MSIs available in the system.
|
||||||
WLAN_CFG_TX_RING_MASK_3};
|
*/
|
||||||
|
static struct dp_int_mask_assignment dp_mask_assignment[NUM_INTERRUPT_COMBINATIONS] = {
|
||||||
static const int rx_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
/* Interrupt assignment for integrated configuration */
|
||||||
0,
|
{
|
||||||
0,
|
/* tx ring masks */
|
||||||
0,
|
{ WLAN_CFG_TX_RING_MASK_0,
|
||||||
0,
|
WLAN_CFG_TX_RING_MASK_1,
|
||||||
WLAN_CFG_RX_RING_MASK_0,
|
WLAN_CFG_TX_RING_MASK_2,
|
||||||
WLAN_CFG_RX_RING_MASK_1,
|
WLAN_CFG_TX_RING_MASK_3,
|
||||||
WLAN_CFG_RX_RING_MASK_2,
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
WLAN_CFG_RX_RING_MASK_3};
|
/* rx ring masks */
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0,
|
||||||
static const int rx_mon_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
WLAN_CFG_RX_RING_MASK_0,
|
||||||
0,
|
WLAN_CFG_RX_RING_MASK_1,
|
||||||
0,
|
WLAN_CFG_RX_RING_MASK_2,
|
||||||
0,
|
WLAN_CFG_RX_RING_MASK_3},
|
||||||
WLAN_CFG_RX_MON_RING_MASK_0,
|
/* rx mon ring masks */
|
||||||
WLAN_CFG_RX_MON_RING_MASK_1,
|
{ 0, 0, 0, 0,
|
||||||
WLAN_CFG_RX_MON_RING_MASK_2};
|
WLAN_CFG_RX_MON_RING_MASK_0,
|
||||||
|
WLAN_CFG_RX_MON_RING_MASK_1,
|
||||||
static const int host2rxdma_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
WLAN_CFG_RX_MON_RING_MASK_2,
|
||||||
0,
|
0, 0, 0, 0},
|
||||||
0,
|
/* host2rxdma ring masks */
|
||||||
0,
|
{ WLAN_CFG_HOST2RXDMA_RING_MASK_0,
|
||||||
WLAN_CFG_HOST2RXDMA_RING_MASK_0,
|
WLAN_CFG_HOST2RXDMA_RING_MASK_1,
|
||||||
WLAN_CFG_HOST2RXDMA_RING_MASK_1,
|
WLAN_CFG_HOST2RXDMA_RING_MASK_2,
|
||||||
WLAN_CFG_HOST2RXDMA_RING_MASK_2,
|
WLAN_CFG_HOST2RXDMA_RING_MASK_3,
|
||||||
WLAN_CFG_HOST2RXDMA_RING_MASK_3};
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rxdma2host ring masks */
|
||||||
static const int rxdma2host_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
{ WLAN_CFG_RXDMA2HOST_RING_MASK_0,
|
||||||
0,
|
WLAN_CFG_RXDMA2HOST_RING_MASK_1,
|
||||||
0,
|
WLAN_CFG_RXDMA2HOST_RING_MASK_2,
|
||||||
0,
|
WLAN_CFG_RXDMA2HOST_RING_MASK_3,
|
||||||
WLAN_CFG_RXDMA2HOST_RING_MASK_0,
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
WLAN_CFG_RXDMA2HOST_RING_MASK_1,
|
/* host2rxdma mon ring masks */
|
||||||
WLAN_CFG_RXDMA2HOST_RING_MASK_2,
|
{ 0, 0, 0, 0,
|
||||||
WLAN_CFG_RXDMA2HOST_RING_MASK_3};
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_0,
|
||||||
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_1,
|
||||||
static const int host2rxdma_mon_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_2,
|
||||||
0,
|
0, 0, 0, 0},
|
||||||
0,
|
/* rxdma2host mon ring masks */
|
||||||
0,
|
{ 0, 0, 0, 0,
|
||||||
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_0,
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_0,
|
||||||
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_1,
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_1,
|
||||||
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_2};
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_2,
|
||||||
|
0, 0, 0, 0},
|
||||||
static const int rxdma2host_mon_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
/* rx err ring masks */
|
||||||
0,
|
{ WLAN_CFG_RX_ERR_RING_MASK_0,
|
||||||
0,
|
WLAN_CFG_RX_ERR_RING_MASK_1,
|
||||||
0,
|
WLAN_CFG_RX_ERR_RING_MASK_2,
|
||||||
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_0,
|
WLAN_CFG_RX_ERR_RING_MASK_3,
|
||||||
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_1,
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_2};
|
/* rx wbm rel ring masks */
|
||||||
|
{ WLAN_CFG_RX_WBM_REL_RING_MASK_0,
|
||||||
static const int rx_err_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
WLAN_CFG_RX_WBM_REL_RING_MASK_1,
|
||||||
0,
|
WLAN_CFG_RX_WBM_REL_RING_MASK_2,
|
||||||
0,
|
WLAN_CFG_RX_WBM_REL_RING_MASK_3,
|
||||||
0,
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
WLAN_CFG_RX_ERR_RING_MASK_0,
|
/* reo status ring masks */
|
||||||
WLAN_CFG_RX_ERR_RING_MASK_1,
|
{ WLAN_CFG_REO_STATUS_RING_MASK_0,
|
||||||
WLAN_CFG_RX_ERR_RING_MASK_2,
|
WLAN_CFG_REO_STATUS_RING_MASK_1,
|
||||||
WLAN_CFG_RX_ERR_RING_MASK_3};
|
WLAN_CFG_REO_STATUS_RING_MASK_2,
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_3,
|
||||||
static const int rx_wbm_rel_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
0,
|
},
|
||||||
0,
|
/* Interrupt assignment for 1 MSI combination */
|
||||||
0,
|
{
|
||||||
WLAN_CFG_RX_WBM_REL_RING_MASK_0,
|
/* tx ring masks */
|
||||||
WLAN_CFG_RX_WBM_REL_RING_MASK_1,
|
{ WLAN_CFG_TX_RING_MASK_0 |
|
||||||
WLAN_CFG_RX_WBM_REL_RING_MASK_2,
|
WLAN_CFG_TX_RING_MASK_1 |
|
||||||
WLAN_CFG_RX_WBM_REL_RING_MASK_3};
|
WLAN_CFG_TX_RING_MASK_2 |
|
||||||
|
WLAN_CFG_TX_RING_MASK_3,
|
||||||
static const int reo_status_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
0,
|
/* rx ring masks */
|
||||||
0,
|
{ WLAN_CFG_RX_RING_MASK_0 |
|
||||||
0,
|
WLAN_CFG_RX_RING_MASK_1 |
|
||||||
WLAN_CFG_REO_STATUS_RING_MASK_0,
|
WLAN_CFG_RX_RING_MASK_2 |
|
||||||
WLAN_CFG_REO_STATUS_RING_MASK_1,
|
WLAN_CFG_RX_RING_MASK_3,
|
||||||
WLAN_CFG_REO_STATUS_RING_MASK_2,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
WLAN_CFG_REO_STATUS_RING_MASK_3};
|
/* rx mon ring masks */
|
||||||
|
{ WLAN_CFG_RX_MON_RING_MASK_0 |
|
||||||
static const int tx_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
WLAN_CFG_RX_MON_RING_MASK_1 |
|
||||||
WLAN_CFG_TX_RING_MASK_0,
|
WLAN_CFG_RX_MON_RING_MASK_2,
|
||||||
WLAN_CFG_TX_RING_MASK_1,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
WLAN_CFG_TX_RING_MASK_2,
|
/* host2rxdma ring masks */
|
||||||
WLAN_CFG_TX_RING_MASK_3};
|
{ WLAN_CFG_HOST2RXDMA_RING_MASK_0 |
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_1 |
|
||||||
static const int rx_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
WLAN_CFG_HOST2RXDMA_RING_MASK_2 |
|
||||||
0,
|
WLAN_CFG_HOST2RXDMA_RING_MASK_3,
|
||||||
0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
0,
|
/* rxdma2host ring masks */
|
||||||
0,
|
{ WLAN_CFG_RXDMA2HOST_RING_MASK_0 |
|
||||||
0,
|
WLAN_CFG_RXDMA2HOST_RING_MASK_1 |
|
||||||
0,
|
WLAN_CFG_RXDMA2HOST_RING_MASK_2 |
|
||||||
0,
|
WLAN_CFG_RXDMA2HOST_RING_MASK_3,
|
||||||
WLAN_CFG_RX_RING_MASK_0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
WLAN_CFG_RX_RING_MASK_1,
|
/* host2rxdma mon ring masks */
|
||||||
WLAN_CFG_RX_RING_MASK_2,
|
{ WLAN_CFG_HOST2RXDMA_MON_RING_MASK_0 |
|
||||||
WLAN_CFG_RX_RING_MASK_3};
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_1 |
|
||||||
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_2,
|
||||||
static const int rx_mon_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
0,
|
/* rxdma2host mon ring masks */
|
||||||
0,
|
{ WLAN_CFG_RXDMA2HOST_MON_RING_MASK_0 |
|
||||||
0,
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_1 |
|
||||||
0,
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_2,
|
||||||
WLAN_CFG_RX_MON_RING_MASK_0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
WLAN_CFG_RX_MON_RING_MASK_1,
|
/* rx err ring masks */
|
||||||
WLAN_CFG_RX_MON_RING_MASK_2};
|
{ WLAN_CFG_RX_ERR_RING_MASK_0 |
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_1 |
|
||||||
static const int host2rxdma_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
WLAN_CFG_RX_ERR_RING_MASK_2 |
|
||||||
WLAN_CFG_HOST2RXDMA_RING_MASK_0,
|
WLAN_CFG_RX_ERR_RING_MASK_3,
|
||||||
WLAN_CFG_HOST2RXDMA_RING_MASK_1,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
WLAN_CFG_HOST2RXDMA_RING_MASK_2,
|
/* rx wbm rel ring masks */
|
||||||
WLAN_CFG_HOST2RXDMA_RING_MASK_3};
|
{ WLAN_CFG_RX_WBM_REL_RING_MASK_0 |
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_1 |
|
||||||
static const int rxdma2host_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
WLAN_CFG_RX_WBM_REL_RING_MASK_2 |
|
||||||
WLAN_CFG_RXDMA2HOST_RING_MASK_0,
|
WLAN_CFG_RX_WBM_REL_RING_MASK_3,
|
||||||
WLAN_CFG_RXDMA2HOST_RING_MASK_1,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
WLAN_CFG_RXDMA2HOST_RING_MASK_2,
|
/* reo status ring masks */
|
||||||
WLAN_CFG_RXDMA2HOST_RING_MASK_3};
|
{ WLAN_CFG_REO_STATUS_RING_MASK_0 |
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_1 |
|
||||||
static const int host2rxdma_mon_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
WLAN_CFG_REO_STATUS_RING_MASK_2 |
|
||||||
0,
|
WLAN_CFG_REO_STATUS_RING_MASK_3,
|
||||||
0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
0,
|
},
|
||||||
0,
|
/* Interrupt assignment for 2 MSI combination */
|
||||||
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_0,
|
{
|
||||||
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_1,
|
/* tx ring masks */
|
||||||
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_2};
|
{ WLAN_CFG_TX_RING_MASK_0 |
|
||||||
|
WLAN_CFG_TX_RING_MASK_1,
|
||||||
static const int rxdma2host_mon_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
WLAN_CFG_TX_RING_MASK_2 |
|
||||||
0,
|
WLAN_CFG_TX_RING_MASK_3,
|
||||||
0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
0,
|
/* rx ring masks */
|
||||||
0,
|
{ WLAN_CFG_RX_RING_MASK_0 |
|
||||||
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_0,
|
WLAN_CFG_RX_RING_MASK_1,
|
||||||
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_1,
|
WLAN_CFG_RX_RING_MASK_2 |
|
||||||
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_2};
|
WLAN_CFG_RX_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
static const int rx_err_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
/* rx mon ring masks */
|
||||||
WLAN_CFG_RX_ERR_RING_MASK_0,
|
{ WLAN_CFG_RX_MON_RING_MASK_0 |
|
||||||
WLAN_CFG_RX_ERR_RING_MASK_1,
|
WLAN_CFG_RX_MON_RING_MASK_1,
|
||||||
WLAN_CFG_RX_ERR_RING_MASK_2,
|
WLAN_CFG_RX_MON_RING_MASK_2,
|
||||||
WLAN_CFG_RX_ERR_RING_MASK_3};
|
0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* host2rxdma ring masks */
|
||||||
static const int rx_wbm_rel_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
{ WLAN_CFG_HOST2RXDMA_RING_MASK_0 |
|
||||||
WLAN_CFG_RX_WBM_REL_RING_MASK_0,
|
WLAN_CFG_HOST2RXDMA_RING_MASK_1,
|
||||||
WLAN_CFG_RX_WBM_REL_RING_MASK_1,
|
WLAN_CFG_HOST2RXDMA_RING_MASK_2 |
|
||||||
WLAN_CFG_RX_WBM_REL_RING_MASK_2,
|
WLAN_CFG_HOST2RXDMA_RING_MASK_3,
|
||||||
WLAN_CFG_RX_WBM_REL_RING_MASK_3};
|
0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rxdma2host ring masks */
|
||||||
static const int reo_status_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
{ WLAN_CFG_RXDMA2HOST_RING_MASK_0 |
|
||||||
WLAN_CFG_REO_STATUS_RING_MASK_0,
|
WLAN_CFG_RXDMA2HOST_RING_MASK_1,
|
||||||
WLAN_CFG_REO_STATUS_RING_MASK_1,
|
WLAN_CFG_RXDMA2HOST_RING_MASK_2 |
|
||||||
WLAN_CFG_REO_STATUS_RING_MASK_2,
|
WLAN_CFG_RXDMA2HOST_RING_MASK_3,
|
||||||
WLAN_CFG_REO_STATUS_RING_MASK_3};
|
0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
#endif /* MAX_PDEV_CNT == 1 */
|
/* host2rxdma mon ring masks */
|
||||||
|
{ WLAN_CFG_HOST2RXDMA_MON_RING_MASK_0 |
|
||||||
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_1,
|
||||||
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_2,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rxdma2host mon ring masks */
|
||||||
|
{ WLAN_CFG_RXDMA2HOST_MON_RING_MASK_0 |
|
||||||
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_1,
|
||||||
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_2,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rx err ring masks */
|
||||||
|
{ WLAN_CFG_RX_ERR_RING_MASK_0 |
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_2 |
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rx wbm rel ring masks */
|
||||||
|
{ WLAN_CFG_RX_WBM_REL_RING_MASK_0 |
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_2 |
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* reo status ring masks */
|
||||||
|
{ WLAN_CFG_REO_STATUS_RING_MASK_0 |
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_1,
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_2 |
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
},
|
||||||
|
/* Interrupt assignment for 3 MSI combination */
|
||||||
|
{
|
||||||
|
/* tx ring masks */
|
||||||
|
{ WLAN_CFG_TX_RING_MASK_0 |
|
||||||
|
WLAN_CFG_TX_RING_MASK_1,
|
||||||
|
WLAN_CFG_TX_RING_MASK_2 |
|
||||||
|
WLAN_CFG_TX_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rx ring masks */
|
||||||
|
{ WLAN_CFG_RX_RING_MASK_0 |
|
||||||
|
WLAN_CFG_RX_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_RING_MASK_2 |
|
||||||
|
WLAN_CFG_RX_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rx mon ring masks */
|
||||||
|
{ 0, 0,
|
||||||
|
WLAN_CFG_RX_MON_RING_MASK_0 |
|
||||||
|
WLAN_CFG_RX_MON_RING_MASK_1 |
|
||||||
|
WLAN_CFG_RX_MON_RING_MASK_2,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* host2rxdma ring masks */
|
||||||
|
{ 0, 0,
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_0 |
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_1 |
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_2 |
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rxdma2host ring masks */
|
||||||
|
{ 0, 0,
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_0 |
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_1 |
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_2 |
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* host2rxdma mon ring masks */
|
||||||
|
{ 0, 0,
|
||||||
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_0 |
|
||||||
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_1 |
|
||||||
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_2,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rxdma2host mon ring masks */
|
||||||
|
{ 0, 0,
|
||||||
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_0 |
|
||||||
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_1 |
|
||||||
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_2,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rx err ring masks */
|
||||||
|
{ 0, 0,
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_0 |
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_1 |
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_2 |
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rx wbm rel ring masks */
|
||||||
|
{ 0, 0,
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_0 |
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_1 |
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_2 |
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* reo status ring masks */
|
||||||
|
{ 0, 0,
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_0 |
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_1 |
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_2 |
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
},
|
||||||
|
/* Interrupt assignment for 4 MSI combination */
|
||||||
|
{
|
||||||
|
/* tx ring masks */
|
||||||
|
{ WLAN_CFG_TX_RING_MASK_0,
|
||||||
|
WLAN_CFG_TX_RING_MASK_1,
|
||||||
|
WLAN_CFG_TX_RING_MASK_2,
|
||||||
|
WLAN_CFG_TX_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rx ring masks */
|
||||||
|
{ WLAN_CFG_RX_RING_MASK_0,
|
||||||
|
WLAN_CFG_RX_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_RING_MASK_2,
|
||||||
|
WLAN_CFG_RX_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rx mon ring masks */
|
||||||
|
{ WLAN_CFG_RX_MON_RING_MASK_0,
|
||||||
|
WLAN_CFG_RX_MON_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_MON_RING_MASK_2,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* host2rxdma ring masks */
|
||||||
|
{ WLAN_CFG_HOST2RXDMA_RING_MASK_0,
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_1,
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_2,
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rxdma2host ring masks */
|
||||||
|
{ WLAN_CFG_RXDMA2HOST_RING_MASK_0,
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_1,
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_2,
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* host2rxdma mon ring masks */
|
||||||
|
{ WLAN_CFG_HOST2RXDMA_MON_RING_MASK_0,
|
||||||
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_1,
|
||||||
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_2,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rxdma2host mon ring masks */
|
||||||
|
{ WLAN_CFG_RXDMA2HOST_MON_RING_MASK_0,
|
||||||
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_1,
|
||||||
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_2,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rx err ring masks */
|
||||||
|
{ WLAN_CFG_RX_ERR_RING_MASK_0,
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_2,
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rx wbm rel ring masks */
|
||||||
|
{ WLAN_CFG_RX_WBM_REL_RING_MASK_0,
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_2,
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* reo status ring masks */
|
||||||
|
{ WLAN_CFG_REO_STATUS_RING_MASK_0,
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_1,
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_2,
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
|
},
|
||||||
|
/* Interrupt assignment for 5 MSI combination */
|
||||||
|
{
|
||||||
|
/* tx ring masks */
|
||||||
|
{ WLAN_CFG_TX_RING_MASK_0,
|
||||||
|
WLAN_CFG_TX_RING_MASK_1,
|
||||||
|
WLAN_CFG_TX_RING_MASK_2,
|
||||||
|
WLAN_CFG_TX_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rx ring masks */
|
||||||
|
{ WLAN_CFG_RX_RING_MASK_0,
|
||||||
|
WLAN_CFG_RX_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_RING_MASK_2,
|
||||||
|
WLAN_CFG_RX_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rx mon ring masks */
|
||||||
|
{ 0, 0, 0, 0,
|
||||||
|
WLAN_CFG_RX_MON_RING_MASK_0 |
|
||||||
|
WLAN_CFG_RX_MON_RING_MASK_1 |
|
||||||
|
WLAN_CFG_RX_MON_RING_MASK_2,
|
||||||
|
0, 0, 0, 0, 0, 0},
|
||||||
|
/* host2rxdma ring masks */
|
||||||
|
{ 0, 0, 0, 0,
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_0 |
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_1 |
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_2 |
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0},
|
||||||
|
/* rxdma2host ring masks */
|
||||||
|
{ 0, 0, 0, 0,
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_0 |
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_1 |
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_2 |
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0},
|
||||||
|
/* host2rxdma mon ring masks */
|
||||||
|
{ 0, 0, 0, 0,
|
||||||
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_0 |
|
||||||
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_1 |
|
||||||
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_2,
|
||||||
|
0, 0, 0, 0, 0, 0},
|
||||||
|
/* rxdma2host mon ring masks */
|
||||||
|
{ 0, 0, 0, 0,
|
||||||
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_0 |
|
||||||
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_1 |
|
||||||
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_2,
|
||||||
|
0, 0, 0, 0, 0, 0},
|
||||||
|
/* rx err ring masks */
|
||||||
|
{ 0, 0, 0, 0,
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_0 |
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_1 |
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_2 |
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0},
|
||||||
|
/* rx wbm rel ring masks */
|
||||||
|
{ 0, 0, 0, 0,
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_0 |
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_1 |
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_2 |
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0},
|
||||||
|
/* reo status ring masks */
|
||||||
|
{ 0, 0, 0, 0,
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_0 |
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_1 |
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_2 |
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0},
|
||||||
|
},
|
||||||
|
/* Interrupt assignment for 6 MSI combination */
|
||||||
|
{
|
||||||
|
/* tx ring masks */
|
||||||
|
{ WLAN_CFG_TX_RING_MASK_0,
|
||||||
|
WLAN_CFG_TX_RING_MASK_1,
|
||||||
|
WLAN_CFG_TX_RING_MASK_2,
|
||||||
|
WLAN_CFG_TX_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rx ring masks */
|
||||||
|
{ 0, 0,
|
||||||
|
WLAN_CFG_RX_RING_MASK_0,
|
||||||
|
WLAN_CFG_RX_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_RING_MASK_2,
|
||||||
|
WLAN_CFG_RX_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0},
|
||||||
|
/* rx mon ring masks */
|
||||||
|
{ WLAN_CFG_RX_MON_RING_MASK_0,
|
||||||
|
WLAN_CFG_RX_MON_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_MON_RING_MASK_2,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* host2rxdma ring masks */
|
||||||
|
{ WLAN_CFG_HOST2RXDMA_RING_MASK_0,
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_1,
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_2,
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rxdma2host ring masks */
|
||||||
|
{ WLAN_CFG_RXDMA2HOST_RING_MASK_0,
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_1,
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_2,
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* host2rxdma mon ring masks */
|
||||||
|
{ WLAN_CFG_HOST2RXDMA_MON_RING_MASK_0,
|
||||||
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_1,
|
||||||
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_2,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rxdma2host mon ring masks */
|
||||||
|
{ WLAN_CFG_RXDMA2HOST_MON_RING_MASK_0,
|
||||||
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_1,
|
||||||
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_2,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rx err ring masks */
|
||||||
|
{ WLAN_CFG_RX_ERR_RING_MASK_0,
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_2,
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rx wbm rel ring masks */
|
||||||
|
{ WLAN_CFG_RX_WBM_REL_RING_MASK_0,
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_2,
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* reo status ring masks */
|
||||||
|
{ WLAN_CFG_REO_STATUS_RING_MASK_0,
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_1,
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_2,
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
|
},
|
||||||
|
/* Interrupt assignment for 7 MSI combination */
|
||||||
|
{
|
||||||
|
/* tx ring masks */
|
||||||
|
{ WLAN_CFG_TX_RING_MASK_0,
|
||||||
|
WLAN_CFG_TX_RING_MASK_1,
|
||||||
|
WLAN_CFG_TX_RING_MASK_2,
|
||||||
|
WLAN_CFG_TX_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rx ring masks */
|
||||||
|
{ 0, 0, 0,
|
||||||
|
WLAN_CFG_RX_RING_MASK_0,
|
||||||
|
WLAN_CFG_RX_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_RING_MASK_2,
|
||||||
|
WLAN_CFG_RX_RING_MASK_3,
|
||||||
|
0, 0, 0},
|
||||||
|
/* rx mon ring masks */
|
||||||
|
{ 0, 0, 0,
|
||||||
|
WLAN_CFG_RX_MON_RING_MASK_0,
|
||||||
|
WLAN_CFG_RX_MON_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_MON_RING_MASK_2,
|
||||||
|
0, 0, 0, 0, 0},
|
||||||
|
/* host2rxdma ring masks */
|
||||||
|
{ 0, 0, 0,
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_0,
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_1,
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_2,
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_3,
|
||||||
|
0, 0, 0, 0},
|
||||||
|
/* rxdma2host ring masks */
|
||||||
|
{ 0, 0, 0,
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_0,
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_1,
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_2,
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_3,
|
||||||
|
0, 0, 0, 0},
|
||||||
|
/* host2rxdma mon ring masks */
|
||||||
|
{ 0, 0, 0,
|
||||||
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_0,
|
||||||
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_1,
|
||||||
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_2,
|
||||||
|
0, 0, 0, 0, 0},
|
||||||
|
/* rxdma2host mon ring masks */
|
||||||
|
{ 0, 0, 0,
|
||||||
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_0,
|
||||||
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_1,
|
||||||
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_2,
|
||||||
|
0, 0, 0, 0, 0},
|
||||||
|
/* rx err ring masks */
|
||||||
|
{ 0, 0, 0,
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_0,
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_2,
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_3,
|
||||||
|
0, 0, 0, 0},
|
||||||
|
/* rx wbm rel ring masks */
|
||||||
|
{ 0, 0, 0,
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_0,
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_2,
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_3,
|
||||||
|
0, 0, 0, 0},
|
||||||
|
/* reo status ring masks */
|
||||||
|
{ 0, 0, 0,
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_0,
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_1,
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_2,
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_3,
|
||||||
|
0, 0, 0, 0},
|
||||||
|
},
|
||||||
|
/* Interrupt assignment for 8 MSI combination */
|
||||||
|
{
|
||||||
|
/* tx ring masks */
|
||||||
|
{ WLAN_CFG_TX_RING_MASK_0,
|
||||||
|
WLAN_CFG_TX_RING_MASK_1,
|
||||||
|
WLAN_CFG_TX_RING_MASK_2,
|
||||||
|
WLAN_CFG_TX_RING_MASK_3,
|
||||||
|
0, 0, 0, 0, 0, 0, 0},
|
||||||
|
/* rx ring masks */
|
||||||
|
{ 0, 0, 0, 0,
|
||||||
|
WLAN_CFG_RX_RING_MASK_0,
|
||||||
|
WLAN_CFG_RX_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_RING_MASK_2,
|
||||||
|
WLAN_CFG_RX_RING_MASK_3,
|
||||||
|
0, 0, 0},
|
||||||
|
/* rx mon ring masks */
|
||||||
|
{ 0, 0, 0,
|
||||||
|
WLAN_CFG_RX_MON_RING_MASK_0,
|
||||||
|
WLAN_CFG_RX_MON_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_MON_RING_MASK_2,
|
||||||
|
0, 0, 0, 0, 0},
|
||||||
|
/* host2rxdma ring masks */
|
||||||
|
{ 0, 0, 0,
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_0,
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_1,
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_2,
|
||||||
|
WLAN_CFG_HOST2RXDMA_RING_MASK_3,
|
||||||
|
0, 0, 0, 0},
|
||||||
|
/* rxdma2host ring masks */
|
||||||
|
{ 0, 0, 0,
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_0,
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_1,
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_2,
|
||||||
|
WLAN_CFG_RXDMA2HOST_RING_MASK_3,
|
||||||
|
0, 0, 0, 0},
|
||||||
|
/* host2rxdma mon ring masks */
|
||||||
|
{ 0, 0, 0,
|
||||||
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_0,
|
||||||
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_1,
|
||||||
|
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_2,
|
||||||
|
0, 0, 0, 0, 0},
|
||||||
|
/* rxdma2host mon ring masks */
|
||||||
|
{ 0, 0, 0,
|
||||||
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_0,
|
||||||
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_1,
|
||||||
|
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_2,
|
||||||
|
0, 0, 0, 0, 0},
|
||||||
|
/* rx err ring masks */
|
||||||
|
{ 0, 0, 0,
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_0,
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_2,
|
||||||
|
WLAN_CFG_RX_ERR_RING_MASK_3,
|
||||||
|
0, 0, 0, 0},
|
||||||
|
/* rx wbm rel ring masks */
|
||||||
|
{ 0, 0, 0,
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_0,
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_1,
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_2,
|
||||||
|
WLAN_CFG_RX_WBM_REL_RING_MASK_3,
|
||||||
|
0, 0, 0, 0},
|
||||||
|
/* reo status ring masks */
|
||||||
|
{ 0, 0, 0,
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_0,
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_1,
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_2,
|
||||||
|
WLAN_CFG_REO_STATUS_RING_MASK_3,
|
||||||
|
0, 0, 0, 0},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* g_wlan_srng_cfg[] - Per ring_type specific configuration
|
* g_wlan_srng_cfg[] - Per ring_type specific configuration
|
||||||
@@ -405,65 +831,60 @@ static const uint8_t rx_fst_toeplitz_key[WLAN_CFG_RX_FST_TOEPLITZ_KEYLEN] = {
|
|||||||
0x6a, 0x42, 0xb7, 0x3b, 0xbe, 0xac, 0x01, 0xfa
|
0x6a, 0x42, 0xb7, 0x3b, 0xbe, 0xac, 0x01, 0xfa
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_cfg_fill_interrupt_mask() - set interrupt mask
|
||||||
|
*
|
||||||
|
* @wlan_cfg_dp_soc_ctxt: soc configuration context
|
||||||
|
* @num_dp_msi: Number of DP interrupts available (0 for integrated)
|
||||||
|
* @interrupt_mode: Type of interrupt
|
||||||
|
* @is_monitor_mode: is monitor mode enabled
|
||||||
|
*
|
||||||
|
* Return: void
|
||||||
|
*/
|
||||||
void wlan_cfg_fill_interrupt_mask(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx,
|
void wlan_cfg_fill_interrupt_mask(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx,
|
||||||
|
int num_dp_msi,
|
||||||
int interrupt_mode,
|
int interrupt_mode,
|
||||||
bool is_monitor_mode) {
|
bool is_monitor_mode) {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
int interrupt_index = 0;
|
||||||
|
|
||||||
if (interrupt_mode == DP_INTR_INTEGRATED) {
|
if(interrupt_mode == DP_INTR_INTEGRATED) {
|
||||||
for (i = 0; i < WLAN_CFG_INT_NUM_CONTEXTS; i++) {
|
interrupt_index = 0;
|
||||||
wlan_cfg_ctx->int_tx_ring_mask[i] =
|
|
||||||
tx_ring_mask_integrated[i];
|
|
||||||
wlan_cfg_ctx->int_rx_ring_mask[i] =
|
|
||||||
rx_ring_mask_integrated[i];
|
|
||||||
wlan_cfg_ctx->int_rx_mon_ring_mask[i] =
|
|
||||||
rx_mon_ring_mask_integrated[i];
|
|
||||||
wlan_cfg_ctx->int_rx_err_ring_mask[i] =
|
|
||||||
rx_err_ring_mask_integrated[i];
|
|
||||||
wlan_cfg_ctx->int_rx_wbm_rel_ring_mask[i] =
|
|
||||||
rx_wbm_rel_ring_mask_integrated[i];
|
|
||||||
wlan_cfg_ctx->int_reo_status_ring_mask[i] =
|
|
||||||
reo_status_ring_mask_integrated[i];
|
|
||||||
wlan_cfg_ctx->int_rxdma2host_ring_mask[i] =
|
|
||||||
rxdma2host_ring_mask_integrated[i];
|
|
||||||
wlan_cfg_ctx->int_host2rxdma_ring_mask[i] =
|
|
||||||
host2rxdma_ring_mask_integrated[i];
|
|
||||||
wlan_cfg_ctx->int_host2rxdma_mon_ring_mask[i] =
|
|
||||||
host2rxdma_mon_ring_mask_integrated[i];
|
|
||||||
wlan_cfg_ctx->int_rxdma2host_mon_ring_mask[i] =
|
|
||||||
rxdma2host_mon_ring_mask_integrated[i];
|
|
||||||
}
|
|
||||||
} else if (interrupt_mode == DP_INTR_MSI || interrupt_mode ==
|
} else if (interrupt_mode == DP_INTR_MSI || interrupt_mode ==
|
||||||
DP_INTR_POLL) {
|
DP_INTR_POLL) {
|
||||||
for (i = 0; i < WLAN_CFG_INT_NUM_CONTEXTS; i++) {
|
interrupt_index = num_dp_msi;
|
||||||
wlan_cfg_ctx->int_tx_ring_mask[i] = tx_ring_mask_msi[i];
|
} else {
|
||||||
|
qdf_err("Interrupt mode %d", interrupt_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (i = 0; i < WLAN_CFG_INT_NUM_CONTEXTS; i++) {
|
||||||
|
wlan_cfg_ctx->int_tx_ring_mask[i] =
|
||||||
|
dp_mask_assignment[interrupt_index].tx_ring_mask[i];
|
||||||
wlan_cfg_ctx->int_rx_mon_ring_mask[i] =
|
wlan_cfg_ctx->int_rx_mon_ring_mask[i] =
|
||||||
rx_mon_ring_mask_msi[i];
|
dp_mask_assignment[interrupt_index].rx_mon_ring_mask[i];
|
||||||
wlan_cfg_ctx->int_rx_err_ring_mask[i] =
|
wlan_cfg_ctx->int_rx_err_ring_mask[i] =
|
||||||
rx_err_ring_mask_msi[i];
|
dp_mask_assignment[interrupt_index].rx_err_ring_mask[i];
|
||||||
wlan_cfg_ctx->int_rx_wbm_rel_ring_mask[i] =
|
wlan_cfg_ctx->int_rx_wbm_rel_ring_mask[i] =
|
||||||
rx_wbm_rel_ring_mask_msi[i];
|
dp_mask_assignment[interrupt_index].rx_wbm_rel_ring_mask[i];
|
||||||
wlan_cfg_ctx->int_reo_status_ring_mask[i] =
|
wlan_cfg_ctx->int_reo_status_ring_mask[i] =
|
||||||
reo_status_ring_mask_msi[i];
|
dp_mask_assignment[interrupt_index].reo_status_ring_mask[i];
|
||||||
if (is_monitor_mode) {
|
if (is_monitor_mode) {
|
||||||
wlan_cfg_ctx->int_rx_ring_mask[i] = 0;
|
wlan_cfg_ctx->int_rx_ring_mask[i] = 0;
|
||||||
wlan_cfg_ctx->int_rxdma2host_ring_mask[i] = 0;
|
wlan_cfg_ctx->int_rxdma2host_ring_mask[i] = 0;
|
||||||
} else {
|
} else {
|
||||||
wlan_cfg_ctx->int_rx_ring_mask[i] =
|
wlan_cfg_ctx->int_rx_ring_mask[i] =
|
||||||
rx_ring_mask_msi[i];
|
dp_mask_assignment[interrupt_index].rx_ring_mask[i];
|
||||||
wlan_cfg_ctx->int_rxdma2host_ring_mask[i] =
|
wlan_cfg_ctx->int_rxdma2host_ring_mask[i] =
|
||||||
rxdma2host_ring_mask_msi[i];
|
dp_mask_assignment[interrupt_index].rxdma2host_ring_mask[i];
|
||||||
}
|
}
|
||||||
wlan_cfg_ctx->int_host2rxdma_ring_mask[i] =
|
wlan_cfg_ctx->int_host2rxdma_ring_mask[i] =
|
||||||
host2rxdma_ring_mask_msi[i];
|
dp_mask_assignment[interrupt_index].host2rxdma_ring_mask[i];
|
||||||
wlan_cfg_ctx->int_host2rxdma_mon_ring_mask[i] =
|
wlan_cfg_ctx->int_host2rxdma_mon_ring_mask[i] =
|
||||||
host2rxdma_mon_ring_mask_msi[i];
|
dp_mask_assignment[interrupt_index].host2rxdma_mon_ring_mask[i];
|
||||||
wlan_cfg_ctx->int_rxdma2host_mon_ring_mask[i] =
|
wlan_cfg_ctx->int_rxdma2host_mon_ring_mask[i] =
|
||||||
rxdma2host_mon_ring_mask_msi[i];
|
dp_mask_assignment[interrupt_index].rxdma2host_mon_ring_mask[i];
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
qdf_err("Interrupt mode %d", interrupt_mode);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -225,17 +225,17 @@ struct wlan_cfg_dp_soc_ctxt {
|
|||||||
int tx_ring_size;
|
int tx_ring_size;
|
||||||
int tx_comp_ring_size;
|
int tx_comp_ring_size;
|
||||||
int tx_comp_ring_size_nss;
|
int tx_comp_ring_size_nss;
|
||||||
int int_tx_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
uint8_t int_tx_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
||||||
int int_rx_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
uint8_t int_rx_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
||||||
int int_rx_mon_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
uint8_t int_rx_mon_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
||||||
int int_host2rxdma_mon_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
uint8_t int_host2rxdma_mon_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
||||||
int int_rxdma2host_mon_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
uint8_t int_rxdma2host_mon_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
||||||
int int_ce_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
uint8_t int_ce_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
||||||
int int_rx_err_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
uint8_t int_rx_err_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
||||||
int int_rx_wbm_rel_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
uint8_t int_rx_wbm_rel_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
||||||
int int_reo_status_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
uint8_t int_reo_status_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
||||||
int int_rxdma2host_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
uint8_t int_rxdma2host_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
||||||
int int_host2rxdma_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
uint8_t int_host2rxdma_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
|
||||||
int hw_macid[MAX_PDEV_CNT];
|
int hw_macid[MAX_PDEV_CNT];
|
||||||
int hw_macid_pdev_id_map[MAX_NUM_LMAC_HW];
|
int hw_macid_pdev_id_map[MAX_NUM_LMAC_HW];
|
||||||
int base_hw_macid;
|
int base_hw_macid;
|
||||||
@@ -1412,13 +1412,15 @@ wlan_cfg_is_tx_per_pkt_vdev_id_check_enabled(struct wlan_cfg_dp_soc_ctxt *cfg);
|
|||||||
* wlan_cfg_fill_interrupt_mask() - set interrupt mask
|
* wlan_cfg_fill_interrupt_mask() - set interrupt mask
|
||||||
*
|
*
|
||||||
* @wlan_cfg_dp_soc_ctxt: soc configuration context
|
* @wlan_cfg_dp_soc_ctxt: soc configuration context
|
||||||
* @interrupt_mode: interrupt_mode: MSI/LEGACY
|
* @num_dp_msi: Number of DP interrupts available (0 for integrated)
|
||||||
|
* @interrupt_mode: Type of interrupt
|
||||||
* @is_monitor_mode: is monitor mode enabled
|
* @is_monitor_mode: is monitor mode enabled
|
||||||
*
|
*
|
||||||
* Return: void
|
* Return: void
|
||||||
*/
|
*/
|
||||||
void wlan_cfg_fill_interrupt_mask(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx,
|
void wlan_cfg_fill_interrupt_mask(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx,
|
||||||
int interrupt_mode, bool is_monitor_mode);
|
int num_dp_msi, int interrupt_mode,
|
||||||
|
bool is_monitor_mode);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wlan_cfg_is_rx_fisa_enabled() - Get Rx FISA enabled flag
|
* wlan_cfg_is_rx_fisa_enabled() - Get Rx FISA enabled flag
|
||||||
|
Reference in New Issue
Block a user