qcacmn: Create new interrupt mask for msi
Created a new interrupt mask for msi chipsets so that both ahb and pci chipsets can work together. Change-Id: I78d1b9641e58f07d1582152c691c5ae29e6ddb03
这个提交包含在:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2016-2020 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "wlan_cfg.h"
|
||||
#include "cfg_ucfg_api.h"
|
||||
#include "hal_api.h"
|
||||
#include "dp_types.h"
|
||||
|
||||
/*
|
||||
* FIX THIS -
|
||||
@@ -91,48 +92,129 @@
|
||||
#define WLAN_CFG_HOST2RXDMA_RING_MASK_3 0x0
|
||||
|
||||
#if defined(WLAN_MAX_PDEVS) && (WLAN_MAX_PDEVS == 1)
|
||||
static const int tx_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
static const int tx_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
WLAN_CFG_TX_RING_MASK_0, 0, 0, 0, 0, 0, 0};
|
||||
|
||||
#ifndef IPA_OFFLOAD
|
||||
static const int rx_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
static const int rx_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
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
|
||||
static const int rx_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
static const int rx_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
0, WLAN_CFG_RX_RING_MASK_0, WLAN_CFG_RX_RING_MASK_1, WLAN_CFG_RX_RING_MASK_2, 0, 0, 0};
|
||||
#endif
|
||||
|
||||
static const int rx_mon_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
static const int rx_mon_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
0, WLAN_CFG_RX_MON_RING_MASK_0, WLAN_CFG_RX_MON_RING_MASK_1, 0, 0, 0, 0};
|
||||
|
||||
static const int host2rxdma_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
static const int host2rxdma_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
0, 0, 0, 0, 0, 0, 0};
|
||||
|
||||
static const int rxdma2host_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
static const int rxdma2host_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
0, 0, 0, 0, 0, WLAN_CFG_RXDMA2HOST_RING_MASK_0, WLAN_CFG_RXDMA2HOST_RING_MASK_1};
|
||||
|
||||
static const int host2rxdma_mon_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
static const int host2rxdma_mon_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
0, 0, 0, 0, 0, 0, 0};
|
||||
|
||||
static const int rxdma2host_mon_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
static const int rxdma2host_mon_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
0, 0, 0, 0, 0, 0, 0};
|
||||
|
||||
static const int rx_err_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
static const int rx_err_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
0, 0, 0, 0, 0, 0, WLAN_CFG_RX_ERR_RING_MASK_0};
|
||||
|
||||
static const int rx_wbm_rel_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
static const int rx_wbm_rel_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
0, 0, 0, 0, 0, 0, WLAN_CFG_RX_WBM_REL_RING_MASK_0};
|
||||
|
||||
static const int reo_status_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
static const int reo_status_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
0, 0, 0, 0, 0, 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
|
||||
static const int tx_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
|
||||
static const int tx_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
WLAN_CFG_TX_RING_MASK_0,
|
||||
WLAN_CFG_TX_RING_MASK_1,
|
||||
WLAN_CFG_TX_RING_MASK_2,
|
||||
WLAN_CFG_TX_RING_MASK_3};
|
||||
|
||||
static const int rx_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
static const int rx_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
WLAN_CFG_RX_RING_MASK_0,
|
||||
WLAN_CFG_RX_RING_MASK_1,
|
||||
WLAN_CFG_RX_RING_MASK_2,
|
||||
WLAN_CFG_RX_RING_MASK_3};
|
||||
|
||||
static const int rx_mon_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
0, 0, 0};
|
||||
|
||||
static const int host2rxdma_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
0, 0, 0, 0};
|
||||
|
||||
static const int rxdma2host_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
0, 0, 0, 0};
|
||||
|
||||
static const int host2rxdma_mon_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_0,
|
||||
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_1,
|
||||
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_2};
|
||||
|
||||
static const int rxdma2host_mon_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_0,
|
||||
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_1,
|
||||
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_2};
|
||||
|
||||
static const int rx_err_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
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};
|
||||
|
||||
static const int rx_wbm_rel_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
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};
|
||||
|
||||
static const int reo_status_ring_mask_msi[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
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};
|
||||
|
||||
static const int tx_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
WLAN_CFG_TX_RING_MASK_0,
|
||||
WLAN_CFG_TX_RING_MASK_1,
|
||||
WLAN_CFG_TX_RING_MASK_2,
|
||||
WLAN_CFG_TX_RING_MASK_3};
|
||||
|
||||
static const int rx_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
@@ -145,7 +227,7 @@ static const int rx_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
WLAN_CFG_RX_RING_MASK_2,
|
||||
WLAN_CFG_RX_RING_MASK_3};
|
||||
|
||||
static const int rx_mon_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
static const int rx_mon_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
@@ -154,19 +236,19 @@ static const int rx_mon_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
WLAN_CFG_RX_MON_RING_MASK_1,
|
||||
WLAN_CFG_RX_MON_RING_MASK_2};
|
||||
|
||||
static const int host2rxdma_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
static const int host2rxdma_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
WLAN_CFG_HOST2RXDMA_RING_MASK_0,
|
||||
WLAN_CFG_HOST2RXDMA_RING_MASK_1,
|
||||
WLAN_CFG_HOST2RXDMA_RING_MASK_2,
|
||||
WLAN_CFG_HOST2RXDMA_RING_MASK_3};
|
||||
|
||||
static const int rxdma2host_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
static const int rxdma2host_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
WLAN_CFG_RXDMA2HOST_RING_MASK_0,
|
||||
WLAN_CFG_RXDMA2HOST_RING_MASK_1,
|
||||
WLAN_CFG_RXDMA2HOST_RING_MASK_2,
|
||||
WLAN_CFG_RXDMA2HOST_RING_MASK_3};
|
||||
|
||||
static const int host2rxdma_mon_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
static const int host2rxdma_mon_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
@@ -175,7 +257,7 @@ static const int host2rxdma_mon_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_1,
|
||||
WLAN_CFG_HOST2RXDMA_MON_RING_MASK_2};
|
||||
|
||||
static const int rxdma2host_mon_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
static const int rxdma2host_mon_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
@@ -184,19 +266,19 @@ static const int rxdma2host_mon_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_1,
|
||||
WLAN_CFG_RXDMA2HOST_MON_RING_MASK_2};
|
||||
|
||||
static const int rx_err_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
static const int rx_err_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
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};
|
||||
|
||||
static const int rx_wbm_rel_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
static const int rx_wbm_rel_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
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};
|
||||
|
||||
static const int reo_status_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
static const int reo_status_ring_mask_integrated[WLAN_CFG_INT_NUM_CONTEXTS] = {
|
||||
WLAN_CFG_REO_STATUS_RING_MASK_0,
|
||||
WLAN_CFG_REO_STATUS_RING_MASK_1,
|
||||
WLAN_CFG_REO_STATUS_RING_MASK_2,
|
||||
@@ -287,6 +369,59 @@ static const uint8_t rx_fst_toeplitz_key[WLAN_CFG_RX_FST_TOEPLITZ_KEYLEN] = {
|
||||
0x6a, 0x42, 0xb7, 0x3b, 0xbe, 0xac, 0x01, 0xfa
|
||||
};
|
||||
|
||||
void wlan_cfg_fill_interrupt_mask(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx,
|
||||
int interrupt_mode) {
|
||||
int i = 0;
|
||||
|
||||
if (interrupt_mode == DP_INTR_INTEGRATED) {
|
||||
for (i = 0; i < WLAN_CFG_INT_NUM_CONTEXTS; i++) {
|
||||
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){
|
||||
for (i = 0; i < WLAN_CFG_INT_NUM_CONTEXTS; i++) {
|
||||
wlan_cfg_ctx->int_tx_ring_mask[i] = tx_ring_mask_msi[i];
|
||||
wlan_cfg_ctx->int_rx_ring_mask[i] = rx_ring_mask_msi[i];
|
||||
wlan_cfg_ctx->int_rx_mon_ring_mask[i] =
|
||||
rx_mon_ring_mask_msi[i];
|
||||
wlan_cfg_ctx->int_rx_err_ring_mask[i] =
|
||||
rx_err_ring_mask_msi[i];
|
||||
wlan_cfg_ctx->int_rx_wbm_rel_ring_mask[i] =
|
||||
rx_wbm_rel_ring_mask_msi[i];
|
||||
wlan_cfg_ctx->int_reo_status_ring_mask[i] =
|
||||
reo_status_ring_mask_msi[i];
|
||||
wlan_cfg_ctx->int_rxdma2host_ring_mask[i] =
|
||||
rxdma2host_ring_mask_msi[i];
|
||||
wlan_cfg_ctx->int_host2rxdma_ring_mask[i] =
|
||||
host2rxdma_ring_mask_msi[i];
|
||||
wlan_cfg_ctx->int_host2rxdma_mon_ring_mask[i] =
|
||||
host2rxdma_mon_ring_mask_msi[i];
|
||||
wlan_cfg_ctx->int_rxdma2host_mon_ring_mask[i] =
|
||||
rxdma2host_mon_ring_mask_msi[i];
|
||||
}
|
||||
} else {
|
||||
qdf_err("Interrupt mode %d", interrupt_mode);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_cfg_soc_attach() - Allocate and prepare SoC configuration
|
||||
* @psoc - Object manager psoc
|
||||
@@ -295,8 +430,6 @@ static const uint8_t rx_fst_toeplitz_key[WLAN_CFG_RX_FST_TOEPLITZ_KEYLEN] = {
|
||||
struct wlan_cfg_dp_soc_ctxt *
|
||||
wlan_cfg_soc_attach(struct cdp_ctrl_objmgr_psoc *psoc)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx =
|
||||
qdf_mem_malloc(sizeof(struct wlan_cfg_dp_soc_ctxt));
|
||||
|
||||
@@ -341,25 +474,6 @@ wlan_cfg_soc_attach(struct cdp_ctrl_objmgr_psoc *psoc)
|
||||
wlan_cfg_ctx->int_timer_threshold_other =
|
||||
cfg_get(psoc, CFG_DP_INT_TIMER_THRESHOLD_OTHER);
|
||||
|
||||
for (i = 0; i < WLAN_CFG_INT_NUM_CONTEXTS; i++) {
|
||||
wlan_cfg_ctx->int_tx_ring_mask[i] = tx_ring_mask[i];
|
||||
wlan_cfg_ctx->int_rx_ring_mask[i] = rx_ring_mask[i];
|
||||
wlan_cfg_ctx->int_rx_mon_ring_mask[i] = rx_mon_ring_mask[i];
|
||||
wlan_cfg_ctx->int_rx_err_ring_mask[i] = rx_err_ring_mask[i];
|
||||
wlan_cfg_ctx->int_rx_wbm_rel_ring_mask[i] =
|
||||
rx_wbm_rel_ring_mask[i];
|
||||
wlan_cfg_ctx->int_reo_status_ring_mask[i] =
|
||||
reo_status_ring_mask[i];
|
||||
wlan_cfg_ctx->int_rxdma2host_ring_mask[i] =
|
||||
rxdma2host_ring_mask[i];
|
||||
wlan_cfg_ctx->int_host2rxdma_ring_mask[i] =
|
||||
host2rxdma_ring_mask[i];
|
||||
wlan_cfg_ctx->int_host2rxdma_mon_ring_mask[i] =
|
||||
host2rxdma_mon_ring_mask[i];
|
||||
wlan_cfg_ctx->int_rxdma2host_mon_ring_mask[i] =
|
||||
rxdma2host_mon_ring_mask[i];
|
||||
}
|
||||
|
||||
/* This is default mapping and can be overridden by HW config
|
||||
* received from FW */
|
||||
wlan_cfg_set_hw_macid(wlan_cfg_ctx, 0, 1);
|
||||
|
在新工单中引用
屏蔽一个用户