mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 15:11:48 -04:00
qcacld-3.0: wdi2.0 feature enable, dp hif
wdi20 enable implementation for hsoffload. Large physical address support and wdi20 interface propagate to IPA. This is part of HIF and DP. Change-Id: If898f03a8a75689c98c70d1e55910f476d8fe329 CRs-fixed: 941041
This commit is contained in:
parent
3c86037150
commit
8e07361afb
15 changed files with 474 additions and 217 deletions
|
|
@ -471,8 +471,12 @@ void htt_htc_disable_aspm(void)
|
|||
}
|
||||
|
||||
#ifdef IPA_OFFLOAD
|
||||
/*
|
||||
* Attach resource for micro controller data path
|
||||
/**
|
||||
* htt_ipa_uc_attach() - Allocate UC data path resources
|
||||
* @pdev: handle to the HTT instance
|
||||
*
|
||||
* Return: 0 success
|
||||
* none 0 fail
|
||||
*/
|
||||
int htt_ipa_uc_attach(struct htt_pdev_t *pdev)
|
||||
{
|
||||
|
|
@ -504,6 +508,12 @@ int htt_ipa_uc_attach(struct htt_pdev_t *pdev)
|
|||
return 0; /* success */
|
||||
}
|
||||
|
||||
/**
|
||||
* htt_ipa_uc_attach() - Remove UC data path resources
|
||||
* @pdev: handle to the HTT instance
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void htt_ipa_uc_detach(struct htt_pdev_t *pdev)
|
||||
{
|
||||
/* TX IPA micro controller detach */
|
||||
|
|
@ -513,32 +523,63 @@ void htt_ipa_uc_detach(struct htt_pdev_t *pdev)
|
|||
htt_rx_ipa_uc_detach(pdev);
|
||||
}
|
||||
|
||||
/*
|
||||
* Distribute micro controller resource to control module
|
||||
/**
|
||||
* htt_ipa_uc_get_resource() - Get uc resource from htt and lower layer
|
||||
* @pdev: handle to the HTT instance
|
||||
* @ce_sr_base_paddr: copy engine source ring base physical address
|
||||
* @ce_sr_ring_size: copy engine source ring size
|
||||
* @ce_reg_paddr: copy engine register physical address
|
||||
* @tx_comp_ring_base_paddr: tx comp ring base physical address
|
||||
* @tx_comp_ring_size: tx comp ring size
|
||||
* @tx_num_alloc_buffer: number of allocated tx buffer
|
||||
* @rx_rdy_ring_base_paddr: rx ready ring base physical address
|
||||
* @rx_rdy_ring_size: rx ready ring size
|
||||
* @rx_proc_done_idx_paddr: rx process done index physical address
|
||||
* @rx_proc_done_idx_vaddr: rx process done index virtual address
|
||||
* @rx2_rdy_ring_base_paddr: rx done ring base physical address
|
||||
* @rx2_rdy_ring_size: rx done ring size
|
||||
* @rx2_proc_done_idx_paddr: rx done index physical address
|
||||
* @rx2_proc_done_idx_vaddr: rx done index virtual address
|
||||
*
|
||||
* Return: 0 success
|
||||
*/
|
||||
int
|
||||
htt_ipa_uc_get_resource(htt_pdev_handle pdev,
|
||||
uint32_t *ce_sr_base_paddr,
|
||||
cdf_dma_addr_t *ce_sr_base_paddr,
|
||||
uint32_t *ce_sr_ring_size,
|
||||
cdf_dma_addr_t *ce_reg_paddr,
|
||||
uint32_t *tx_comp_ring_base_paddr,
|
||||
cdf_dma_addr_t *tx_comp_ring_base_paddr,
|
||||
uint32_t *tx_comp_ring_size,
|
||||
uint32_t *tx_num_alloc_buffer,
|
||||
uint32_t *rx_rdy_ring_base_paddr,
|
||||
cdf_dma_addr_t *rx_rdy_ring_base_paddr,
|
||||
uint32_t *rx_rdy_ring_size,
|
||||
uint32_t *rx_proc_done_idx_paddr)
|
||||
cdf_dma_addr_t *rx_proc_done_idx_paddr,
|
||||
void **rx_proc_done_idx_vaddr,
|
||||
cdf_dma_addr_t *rx2_rdy_ring_base_paddr,
|
||||
uint32_t *rx2_rdy_ring_size,
|
||||
cdf_dma_addr_t *rx2_proc_done_idx_paddr,
|
||||
void **rx2_proc_done_idx_vaddr)
|
||||
{
|
||||
/* Release allocated resource to client */
|
||||
*tx_comp_ring_base_paddr =
|
||||
(uint32_t) pdev->ipa_uc_tx_rsc.tx_comp_base.paddr;
|
||||
pdev->ipa_uc_tx_rsc.tx_comp_base.paddr;
|
||||
*tx_comp_ring_size =
|
||||
(uint32_t) ol_cfg_ipa_uc_tx_max_buf_cnt(pdev->ctrl_pdev);
|
||||
*tx_num_alloc_buffer = (uint32_t) pdev->ipa_uc_tx_rsc.alloc_tx_buf_cnt;
|
||||
*rx_rdy_ring_base_paddr =
|
||||
(uint32_t) pdev->ipa_uc_rx_rsc.rx_ind_ring_base.paddr;
|
||||
pdev->ipa_uc_rx_rsc.rx_ind_ring_base.paddr;
|
||||
*rx_rdy_ring_size = (uint32_t) pdev->ipa_uc_rx_rsc.rx_ind_ring_size;
|
||||
*rx_proc_done_idx_paddr =
|
||||
(uint32_t) pdev->ipa_uc_rx_rsc.rx_ipa_prc_done_idx.paddr;
|
||||
pdev->ipa_uc_rx_rsc.rx_ipa_prc_done_idx.paddr;
|
||||
*rx_proc_done_idx_vaddr =
|
||||
(void *)pdev->ipa_uc_rx_rsc.rx_ipa_prc_done_idx.vaddr;
|
||||
*rx2_rdy_ring_base_paddr =
|
||||
pdev->ipa_uc_rx_rsc.rx2_ind_ring_base.paddr;
|
||||
*rx2_rdy_ring_size = (uint32_t) pdev->ipa_uc_rx_rsc.rx2_ind_ring_size;
|
||||
*rx2_proc_done_idx_paddr =
|
||||
pdev->ipa_uc_rx_rsc.rx2_ipa_prc_done_idx.paddr;
|
||||
*rx2_proc_done_idx_vaddr =
|
||||
(void *)pdev->ipa_uc_rx_rsc.rx2_ipa_prc_done_idx.vaddr;
|
||||
|
||||
/* Get copy engine, bus resource */
|
||||
htc_ipa_get_ce_resource(pdev->htc_pdev,
|
||||
|
|
@ -548,13 +589,18 @@ htt_ipa_uc_get_resource(htt_pdev_handle pdev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Distribute micro controller doorbell register to firmware
|
||||
/**
|
||||
* htt_ipa_uc_set_doorbell_paddr() - Propagate IPA doorbell address
|
||||
* @pdev: handle to the HTT instance
|
||||
* @ipa_uc_tx_doorbell_paddr: TX doorbell base physical address
|
||||
* @ipa_uc_rx_doorbell_paddr: RX doorbell base physical address
|
||||
*
|
||||
* Return: 0 success
|
||||
*/
|
||||
int
|
||||
htt_ipa_uc_set_doorbell_paddr(htt_pdev_handle pdev,
|
||||
uint32_t ipa_uc_tx_doorbell_paddr,
|
||||
uint32_t ipa_uc_rx_doorbell_paddr)
|
||||
cdf_dma_addr_t ipa_uc_tx_doorbell_paddr,
|
||||
cdf_dma_addr_t ipa_uc_rx_doorbell_paddr)
|
||||
{
|
||||
pdev->ipa_uc_tx_rsc.tx_comp_idx_paddr = ipa_uc_tx_doorbell_paddr;
|
||||
pdev->ipa_uc_rx_rsc.rx_rdy_idx_paddr = ipa_uc_rx_doorbell_paddr;
|
||||
|
|
|
|||
|
|
@ -641,6 +641,13 @@ htt_h2t_aggr_cfg_msg(struct htt_pdev_t *pdev,
|
|||
}
|
||||
|
||||
#ifdef IPA_OFFLOAD
|
||||
/**
|
||||
* htt_h2t_ipa_uc_rsc_cfg_msg() - Send WDI IPA config message to firmware
|
||||
* @pdev: handle to the HTT instance
|
||||
*
|
||||
* Return: 0 success
|
||||
* A_NO_MEMORY No memory fail
|
||||
*/
|
||||
int htt_h2t_ipa_uc_rsc_cfg_msg(struct htt_pdev_t *pdev)
|
||||
{
|
||||
struct htt_htc_pkt *pkt;
|
||||
|
|
@ -649,7 +656,7 @@ int htt_h2t_ipa_uc_rsc_cfg_msg(struct htt_pdev_t *pdev)
|
|||
|
||||
pkt = htt_htc_pkt_alloc(pdev);
|
||||
if (!pkt)
|
||||
return A_NO_MEMORY;
|
||||
return -A_NO_MEMORY;
|
||||
|
||||
/* show that this is not a tx frame download
|
||||
* (not required, but helpful)
|
||||
|
|
@ -663,7 +670,7 @@ int htt_h2t_ipa_uc_rsc_cfg_msg(struct htt_pdev_t *pdev)
|
|||
false);
|
||||
if (!msg) {
|
||||
htt_htc_pkt_free(pdev, pkt);
|
||||
return A_NO_MEMORY;
|
||||
return -A_NO_MEMORY;
|
||||
}
|
||||
/* set the length of the message */
|
||||
cdf_nbuf_put_tail(msg, HTT_WDI_IPA_CFG_SZ);
|
||||
|
|
@ -756,7 +763,7 @@ int htt_h2t_ipa_uc_rsc_cfg_msg(struct htt_pdev_t *pdev)
|
|||
msg_word++;
|
||||
*msg_word = 0;
|
||||
HTT_WDI_IPA_CFG_RX_RING2_RD_IDX_ADDR_LO_SET(*msg_word,
|
||||
(unsigned int)pdev->ipa_uc_rx_rsc.rx_ipa_prc_done_idx.paddr);
|
||||
(unsigned int)pdev->ipa_uc_rx_rsc.rx2_ipa_prc_done_idx.paddr);
|
||||
msg_word++;
|
||||
*msg_word = 0;
|
||||
HTT_WDI_IPA_CFG_RX_RING2_RD_IDX_ADDR_HI_SET(*msg_word,
|
||||
|
|
@ -765,15 +772,12 @@ int htt_h2t_ipa_uc_rsc_cfg_msg(struct htt_pdev_t *pdev)
|
|||
msg_word++;
|
||||
*msg_word = 0;
|
||||
HTT_WDI_IPA_CFG_RX_RING2_WR_IDX_ADDR_LO_SET(*msg_word,
|
||||
(unsigned int)pdev->ipa_uc_rx_rsc.rx2_rdy_idx_paddr);
|
||||
(unsigned int)pdev->ipa_uc_rx_rsc.rx2_ipa_prc_done_idx.paddr);
|
||||
msg_word++;
|
||||
*msg_word = 0;
|
||||
HTT_WDI_IPA_CFG_RX_RING2_WR_IDX_ADDR_HI_SET(*msg_word,
|
||||
0);
|
||||
|
||||
cdf_trace_hex_dump(CDF_MODULE_ID_HTT, CDF_TRACE_LEVEL_FATAL,
|
||||
(void *)cdf_nbuf_data(msg), 40);
|
||||
|
||||
SET_HTC_PACKET_INFO_TX(&pkt->htc_pkt,
|
||||
htt_h2t_send_complete_free_netbuf,
|
||||
cdf_nbuf_data(msg),
|
||||
|
|
@ -788,6 +792,15 @@ int htt_h2t_ipa_uc_rsc_cfg_msg(struct htt_pdev_t *pdev)
|
|||
return A_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* htt_h2t_ipa_uc_set_active() - Propagate WDI path enable/disable to firmware
|
||||
* @pdev: handle to the HTT instance
|
||||
* @uc_active: WDI UC path enable or not
|
||||
* @is_tx: TX path or RX path
|
||||
*
|
||||
* Return: 0 success
|
||||
* A_NO_MEMORY No memory fail
|
||||
*/
|
||||
int htt_h2t_ipa_uc_set_active(struct htt_pdev_t *pdev,
|
||||
bool uc_active, bool is_tx)
|
||||
{
|
||||
|
|
@ -798,7 +811,7 @@ int htt_h2t_ipa_uc_set_active(struct htt_pdev_t *pdev,
|
|||
|
||||
pkt = htt_htc_pkt_alloc(pdev);
|
||||
if (!pkt)
|
||||
return A_NO_MEMORY;
|
||||
return -A_NO_MEMORY;
|
||||
|
||||
/* show that this is not a tx frame download
|
||||
* (not required, but helpful)
|
||||
|
|
@ -813,7 +826,7 @@ int htt_h2t_ipa_uc_set_active(struct htt_pdev_t *pdev,
|
|||
false);
|
||||
if (!msg) {
|
||||
htt_htc_pkt_free(pdev, pkt);
|
||||
return A_NO_MEMORY;
|
||||
return -A_NO_MEMORY;
|
||||
}
|
||||
/* set the length of the message */
|
||||
cdf_nbuf_put_tail(msg, HTT_WDI_IPA_OP_REQUEST_SZ);
|
||||
|
|
@ -851,6 +864,13 @@ int htt_h2t_ipa_uc_set_active(struct htt_pdev_t *pdev,
|
|||
return A_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* htt_h2t_ipa_uc_get_stats() - WDI UC state query request to firmware
|
||||
* @pdev: handle to the HTT instance
|
||||
*
|
||||
* Return: 0 success
|
||||
* A_NO_MEMORY No memory fail
|
||||
*/
|
||||
int htt_h2t_ipa_uc_get_stats(struct htt_pdev_t *pdev)
|
||||
{
|
||||
struct htt_htc_pkt *pkt;
|
||||
|
|
@ -859,7 +879,7 @@ int htt_h2t_ipa_uc_get_stats(struct htt_pdev_t *pdev)
|
|||
|
||||
pkt = htt_htc_pkt_alloc(pdev);
|
||||
if (!pkt)
|
||||
return A_NO_MEMORY;
|
||||
return -A_NO_MEMORY;
|
||||
|
||||
/* show that this is not a tx frame download
|
||||
* (not required, but helpful)
|
||||
|
|
@ -874,7 +894,7 @@ int htt_h2t_ipa_uc_get_stats(struct htt_pdev_t *pdev)
|
|||
false);
|
||||
if (!msg) {
|
||||
htt_htc_pkt_free(pdev, pkt);
|
||||
return A_NO_MEMORY;
|
||||
return -A_NO_MEMORY;
|
||||
}
|
||||
/* set the length of the message */
|
||||
cdf_nbuf_put_tail(msg, HTT_WDI_IPA_OP_REQUEST_SZ);
|
||||
|
|
|
|||
|
|
@ -480,6 +480,15 @@ int htt_tx_ipa_uc_detach(struct htt_pdev_t *pdev);
|
|||
|
||||
int htt_rx_ipa_uc_detach(struct htt_pdev_t *pdev);
|
||||
#else
|
||||
/**
|
||||
* htt_tx_ipa_uc_attach() - attach htt ipa uc tx resource
|
||||
* @pdev: htt context
|
||||
* @uc_tx_buf_sz: single tx buffer size
|
||||
* @uc_tx_buf_cnt: total tx buffer count
|
||||
* @uc_tx_partition_base: tx buffer partition start
|
||||
*
|
||||
* Return: 0 success
|
||||
*/
|
||||
static inline int
|
||||
htt_tx_ipa_uc_attach(struct htt_pdev_t *pdev,
|
||||
unsigned int uc_tx_buf_sz,
|
||||
|
|
@ -489,6 +498,13 @@ htt_tx_ipa_uc_attach(struct htt_pdev_t *pdev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* htt_rx_ipa_uc_attach() - attach htt ipa uc rx resource
|
||||
* @pdev: htt context
|
||||
* @rx_ind_ring_size: rx ring size
|
||||
*
|
||||
* Return: 0 success
|
||||
*/
|
||||
static inline int
|
||||
htt_rx_ipa_uc_attach(struct htt_pdev_t *pdev, unsigned int rx_ind_ring_size)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2288,14 +2288,16 @@ fail1:
|
|||
}
|
||||
|
||||
#ifdef IPA_OFFLOAD
|
||||
/**
|
||||
* htt_rx_ipa_uc_attach() - attach htt ipa uc rx resource
|
||||
* @pdev: htt context
|
||||
* @rx_ind_ring_size: rx ring size
|
||||
*
|
||||
* Return: 0 success
|
||||
*/
|
||||
int htt_rx_ipa_uc_attach(struct htt_pdev_t *pdev,
|
||||
unsigned int rx_ind_ring_elements)
|
||||
{
|
||||
/* Allocate RX indication ring */
|
||||
/* RX IND ring element
|
||||
* 4bytes: pointer
|
||||
* 2bytes: VDEV ID
|
||||
* 2bytes: length */
|
||||
pdev->ipa_uc_rx_rsc.rx_ind_ring_base.vaddr =
|
||||
cdf_os_mem_alloc_consistent(
|
||||
pdev->osdev,
|
||||
|
|
@ -2339,16 +2341,11 @@ int htt_rx_ipa_uc_attach(struct htt_pdev_t *pdev,
|
|||
}
|
||||
cdf_mem_zero(pdev->ipa_uc_rx_rsc.rx_ipa_prc_done_idx.vaddr, 4);
|
||||
|
||||
/* Allocate RX2 indication ring */
|
||||
/* RX2 IND ring element
|
||||
* 4bytes: pointer
|
||||
* 2bytes: VDEV ID
|
||||
* 2bytes: length */
|
||||
pdev->ipa_uc_rx_rsc.rx2_ind_ring_base.vaddr =
|
||||
cdf_os_mem_alloc_consistent(
|
||||
pdev->osdev,
|
||||
rx_ind_ring_elements *
|
||||
sizeof(struct ipa_uc_rx_ring_elem_t),
|
||||
sizeof(cdf_dma_addr_t),
|
||||
&pdev->ipa_uc_rx_rsc.rx2_ind_ring_base.paddr,
|
||||
cdf_get_dma_mem_context((&pdev->ipa_uc_rx_rsc.
|
||||
rx2_ind_ring_base),
|
||||
|
|
@ -2360,7 +2357,7 @@ int htt_rx_ipa_uc_attach(struct htt_pdev_t *pdev,
|
|||
|
||||
/* RX indication ring size, by bytes */
|
||||
pdev->ipa_uc_rx_rsc.rx2_ind_ring_size =
|
||||
rx_ind_ring_elements * sizeof(struct ipa_uc_rx_ring_elem_t);
|
||||
rx_ind_ring_elements * sizeof(cdf_dma_addr_t);
|
||||
cdf_mem_zero(pdev->ipa_uc_rx_rsc.rx2_ind_ring_base.vaddr,
|
||||
pdev->ipa_uc_rx_rsc.rx2_ind_ring_size);
|
||||
|
||||
|
|
@ -2432,7 +2429,7 @@ int htt_rx_ipa_uc_detach(struct htt_pdev_t *pdev)
|
|||
rx_ipa_prc_done_idx.vaddr,
|
||||
pdev->ipa_uc_rx_rsc.rx2_ipa_prc_done_idx.paddr,
|
||||
cdf_get_dma_mem_context((&pdev->ipa_uc_rx_rsc.
|
||||
rx_ipa_prc_done_idx),
|
||||
rx2_ipa_prc_done_idx),
|
||||
memctx));
|
||||
}
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -833,6 +833,16 @@ void htt_tx_desc_display(void *tx_desc)
|
|||
#endif
|
||||
|
||||
#ifdef IPA_OFFLOAD
|
||||
/**
|
||||
* htt_tx_ipa_uc_attach() - attach htt ipa uc tx resource
|
||||
* @pdev: htt context
|
||||
* @uc_tx_buf_sz: single tx buffer size
|
||||
* @uc_tx_buf_cnt: total tx buffer count
|
||||
* @uc_tx_partition_base: tx buffer partition start
|
||||
*
|
||||
* Return: 0 success
|
||||
* ENOBUFS No memory fail
|
||||
*/
|
||||
int htt_tx_ipa_uc_attach(struct htt_pdev_t *pdev,
|
||||
unsigned int uc_tx_buf_sz,
|
||||
unsigned int uc_tx_buf_cnt,
|
||||
|
|
@ -840,7 +850,7 @@ int htt_tx_ipa_uc_attach(struct htt_pdev_t *pdev,
|
|||
{
|
||||
unsigned int tx_buffer_count;
|
||||
cdf_nbuf_t buffer_vaddr;
|
||||
uint32_t buffer_paddr;
|
||||
cdf_dma_addr_t buffer_paddr;
|
||||
uint32_t *header_ptr;
|
||||
uint32_t *ring_vaddr;
|
||||
int return_code = 0;
|
||||
|
|
@ -929,6 +939,7 @@ int htt_tx_ipa_uc_attach(struct htt_pdev_t *pdev,
|
|||
|
||||
/* chanreq, peerid */
|
||||
*header_ptr = 0xFFFFFFFF;
|
||||
header_ptr++;
|
||||
|
||||
/* FRAG Header */
|
||||
/* 6 words TSO header */
|
||||
|
|
|
|||
|
|
@ -137,8 +137,17 @@ struct htt_ipa_uc_tx_resource_t {
|
|||
uint32_t alloc_tx_buf_cnt;
|
||||
};
|
||||
|
||||
/* Micro controller datapath offload
|
||||
* WLAN RX resources */
|
||||
/**
|
||||
* struct htt_ipa_uc_rx_resource_t
|
||||
* @rx_rdy_idx_paddr: rx ready index physical address
|
||||
* @rx_ind_ring_base: rx indication ring base memory info
|
||||
* @rx_ipa_prc_done_idx: rx process done index memory info
|
||||
* @rx_ind_ring_size: rx process done ring size
|
||||
* @rx2_rdy_idx_paddr: rx process done index physical address
|
||||
* @rx2_ind_ring_base: rx process done indication ring base memory info
|
||||
* @rx2_ipa_prc_done_idx: rx process done index memory info
|
||||
* @rx2_ind_ring_size: rx process done ring size
|
||||
*/
|
||||
struct htt_ipa_uc_rx_resource_t {
|
||||
cdf_dma_addr_t rx_rdy_idx_paddr;
|
||||
struct uc_shared_mem_t rx_ind_ring_base;
|
||||
|
|
@ -152,10 +161,16 @@ struct htt_ipa_uc_rx_resource_t {
|
|||
uint32_t rx2_ind_ring_size;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ipa_uc_rx_ring_elem_t
|
||||
* @rx_packet_paddr: rx packet physical address
|
||||
* @vdev_id: virtual interface id
|
||||
* @rx_packet_leng: packet length
|
||||
*/
|
||||
struct ipa_uc_rx_ring_elem_t {
|
||||
uint32_t rx_packet_paddr;
|
||||
uint16_t vdev_id;
|
||||
uint16_t rx_packet_leng;
|
||||
cdf_dma_addr_t rx_packet_paddr;
|
||||
uint32_t vdev_id;
|
||||
uint32_t rx_packet_leng;
|
||||
};
|
||||
|
||||
#if defined(HELIUMPLUS_PADDR64)
|
||||
|
|
|
|||
|
|
@ -214,111 +214,98 @@ void htt_display(htt_pdev_handle pdev, int indent);
|
|||
#define htt_rx_reorder_log_print(pdev)
|
||||
|
||||
#ifdef IPA_OFFLOAD
|
||||
/**
|
||||
* @brief send IPA UC resource config message to firmware with HTT message
|
||||
* @details
|
||||
* send IPA UC resource config message to firmware with HTT message
|
||||
*
|
||||
* @param pdev - handle to the HTT instance
|
||||
*/
|
||||
int htt_h2t_ipa_uc_rsc_cfg_msg(struct htt_pdev_t *pdev);
|
||||
|
||||
/**
|
||||
* @brief Client request resource information
|
||||
* @details
|
||||
* OL client will reuqest IPA UC related resource information
|
||||
* Resource information will be distributted to IPA module
|
||||
* All of the required resources should be pre-allocated
|
||||
*
|
||||
* @param pdev - handle to the HTT instance
|
||||
* @param ce_sr_base_paddr - copy engine source ring base physical address
|
||||
* @param ce_sr_ring_size - copy engine source ring size
|
||||
* @param ce_reg_paddr - copy engine register physical address
|
||||
* @param tx_comp_ring_base_paddr - tx comp ring base physical address
|
||||
* @param tx_comp_ring_size - tx comp ring size
|
||||
* @param tx_num_alloc_buffer - number of allocated tx buffer
|
||||
* @param rx_rdy_ring_base_paddr - rx ready ring base physical address
|
||||
* @param rx_rdy_ring_size - rx ready ring size
|
||||
* @param rx_proc_done_idx_paddr - rx process done index physical address
|
||||
*/
|
||||
int
|
||||
htt_ipa_uc_get_resource(htt_pdev_handle pdev,
|
||||
uint32_t *ce_sr_base_paddr,
|
||||
cdf_dma_addr_t *ce_sr_base_paddr,
|
||||
uint32_t *ce_sr_ring_size,
|
||||
cdf_dma_addr_t *ce_reg_paddr,
|
||||
uint32_t *tx_comp_ring_base_paddr,
|
||||
cdf_dma_addr_t *tx_comp_ring_base_paddr,
|
||||
uint32_t *tx_comp_ring_size,
|
||||
uint32_t *tx_num_alloc_buffer,
|
||||
uint32_t *rx_rdy_ring_base_paddr,
|
||||
cdf_dma_addr_t *rx_rdy_ring_base_paddr,
|
||||
uint32_t *rx_rdy_ring_size,
|
||||
uint32_t *rx_proc_done_idx_paddr);
|
||||
cdf_dma_addr_t *rx_proc_done_idx_paddr,
|
||||
void **rx_proc_done_idx_vaddr,
|
||||
cdf_dma_addr_t *rx2_rdy_ring_base_paddr,
|
||||
uint32_t *rx2_rdy_ring_size,
|
||||
cdf_dma_addr_t *rx2_proc_done_idx_paddr,
|
||||
void **rx2_proc_done_idx_vaddr);
|
||||
|
||||
/**
|
||||
* @brief Client set IPA UC doorbell register
|
||||
* @details
|
||||
* IPA UC let know doorbell register physical address
|
||||
* WLAN firmware will use this physical address to notify IPA UC
|
||||
*
|
||||
* @param pdev - handle to the HTT instance
|
||||
* @param ipa_uc_tx_doorbell_paddr - tx comp doorbell physical address
|
||||
* @param ipa_uc_rx_doorbell_paddr - rx ready doorbell physical address
|
||||
*/
|
||||
int
|
||||
htt_ipa_uc_set_doorbell_paddr(htt_pdev_handle pdev,
|
||||
uint32_t ipa_uc_tx_doorbell_paddr,
|
||||
uint32_t ipa_uc_rx_doorbell_paddr);
|
||||
cdf_dma_addr_t ipa_uc_tx_doorbell_paddr,
|
||||
cdf_dma_addr_t ipa_uc_rx_doorbell_paddr);
|
||||
|
||||
/**
|
||||
* @brief Client notify IPA UC data path active or not
|
||||
*
|
||||
* @param pdev - handle to the HTT instance
|
||||
* @param uc_active - UC data path is active or not
|
||||
* @param is_tx - UC TX is active or not
|
||||
*/
|
||||
int
|
||||
htt_h2t_ipa_uc_set_active(struct htt_pdev_t *pdev, bool uc_active, bool is_tx);
|
||||
|
||||
/**
|
||||
* @brief query uc data path stats
|
||||
*
|
||||
* @param pdev - handle to the HTT instance
|
||||
*/
|
||||
int htt_h2t_ipa_uc_get_stats(struct htt_pdev_t *pdev);
|
||||
|
||||
/**
|
||||
* @brief Attach IPA UC data path
|
||||
*
|
||||
* @param pdev - handle to the HTT instance
|
||||
*/
|
||||
int htt_ipa_uc_attach(struct htt_pdev_t *pdev);
|
||||
|
||||
/**
|
||||
* @brief detach IPA UC data path
|
||||
*
|
||||
* @param pdev - handle to the HTT instance
|
||||
*/
|
||||
void htt_ipa_uc_detach(struct htt_pdev_t *pdev);
|
||||
#else
|
||||
/**
|
||||
* htt_h2t_ipa_uc_rsc_cfg_msg() - Send WDI IPA config message to firmware
|
||||
* @pdev: handle to the HTT instance
|
||||
*
|
||||
* Return: 0 success
|
||||
*/
|
||||
static inline int htt_h2t_ipa_uc_rsc_cfg_msg(struct htt_pdev_t *pdev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* htt_ipa_uc_get_resource() - Get uc resource from htt and lower layer
|
||||
* @pdev: handle to the HTT instance
|
||||
* @ce_sr_base_paddr: copy engine source ring base physical address
|
||||
* @ce_sr_ring_size: copy engine source ring size
|
||||
* @ce_reg_paddr: copy engine register physical address
|
||||
* @tx_comp_ring_base_paddr: tx comp ring base physical address
|
||||
* @tx_comp_ring_size: tx comp ring size
|
||||
* @tx_num_alloc_buffer: number of allocated tx buffer
|
||||
* @rx_rdy_ring_base_paddr: rx ready ring base physical address
|
||||
* @rx_rdy_ring_size: rx ready ring size
|
||||
* @rx_proc_done_idx_paddr: rx process done index physical address
|
||||
* @rx_proc_done_idx_vaddr: rx process done index virtual address
|
||||
* @rx2_rdy_ring_base_paddr: rx done ring base physical address
|
||||
* @rx2_rdy_ring_size: rx done ring size
|
||||
* @rx2_proc_done_idx_paddr: rx done index physical address
|
||||
* @rx2_proc_done_idx_vaddr: rx done index virtual address
|
||||
*
|
||||
* Return: 0 success
|
||||
*/
|
||||
static inline int
|
||||
htt_ipa_uc_get_resource(htt_pdev_handle pdev,
|
||||
uint32_t *ce_sr_base_paddr,
|
||||
cdf_dma_addr_t *ce_sr_base_paddr,
|
||||
uint32_t *ce_sr_ring_size,
|
||||
cdf_dma_addr_t *ce_reg_paddr,
|
||||
uint32_t *tx_comp_ring_base_paddr,
|
||||
cdf_dma_addr_t *tx_comp_ring_base_paddr,
|
||||
uint32_t *tx_comp_ring_size,
|
||||
uint32_t *tx_num_alloc_buffer,
|
||||
uint32_t *rx_rdy_ring_base_paddr,
|
||||
cdf_dma_addr_t *rx_rdy_ring_base_paddr,
|
||||
uint32_t *rx_rdy_ring_size,
|
||||
uint32_t *rx_proc_done_idx_paddr)
|
||||
cdf_dma_addr_t *rx_proc_done_idx_paddr,
|
||||
void **rx_proc_done_idx_vaddr,
|
||||
cdf_dma_addr_t *rx2_rdy_ring_base_paddr,
|
||||
uint32_t *rx2_rdy_ring_size,
|
||||
cdf_dma_addr_t *rx2_proc_done_idx_paddr,
|
||||
void **rx2_proc_done_idx_vaddr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* htt_ipa_uc_set_doorbell_paddr() - Propagate IPA doorbell address
|
||||
* @pdev: handle to the HTT instance
|
||||
* @ipa_uc_tx_doorbell_paddr: TX doorbell base physical address
|
||||
* @ipa_uc_rx_doorbell_paddr: RX doorbell base physical address
|
||||
*
|
||||
* Return: 0 success
|
||||
*/
|
||||
static inline int
|
||||
htt_ipa_uc_set_doorbell_paddr(htt_pdev_handle pdev,
|
||||
uint32_t ipa_uc_tx_doorbell_paddr,
|
||||
|
|
@ -327,6 +314,14 @@ htt_ipa_uc_set_doorbell_paddr(htt_pdev_handle pdev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* htt_h2t_ipa_uc_set_active() - Propagate WDI path enable/disable to firmware
|
||||
* @pdev: handle to the HTT instance
|
||||
* @uc_active: WDI UC path enable or not
|
||||
* @is_tx: TX path or RX path
|
||||
*
|
||||
* Return: 0 success
|
||||
*/
|
||||
static inline int
|
||||
htt_h2t_ipa_uc_set_active(struct htt_pdev_t *pdev, bool uc_active,
|
||||
bool is_tx)
|
||||
|
|
@ -334,16 +329,34 @@ htt_h2t_ipa_uc_set_active(struct htt_pdev_t *pdev, bool uc_active,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* htt_h2t_ipa_uc_get_stats() - WDI UC state query request to firmware
|
||||
* @pdev: handle to the HTT instance
|
||||
*
|
||||
* Return: 0 success
|
||||
*/
|
||||
static inline int htt_h2t_ipa_uc_get_stats(struct htt_pdev_t *pdev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* htt_ipa_uc_attach() - Allocate UC data path resources
|
||||
* @pdev: handle to the HTT instance
|
||||
*
|
||||
* Return: 0 success
|
||||
*/
|
||||
static inline int htt_ipa_uc_attach(struct htt_pdev_t *pdev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* htt_ipa_uc_attach() - Remove UC data path resources
|
||||
* @pdev: handle to the HTT instance
|
||||
*
|
||||
* Return: 0 success
|
||||
*/
|
||||
static inline void htt_ipa_uc_detach(struct htt_pdev_t *pdev)
|
||||
{
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -1090,119 +1090,115 @@ void ol_vdev_rx_set_intrabss_fwd(ol_txrx_vdev_handle vdev, bool val);
|
|||
|
||||
|
||||
#ifdef IPA_OFFLOAD
|
||||
/**
|
||||
* @brief Client request resource information
|
||||
* @details
|
||||
* OL client will reuqest IPA UC related resource information
|
||||
* Resource information will be distributted to IPA module
|
||||
* All of the required resources should be pre-allocated
|
||||
*
|
||||
* @param pdev - handle to the HTT instance
|
||||
* @param ce_sr_base_paddr - copy engine source ring base physical address
|
||||
* @param ce_sr_ring_size - copy engine source ring size
|
||||
* @param ce_reg_paddr - copy engine register physical address
|
||||
* @param tx_comp_ring_base_paddr - tx comp ring base physical address
|
||||
* @param tx_comp_ring_size - tx comp ring size
|
||||
* @param tx_num_alloc_buffer - number of allocated tx buffer
|
||||
* @param rx_rdy_ring_base_paddr - rx ready ring base physical address
|
||||
* @param rx_rdy_ring_size - rx ready ring size
|
||||
* @param rx_proc_done_idx_paddr - rx process done index physical address
|
||||
*/
|
||||
void
|
||||
ol_txrx_ipa_uc_get_resource(ol_txrx_pdev_handle pdev,
|
||||
uint32_t *ce_sr_base_paddr,
|
||||
cdf_dma_addr_t *ce_sr_base_paddr,
|
||||
uint32_t *ce_sr_ring_size,
|
||||
cdf_dma_addr_t *ce_reg_paddr,
|
||||
uint32_t *tx_comp_ring_base_paddr,
|
||||
cdf_dma_addr_t *tx_comp_ring_base_paddr,
|
||||
uint32_t *tx_comp_ring_size,
|
||||
uint32_t *tx_num_alloc_buffer,
|
||||
uint32_t *rx_rdy_ring_base_paddr,
|
||||
cdf_dma_addr_t *rx_rdy_ring_base_paddr,
|
||||
uint32_t *rx_rdy_ring_size,
|
||||
uint32_t *rx_proc_done_idx_paddr);
|
||||
cdf_dma_addr_t *rx_proc_done_idx_paddr,
|
||||
void **rx_proc_done_idx_vaddr,
|
||||
cdf_dma_addr_t *rx2_rdy_ring_base_paddr,
|
||||
uint32_t *rx2_rdy_ring_size,
|
||||
cdf_dma_addr_t *rx2_proc_done_idx_paddr,
|
||||
void **rx2_proc_done_idx_vaddr);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Client set IPA UC doorbell register
|
||||
* @details
|
||||
* IPA UC let know doorbell register physical address
|
||||
* WLAN firmware will use this physical address to notify IPA UC
|
||||
*
|
||||
* @param pdev - handle to the HTT instance
|
||||
* @param ipa_uc_tx_doorbell_paddr - tx comp doorbell physical address
|
||||
* @param ipa_uc_rx_doorbell_paddr - rx ready doorbell physical address
|
||||
*/
|
||||
void
|
||||
ol_txrx_ipa_uc_set_doorbell_paddr(ol_txrx_pdev_handle pdev,
|
||||
uint32_t ipa_tx_uc_doorbell_paddr,
|
||||
uint32_t ipa_rx_uc_doorbell_paddr);
|
||||
cdf_dma_addr_t ipa_tx_uc_doorbell_paddr,
|
||||
cdf_dma_addr_t ipa_rx_uc_doorbell_paddr);
|
||||
|
||||
/**
|
||||
* @brief Client notify IPA UC data path active or not
|
||||
*
|
||||
* @param pdev - handle to the HTT instance
|
||||
* @param uc_active - UC data path is active or not
|
||||
* @param is_tx - UC TX is active or not
|
||||
*/
|
||||
void
|
||||
ol_txrx_ipa_uc_set_active(ol_txrx_pdev_handle pdev, bool uc_active, bool is_tx);
|
||||
|
||||
/**
|
||||
* @brief Offload data path activation notificaiton
|
||||
* @details
|
||||
* Firmware notification handler for offload datapath activity
|
||||
*
|
||||
* @param pdev - handle to the HTT instance
|
||||
* @param op_code - activated for tx or rx data patrh
|
||||
*/
|
||||
void ol_txrx_ipa_uc_op_response(ol_txrx_pdev_handle pdev, uint8_t *op_msg);
|
||||
|
||||
/**
|
||||
* @brief callback function registration
|
||||
* @details
|
||||
* OSIF layer callback function registration API
|
||||
* OSIF layer will register firmware offload datapath activity
|
||||
* notification callback
|
||||
*
|
||||
* @param pdev - handle to the HTT instance
|
||||
* @param ipa_uc_op_cb_type - callback function pointer should be registered
|
||||
* @param osif_dev - osif instance pointer
|
||||
*/
|
||||
void ol_txrx_ipa_uc_register_op_cb(ol_txrx_pdev_handle pdev,
|
||||
void (*ipa_uc_op_cb_type)(uint8_t *op_msg,
|
||||
void *osif_ctxt),
|
||||
void *osif_dev);
|
||||
|
||||
/**
|
||||
* @brief query uc data path stats
|
||||
* @details
|
||||
* Query uc data path stats from firmware
|
||||
*
|
||||
* @param pdev - handle to the HTT instance
|
||||
*/
|
||||
void ol_txrx_ipa_uc_get_stat(ol_txrx_pdev_handle pdev);
|
||||
#else
|
||||
/**
|
||||
* ol_txrx_ipa_uc_get_resource() - Client request resource information
|
||||
* @pdev: handle to the HTT instance
|
||||
* @ce_sr_base_paddr: copy engine source ring base physical address
|
||||
* @ce_sr_ring_size: copy engine source ring size
|
||||
* @ce_reg_paddr: copy engine register physical address
|
||||
* @tx_comp_ring_base_paddr: tx comp ring base physical address
|
||||
* @tx_comp_ring_size: tx comp ring size
|
||||
* @tx_num_alloc_buffer: number of allocated tx buffer
|
||||
* @rx_rdy_ring_base_paddr: rx ready ring base physical address
|
||||
* @rx_rdy_ring_size: rx ready ring size
|
||||
* @rx_proc_done_idx_paddr: rx process done index physical address
|
||||
* @rx_proc_done_idx_vaddr: rx process done index virtual address
|
||||
* @rx2_rdy_ring_base_paddr: rx done ring base physical address
|
||||
* @rx2_rdy_ring_size: rx done ring size
|
||||
* @rx2_proc_done_idx_paddr: rx done index physical address
|
||||
* @rx2_proc_done_idx_vaddr: rx done index virtual address
|
||||
*
|
||||
* OL client will reuqest IPA UC related resource information
|
||||
* Resource information will be distributted to IPA module
|
||||
* All of the required resources should be pre-allocated
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
static inline void
|
||||
ol_txrx_ipa_uc_get_resource(ol_txrx_pdev_handle pdev,
|
||||
uint32_t *ce_sr_base_paddr,
|
||||
cdf_dma_addr_t *ce_sr_base_paddr,
|
||||
uint32_t *ce_sr_ring_size,
|
||||
cdf_dma_addr_t *ce_reg_paddr,
|
||||
uint32_t *tx_comp_ring_base_paddr,
|
||||
cdf_dma_addr_t *tx_comp_ring_base_paddr,
|
||||
uint32_t *tx_comp_ring_size,
|
||||
uint32_t *tx_num_alloc_buffer,
|
||||
uint32_t *rx_rdy_ring_base_paddr,
|
||||
cdf_dma_addr_t *rx_rdy_ring_base_paddr,
|
||||
uint32_t *rx_rdy_ring_size,
|
||||
uint32_t *rx_proc_done_idx_paddr)
|
||||
cdf_dma_addr_t *rx_proc_done_idx_paddr,
|
||||
void **rx_proc_done_idx_vaddr,
|
||||
cdf_dma_addr_t *rx2_rdy_ring_base_paddr,
|
||||
uint32_t *rx2_rdy_ring_size,
|
||||
cdf_dma_addr_t *rx2_proc_done_idx_paddr,
|
||||
void **rx2_proc_done_idx_vaddr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_ipa_uc_set_doorbell_paddr() - Client set IPA UC doorbell register
|
||||
* @pdev: handle to the HTT instance
|
||||
* @ipa_uc_tx_doorbell_paddr: tx comp doorbell physical address
|
||||
* @ipa_uc_rx_doorbell_paddr: rx ready doorbell physical address
|
||||
*
|
||||
* IPA UC let know doorbell register physical address
|
||||
* WLAN firmware will use this physical address to notify IPA UC
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
static inline void
|
||||
ol_txrx_ipa_uc_set_doorbell_paddr(ol_txrx_pdev_handle pdev,
|
||||
uint32_t ipa_tx_uc_doorbell_paddr,
|
||||
uint32_t ipa_rx_uc_doorbell_paddr)
|
||||
cdf_dma_addr_t ipa_tx_uc_doorbell_paddr,
|
||||
cdf_dma_addr_t ipa_rx_uc_doorbell_paddr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_ipa_uc_set_active() - Client notify IPA UC data path active or not
|
||||
* @pdev: handle to the HTT instance
|
||||
* @ipa_uc_tx_doorbell_paddr: tx comp doorbell physical address
|
||||
* @ipa_uc_rx_doorbell_paddr: rx ready doorbell physical address
|
||||
*
|
||||
* IPA UC let know doorbell register physical address
|
||||
* WLAN firmware will use this physical address to notify IPA UC
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
static inline void
|
||||
ol_txrx_ipa_uc_set_active(ol_txrx_pdev_handle pdev,
|
||||
bool uc_active, bool is_tx)
|
||||
|
|
@ -1210,12 +1206,27 @@ ol_txrx_ipa_uc_set_active(ol_txrx_pdev_handle pdev,
|
|||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_ipa_uc_op_response() - Handle OP command response from firmware
|
||||
* @pdev: handle to the HTT instance
|
||||
* @op_msg: op response message from firmware
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
static inline void
|
||||
ol_txrx_ipa_uc_op_response(ol_txrx_pdev_handle pdev, uint8_t *op_msg)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_ipa_uc_register_op_cb() - Register OP handler function
|
||||
* @pdev: handle to the HTT instance
|
||||
* @op_cb: handler function pointer
|
||||
* @osif_dev: register client context
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
static inline void
|
||||
ol_txrx_ipa_uc_register_op_cb(ol_txrx_pdev_handle pdev,
|
||||
void (*ipa_uc_op_cb_type)(uint8_t *op_msg,
|
||||
|
|
@ -1225,6 +1236,12 @@ ol_txrx_ipa_uc_register_op_cb(ol_txrx_pdev_handle pdev,
|
|||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_ipa_uc_get_stat() - Get firmware wdi status
|
||||
* @pdev: handle to the HTT instance
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
static inline void ol_txrx_ipa_uc_get_stat(ol_txrx_pdev_handle pdev)
|
||||
{
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -2585,17 +2585,46 @@ inline void ol_txrx_flow_control_cb(ol_txrx_vdev_handle vdev,
|
|||
#endif /* QCA_LL_LEGACY_TX_FLOW_CONTROL */
|
||||
|
||||
#ifdef IPA_OFFLOAD
|
||||
/**
|
||||
* ol_txrx_ipa_uc_get_resource() - Client request resource information
|
||||
* @pdev: handle to the HTT instance
|
||||
* @ce_sr_base_paddr: copy engine source ring base physical address
|
||||
* @ce_sr_ring_size: copy engine source ring size
|
||||
* @ce_reg_paddr: copy engine register physical address
|
||||
* @tx_comp_ring_base_paddr: tx comp ring base physical address
|
||||
* @tx_comp_ring_size: tx comp ring size
|
||||
* @tx_num_alloc_buffer: number of allocated tx buffer
|
||||
* @rx_rdy_ring_base_paddr: rx ready ring base physical address
|
||||
* @rx_rdy_ring_size: rx ready ring size
|
||||
* @rx_proc_done_idx_paddr: rx process done index physical address
|
||||
* @rx_proc_done_idx_vaddr: rx process done index virtual address
|
||||
* @rx2_rdy_ring_base_paddr: rx done ring base physical address
|
||||
* @rx2_rdy_ring_size: rx done ring size
|
||||
* @rx2_proc_done_idx_paddr: rx done index physical address
|
||||
* @rx2_proc_done_idx_vaddr: rx done index virtual address
|
||||
*
|
||||
* OL client will reuqest IPA UC related resource information
|
||||
* Resource information will be distributted to IPA module
|
||||
* All of the required resources should be pre-allocated
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
void
|
||||
ol_txrx_ipa_uc_get_resource(ol_txrx_pdev_handle pdev,
|
||||
uint32_t *ce_sr_base_paddr,
|
||||
cdf_dma_addr_t *ce_sr_base_paddr,
|
||||
uint32_t *ce_sr_ring_size,
|
||||
cdf_dma_addr_t *ce_reg_paddr,
|
||||
uint32_t *tx_comp_ring_base_paddr,
|
||||
cdf_dma_addr_t *tx_comp_ring_base_paddr,
|
||||
uint32_t *tx_comp_ring_size,
|
||||
uint32_t *tx_num_alloc_buffer,
|
||||
uint32_t *rx_rdy_ring_base_paddr,
|
||||
cdf_dma_addr_t *rx_rdy_ring_base_paddr,
|
||||
uint32_t *rx_rdy_ring_size,
|
||||
uint32_t *rx_proc_done_idx_paddr)
|
||||
cdf_dma_addr_t *rx_proc_done_idx_paddr,
|
||||
void **rx_proc_done_idx_vaddr,
|
||||
cdf_dma_addr_t *rx2_rdy_ring_base_paddr,
|
||||
uint32_t *rx2_rdy_ring_size,
|
||||
cdf_dma_addr_t *rx2_proc_done_idx2_paddr,
|
||||
void **rx2_proc_done_idx2_vaddr)
|
||||
{
|
||||
htt_ipa_uc_get_resource(pdev->htt_pdev,
|
||||
ce_sr_base_paddr,
|
||||
|
|
@ -2605,19 +2634,45 @@ ol_txrx_ipa_uc_get_resource(ol_txrx_pdev_handle pdev,
|
|||
tx_comp_ring_size,
|
||||
tx_num_alloc_buffer,
|
||||
rx_rdy_ring_base_paddr,
|
||||
rx_rdy_ring_size, rx_proc_done_idx_paddr);
|
||||
rx_rdy_ring_size, rx_proc_done_idx_paddr,
|
||||
rx_proc_done_idx_vaddr,
|
||||
rx2_rdy_ring_base_paddr,
|
||||
rx2_rdy_ring_size, rx2_proc_done_idx2_paddr,
|
||||
rx2_proc_done_idx2_vaddr);
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_ipa_uc_set_doorbell_paddr() - Client set IPA UC doorbell register
|
||||
* @pdev: handle to the HTT instance
|
||||
* @ipa_uc_tx_doorbell_paddr: tx comp doorbell physical address
|
||||
* @ipa_uc_rx_doorbell_paddr: rx ready doorbell physical address
|
||||
*
|
||||
* IPA UC let know doorbell register physical address
|
||||
* WLAN firmware will use this physical address to notify IPA UC
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
void
|
||||
ol_txrx_ipa_uc_set_doorbell_paddr(ol_txrx_pdev_handle pdev,
|
||||
uint32_t ipa_tx_uc_doorbell_paddr,
|
||||
uint32_t ipa_rx_uc_doorbell_paddr)
|
||||
cdf_dma_addr_t ipa_tx_uc_doorbell_paddr,
|
||||
cdf_dma_addr_t ipa_rx_uc_doorbell_paddr)
|
||||
{
|
||||
htt_ipa_uc_set_doorbell_paddr(pdev->htt_pdev,
|
||||
ipa_tx_uc_doorbell_paddr,
|
||||
ipa_rx_uc_doorbell_paddr);
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_ipa_uc_set_active() - Client notify IPA UC data path active or not
|
||||
* @pdev: handle to the HTT instance
|
||||
* @ipa_uc_tx_doorbell_paddr: tx comp doorbell physical address
|
||||
* @ipa_uc_rx_doorbell_paddr: rx ready doorbell physical address
|
||||
*
|
||||
* IPA UC let know doorbell register physical address
|
||||
* WLAN firmware will use this physical address to notify IPA UC
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
void
|
||||
ol_txrx_ipa_uc_set_active(ol_txrx_pdev_handle pdev, bool uc_active, bool is_tx)
|
||||
{
|
||||
|
|
@ -2651,7 +2706,13 @@ void ol_txrx_ipa_uc_fw_op_event_handler(void *context,
|
|||
"%s: ipa_uc_op_cb NULL", __func__);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* ol_txrx_ipa_uc_op_response() - Handle OP command response from firmware
|
||||
* @pdev: handle to the HTT instance
|
||||
* @op_msg: op response message from firmware
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
void ol_txrx_ipa_uc_op_response(ol_txrx_pdev_handle pdev, uint8_t *op_msg)
|
||||
{
|
||||
p_cds_sched_context sched_ctx = get_cds_sched_ctxt();
|
||||
|
|
@ -2674,6 +2735,14 @@ void ol_txrx_ipa_uc_op_response(ol_txrx_pdev_handle pdev, uint8_t *op_msg)
|
|||
cds_indicate_rxpkt(sched_ctx, pkt);
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_ipa_uc_register_op_cb() - Register OP handler function
|
||||
* @pdev: handle to the HTT instance
|
||||
* @op_cb: handler function pointer
|
||||
* @osif_dev: register client context
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
void ol_txrx_ipa_uc_register_op_cb(ol_txrx_pdev_handle pdev,
|
||||
ipa_uc_op_cb_type op_cb, void *osif_dev)
|
||||
{
|
||||
|
|
@ -2681,6 +2750,12 @@ void ol_txrx_ipa_uc_register_op_cb(ol_txrx_pdev_handle pdev,
|
|||
pdev->osif_dev = osif_dev;
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_ipa_uc_get_stat() - Get firmware wdi status
|
||||
* @pdev: handle to the HTT instance
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
void ol_txrx_ipa_uc_get_stat(ol_txrx_pdev_handle pdev)
|
||||
{
|
||||
htt_h2t_ipa_uc_get_stats(pdev->htt_pdev);
|
||||
|
|
|
|||
|
|
@ -535,18 +535,26 @@ void hif_enable_fastpath(struct ol_softc *hif_dev);
|
|||
#endif
|
||||
|
||||
#ifdef IPA_OFFLOAD
|
||||
/*
|
||||
* IPA micro controller data path offload feature enabled,
|
||||
* HIF should release copy engine related resource information to IPA UC
|
||||
* IPA UC will access hardware resource with released information
|
||||
*/
|
||||
void hif_ipa_get_ce_resource(struct ol_softc *scn,
|
||||
uint32_t *ce_sr_base_paddr,
|
||||
cdf_dma_addr_t *ce_sr_base_paddr,
|
||||
uint32_t *ce_sr_ring_size,
|
||||
cdf_dma_addr_t *ce_reg_paddr);
|
||||
#else
|
||||
/**
|
||||
* hif_ipa_get_ce_resource() - get uc resource on hif
|
||||
* @scn: bus context
|
||||
* @ce_sr_base_paddr: copyengine source ring base physical address
|
||||
* @ce_sr_ring_size: copyengine source ring size
|
||||
* @ce_reg_paddr: copyengine register physical address
|
||||
*
|
||||
* IPA micro controller data path offload feature enabled,
|
||||
* HIF should release copy engine related resource information to IPA UC
|
||||
* IPA UC will access hardware resource with released information
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static inline void hif_ipa_get_ce_resource(struct ol_softc *scn,
|
||||
uint32_t *ce_sr_base_paddr,
|
||||
cdf_dma_addr_t *ce_sr_base_paddr,
|
||||
uint32_t *ce_sr_ring_size,
|
||||
cdf_dma_addr_t *ce_reg_paddr)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -430,20 +430,28 @@ struct ce_sendlist {
|
|||
#define ATH_ISR_NOTMINE 0x0002 /* for shared IRQ's */
|
||||
|
||||
#ifdef IPA_OFFLOAD
|
||||
/*
|
||||
* Copy engine should release resource to micro controller
|
||||
* Micro controller needs
|
||||
- Copy engine source descriptor base address
|
||||
- Copy engine source descriptor size
|
||||
- PCI BAR address to access copy engine regiser
|
||||
*/
|
||||
void ce_ipa_get_resource(struct CE_handle *ce,
|
||||
uint32_t *ce_sr_base_paddr,
|
||||
cdf_dma_addr_t *ce_sr_base_paddr,
|
||||
uint32_t *ce_sr_ring_size,
|
||||
cdf_dma_addr_t *ce_reg_paddr);
|
||||
#else
|
||||
/**
|
||||
* ce_ipa_get_resource() - get uc resource on copyengine
|
||||
* @ce: copyengine context
|
||||
* @ce_sr_base_paddr: copyengine source ring base physical address
|
||||
* @ce_sr_ring_size: copyengine source ring size
|
||||
* @ce_reg_paddr: copyengine register physical address
|
||||
*
|
||||
* Copy engine should release resource to micro controller
|
||||
* Micro controller needs
|
||||
* - Copy engine source descriptor base address
|
||||
* - Copy engine source descriptor size
|
||||
* - PCI BAR address to access copy engine regiser
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static inline void ce_ipa_get_resource(struct CE_handle *ce,
|
||||
uint32_t *ce_sr_base_paddr,
|
||||
cdf_dma_addr_t *ce_sr_base_paddr,
|
||||
uint32_t *ce_sr_ring_size,
|
||||
cdf_dma_addr_t *ce_reg_paddr)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2025,8 +2025,21 @@ err:
|
|||
|
||||
|
||||
#ifdef IPA_OFFLOAD
|
||||
/**
|
||||
* hif_ipa_get_ce_resource() - get uc resource on hif
|
||||
* @scn: bus context
|
||||
* @ce_sr_base_paddr: copyengine source ring base physical address
|
||||
* @ce_sr_ring_size: copyengine source ring size
|
||||
* @ce_reg_paddr: copyengine register physical address
|
||||
*
|
||||
* IPA micro controller data path offload feature enabled,
|
||||
* HIF should release copy engine related resource information to IPA UC
|
||||
* IPA UC will access hardware resource with released information
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void hif_ipa_get_ce_resource(struct ol_softc *scn,
|
||||
uint32_t *ce_sr_base_paddr,
|
||||
cdf_dma_addr_t *ce_sr_base_paddr,
|
||||
uint32_t *ce_sr_ring_size,
|
||||
cdf_dma_addr_t *ce_reg_paddr)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1654,15 +1654,23 @@ void ce_enable_msi(struct ol_softc *scn, unsigned int CE_id,
|
|||
}
|
||||
|
||||
#ifdef IPA_OFFLOAD
|
||||
/*
|
||||
/**
|
||||
* ce_ipa_get_resource() - get uc resource on copyengine
|
||||
* @ce: copyengine context
|
||||
* @ce_sr_base_paddr: copyengine source ring base physical address
|
||||
* @ce_sr_ring_size: copyengine source ring size
|
||||
* @ce_reg_paddr: copyengine register physical address
|
||||
*
|
||||
* Copy engine should release resource to micro controller
|
||||
* Micro controller needs
|
||||
- Copy engine source descriptor base address
|
||||
- Copy engine source descriptor size
|
||||
- PCI BAR address to access copy engine regiser
|
||||
* - Copy engine source descriptor base address
|
||||
* - Copy engine source descriptor size
|
||||
* - PCI BAR address to access copy engine regiser
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void ce_ipa_get_resource(struct CE_handle *ce,
|
||||
uint32_t *ce_sr_base_paddr,
|
||||
cdf_dma_addr_t *ce_sr_base_paddr,
|
||||
uint32_t *ce_sr_ring_size,
|
||||
cdf_dma_addr_t *ce_reg_paddr)
|
||||
{
|
||||
|
|
@ -1690,8 +1698,9 @@ void ce_ipa_get_resource(struct CE_handle *ce,
|
|||
/* Get BAR address */
|
||||
hif_read_phy_mem_base(CE_state->scn, &phy_mem_base);
|
||||
|
||||
*ce_sr_base_paddr = (uint32_t) CE_state->src_ring->base_addr_CE_space;
|
||||
*ce_sr_ring_size = (uint32_t) CE_state->src_ring->nentries;
|
||||
*ce_sr_base_paddr = CE_state->src_ring->base_addr_CE_space;
|
||||
*ce_sr_ring_size = (uint32_t) (CE_state->src_ring->nentries *
|
||||
sizeof(struct CE_src_desc));
|
||||
*ce_reg_paddr = phy_mem_base + CE_BASE_ADDRESS(CE_state->id) +
|
||||
SR_WR_INDEX_ADDRESS;
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -801,8 +801,17 @@ void htc_cancel_deferred_target_sleep(void *context)
|
|||
}
|
||||
|
||||
#ifdef IPA_OFFLOAD
|
||||
/**
|
||||
* htc_ipa_get_ce_resource() - get uc resource on lower layer
|
||||
* @htc_handle: htc context
|
||||
* @ce_sr_base_paddr: copyengine source ring base physical address
|
||||
* @ce_sr_ring_size: copyengine source ring size
|
||||
* @ce_reg_paddr: copyengine register physical address
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void htc_ipa_get_ce_resource(HTC_HANDLE htc_handle,
|
||||
uint32_t *ce_sr_base_paddr,
|
||||
cdf_dma_addr_t *ce_sr_base_paddr,
|
||||
uint32_t *ce_sr_ring_size,
|
||||
cdf_dma_addr_t *ce_reg_paddr)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -700,7 +700,7 @@ void htc_disable_aspm(void);
|
|||
|
||||
#ifdef IPA_OFFLOAD
|
||||
void htc_ipa_get_ce_resource(HTC_HANDLE htc_handle,
|
||||
uint32_t *ce_sr_base_paddr,
|
||||
cdf_dma_addr_t *ce_sr_base_paddr,
|
||||
uint32_t *ce_sr_ring_size,
|
||||
cdf_dma_addr_t *ce_reg_paddr);
|
||||
#else
|
||||
|
|
|
|||
Loading…
Reference in a new issue