qcacmn: Read ppdu_id from reo_entrance ring
For qcn9000, As part HW enhancements, PPDU_ID is sent in reo_entrance_ring descriptor instead of RX_MPDU_START tlv. Add support to read ppdu id from descriptor. Modify existing hal API hal_rx_hw_desc_get_ppduid_get () arguments to pass RxDMA ring HW descriptor. Usage: a. Use hal_rx_hw_desc_get_ppduid_get () - to get ppdu id from rx_tlv_hdr or hw descriptor based on target. for qcn9000, this API gets ppdu_id from HW descriptor, for other platforms, gets ppdu_id from rx_tv_hdr b. Use hal_rx_get_ppdu_id () - to get ppdu_id from rx_tlv_hdr Change-Id: I5838227c12cde50cbb2a9da7a0d8056b8b9b7ef5
此提交包含在:
@@ -603,14 +603,16 @@ static uint32_t hal_rx_tid_get_8074v1(hal_soc_handle_t hal_soc_hdl,
|
||||
|
||||
/**
|
||||
* hal_rx_hw_desc_get_ppduid_get_8074v1(): retrieve ppdu id
|
||||
* @hw_desc_addr: hw addr
|
||||
* @rx_tlv_hdr: Rx tlv header
|
||||
* @rxdma_dst_ring_desc: Rx HW descriptor
|
||||
*
|
||||
* Return: ppdu id
|
||||
*/
|
||||
static uint32_t hal_rx_hw_desc_get_ppduid_get_8074v1(void *hw_desc_addr)
|
||||
static uint32_t hal_rx_hw_desc_get_ppduid_get_8074v1(void *rx_tlv_hdr,
|
||||
void *rxdma_dst_ring_desc)
|
||||
{
|
||||
struct rx_mpdu_info *rx_mpdu_info;
|
||||
struct rx_pkt_tlvs *rx_desc = (struct rx_pkt_tlvs *)hw_desc_addr;
|
||||
struct rx_pkt_tlvs *rx_desc = (struct rx_pkt_tlvs *)rx_tlv_hdr;
|
||||
|
||||
rx_mpdu_info =
|
||||
&rx_desc->mpdu_start_tlv.rx_mpdu_start.rx_mpdu_info_details;
|
||||
@@ -815,7 +817,13 @@ static uint8_t hal_rx_get_filter_category_8074v1(uint8_t *buf)
|
||||
static uint32_t
|
||||
hal_rx_get_ppdu_id_8074v1(uint8_t *buf)
|
||||
{
|
||||
return HAL_RX_GET_PPDU_ID(buf);
|
||||
struct rx_mpdu_info *rx_mpdu_info;
|
||||
struct rx_pkt_tlvs *rx_desc = (struct rx_pkt_tlvs *)buf;
|
||||
|
||||
rx_mpdu_info =
|
||||
&rx_desc->mpdu_start_tlv.rx_mpdu_start.rx_mpdu_info_details;
|
||||
|
||||
return HAL_RX_GET_PPDU_ID(rx_mpdu_info);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -985,6 +993,25 @@ uint16_t hal_rx_get_rx_sequence_8074v1(uint8_t *buf)
|
||||
return HAL_RX_MPDU_GET_SEQUENCE_NUMBER(rx_mpdu_info);
|
||||
}
|
||||
|
||||
/**
|
||||
* hal_rx_mpdu_start_tlv_tag_valid_8074v1 () - API to check if RX_MPDU_START
|
||||
* tlv tag is valid
|
||||
*
|
||||
* @rx_tlv_hdr: start address of rx_pkt_tlvs
|
||||
*
|
||||
* Return: true if RX_MPDU_START is valied, else false.
|
||||
*/
|
||||
uint8_t hal_rx_mpdu_start_tlv_tag_valid_8074v1(void *rx_tlv_hdr)
|
||||
{
|
||||
struct rx_pkt_tlvs *rx_desc = (struct rx_pkt_tlvs *)rx_tlv_hdr;
|
||||
uint32_t tlv_tag;
|
||||
|
||||
tlv_tag = HAL_RX_GET_USER_TLV32_TYPE(
|
||||
&rx_desc->mpdu_start_tlv);
|
||||
|
||||
return tlv_tag == WIFIRX_MPDU_START_E ? true : false;
|
||||
}
|
||||
|
||||
struct hal_hw_txrx_ops qca8074_hal_hw_txrx_ops = {
|
||||
|
||||
/* init and setup */
|
||||
@@ -1083,6 +1110,7 @@ struct hal_hw_txrx_ops qca8074_hal_hw_txrx_ops = {
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
hal_rx_mpdu_start_tlv_tag_valid_8074v1,
|
||||
};
|
||||
|
||||
struct hal_hw_srng_config hw_srng_table_8074[] = {
|
||||
|
新增問題並參考
封鎖使用者