qcacmn: Fix wbm release descriptor settings

Set BM_ACTION, RELEASE_SOURCE and BUFFER_OR_DESC_TYPE fields in WBM release
ring descriptor in hal_rx_msdu_link_desc_set function.
Added HAL API to retrieve RXDMA push reason and error code from REO entrance
descriptor.

Change-Id: I64209d9ebb332136fae43a55b39e0f0d242315fb
CRs-Fixed: 2062922
This commit is contained in:
Karunakar Dasineni
2017-06-16 16:14:03 -07:00
committed by snandini
parent 5c41638e14
commit f40efac097
2 changed files with 85 additions and 39 deletions

View File

@@ -1806,6 +1806,47 @@ enum hal_rxdma_error_code {
HAL_RXDMA_ERR_FLUSH_REQUEST HAL_RXDMA_ERR_FLUSH_REQUEST
}; };
/**
* HW BM action settings in WBM release ring
*/
#define HAL_BM_ACTION_PUT_IN_IDLE_LIST 0
/**
* enum hal_rx_wbm_error_source: Indicates which module initiated the
* release of this buffer or descriptor
*
* @ HAL_RX_WBM_ERR_SRC_TQM : TQM released this buffer or descriptor
* @ HAL_RX_WBM_ERR_SRC_RXDMA: RXDMA released this buffer or descriptor
* @ HAL_RX_WBM_ERR_SRC_REO: REO released this buffer or descriptor
* @ HAL_RX_WBM_ERR_SRC_FW: FW released this buffer or descriptor
* @ HAL_RX_WBM_ERR_SRC_SW: SW released this buffer or descriptor
*/
enum hal_rx_wbm_error_source {
HAL_RX_WBM_ERR_SRC_TQM = 0,
HAL_RX_WBM_ERR_SRC_RXDMA,
HAL_RX_WBM_ERR_SRC_REO,
HAL_RX_WBM_ERR_SRC_FW,
HAL_RX_WBM_ERR_SRC_SW,
};
/**
* enum hal_rx_wbm_buf_type: Indicates that type of buffer or descriptor
* released
*
* @ HAL_RX_WBM_ERR_SRC_TQM : TQM released this buffer or descriptor
* @ HAL_RX_WBM_ERR_SRC_RXDMA: RXDMA released this buffer or descriptor
* @ HAL_RX_WBM_ERR_SRC_REO: REO released this buffer or descriptor
* @ HAL_RX_WBM_ERR_SRC_FW: FW released this buffer or descriptor
* @ HAL_RX_WBM_ERR_SRC_SW: SW released this buffer or descriptor
*/
enum hal_rx_wbm_buf_type {
HAL_RX_WBM_BUF_TYPE_REL_BUF = 0,
HAL_RX_WBM_BUF_TYPE_MSDU_LINK_DESC,
HAL_RX_WBM_BUF_TYPE_MPDU_LINK_DESC,
HAL_RX_WBM_BUF_TYPE_MSDU_EXT_DESC,
HAL_RX_WBM_BUF_TYPE_Q_EXT_DESC,
};
#define HAL_RX_REO_ERROR_GET(reo_desc) (((*(((uint32_t *) reo_desc)+ \ #define HAL_RX_REO_ERROR_GET(reo_desc) (((*(((uint32_t *) reo_desc)+ \
(REO_DESTINATION_RING_7_REO_ERROR_CODE_OFFSET >> 2))) & \ (REO_DESTINATION_RING_7_REO_ERROR_CODE_OFFSET >> 2))) & \
REO_DESTINATION_RING_7_REO_ERROR_CODE_MASK) >> \ REO_DESTINATION_RING_7_REO_ERROR_CODE_MASK) >> \
@@ -1870,6 +1911,12 @@ static inline void hal_rx_msdu_link_desc_set(struct hal_soc *soc,
/* Structure copy !!! */ /* Structure copy !!! */
wbm_rel_srng->released_buff_or_desc_addr_info = wbm_rel_srng->released_buff_or_desc_addr_info =
*((struct buffer_addr_info *)buf_addr_info); *((struct buffer_addr_info *)buf_addr_info);
HAL_DESC_SET_FIELD(src_srng_desc, WBM_RELEASE_RING_2,
RELEASE_SOURCE_MODULE, HAL_RX_WBM_ERR_SRC_SW);
HAL_DESC_SET_FIELD(src_srng_desc, WBM_RELEASE_RING_2, BM_ACTION,
HAL_BM_ACTION_PUT_IN_IDLE_LIST);
HAL_DESC_SET_FIELD(src_srng_desc, WBM_RELEASE_RING_2,
BUFFER_OR_DESC_TYPE, HAL_RX_WBM_BUF_TYPE_MSDU_LINK_DESC);
} }
/* /*
@@ -1926,47 +1973,11 @@ uint8_t hal_rx_ret_buf_manager_get(void *ring_desc)
* RX WBM ERROR APIS * RX WBM ERROR APIS
******************************************************************************/ ******************************************************************************/
/**
* enum hal_rx_wbm_error_source: Indicates which module initiated the
* release of this buffer or descriptor
*
* @ HAL_RX_WBM_ERR_SRC_TQM : TQM released this buffer or descriptor
* @ HAL_RX_WBM_ERR_SRC_RXDMA: RXDMA released this buffer or descriptor
* @ HAL_RX_WBM_ERR_SRC_REO: REO released this buffer or descriptor
* @ HAL_RX_WBM_ERR_SRC_FW: FW released this buffer or descriptor
* @ HAL_RX_WBM_ERR_SRC_SW: SW released this buffer or descriptor
*/
enum hal_rx_wbm_error_source {
HAL_RX_WBM_ERR_SRC_TQM = 0,
HAL_RX_WBM_ERR_SRC_RXDMA,
HAL_RX_WBM_ERR_SRC_REO,
HAL_RX_WBM_ERR_SRC_FW,
HAL_RX_WBM_ERR_SRC_SW,
};
#define HAL_RX_WBM_ERR_SRC_GET(wbm_desc) (((*(((uint32_t *) wbm_desc)+ \ #define HAL_RX_WBM_ERR_SRC_GET(wbm_desc) (((*(((uint32_t *) wbm_desc)+ \
(WBM_RELEASE_RING_2_RELEASE_SOURCE_MODULE_OFFSET >> 2))) & \ (WBM_RELEASE_RING_2_RELEASE_SOURCE_MODULE_OFFSET >> 2))) & \
WBM_RELEASE_RING_2_RELEASE_SOURCE_MODULE_MASK) >> \ WBM_RELEASE_RING_2_RELEASE_SOURCE_MODULE_MASK) >> \
WBM_RELEASE_RING_2_RELEASE_SOURCE_MODULE_LSB) WBM_RELEASE_RING_2_RELEASE_SOURCE_MODULE_LSB)
/**
* enum hal_rx_wbm_buf_type: Indicates that type of buffer or descriptor
* released
*
* @ HAL_RX_WBM_ERR_SRC_TQM : TQM released this buffer or descriptor
* @ HAL_RX_WBM_ERR_SRC_RXDMA: RXDMA released this buffer or descriptor
* @ HAL_RX_WBM_ERR_SRC_REO: REO released this buffer or descriptor
* @ HAL_RX_WBM_ERR_SRC_FW: FW released this buffer or descriptor
* @ HAL_RX_WBM_ERR_SRC_SW: SW released this buffer or descriptor
*/
enum hal_rx_wbm_buf_type {
HAL_RX_WBM_BUF_TYPE_REL_BUF = 0,
HAL_RX_WBM_BUF_TYPE_MSDU_LINK_DESC,
HAL_RX_WBM_BUF_TYPE_MPDU_LINK_DESC,
HAL_RX_WBM_BUF_TYPE_MSDU_EXT_DESC,
HAL_RX_WBM_BUF_TYPE_Q_EXT_DESC,
};
#define HAL_RX_WBM_BUF_TYPE_GET(wbm_desc) (((*(((uint32_t *) wbm_desc)+ \ #define HAL_RX_WBM_BUF_TYPE_GET(wbm_desc) (((*(((uint32_t *) wbm_desc)+ \
(WBM_RELEASE_RING_2_BUFFER_OR_DESC_TYPE_OFFSET >> 2))) & \ (WBM_RELEASE_RING_2_BUFFER_OR_DESC_TYPE_OFFSET >> 2))) & \
WBM_RELEASE_RING_2_BUFFER_OR_DESC_TYPE_MASK) >> \ WBM_RELEASE_RING_2_BUFFER_OR_DESC_TYPE_MASK) >> \
@@ -3031,4 +3042,36 @@ uint16_t hal_rx_get_desc_len(void)
return sizeof(struct rx_pkt_tlvs); return sizeof(struct rx_pkt_tlvs);
} }
/*
* hal_rx_reo_ent_rxdma_push_reason_get(): Retrieves RXDMA push reason from
* reo_entrance_ring descriptor
*
* @reo_ent_desc: reo_entrance_ring descriptor
* Returns: value of rxdma_push_reason
*/
static inline
uint8_t hal_rx_reo_ent_rxdma_push_reason_get(void *reo_ent_desc)
{
return _HAL_MS((*_OFFSET_TO_WORD_PTR(reo_ent_desc,
REO_ENTRANCE_RING_6_RXDMA_PUSH_REASON_OFFSET)),
REO_ENTRANCE_RING_6_RXDMA_PUSH_REASON_MASK,
REO_ENTRANCE_RING_6_RXDMA_PUSH_REASON_LSB);
}
/*
* hal_rx_reo_ent_rxdma_error_code_get(): Retrieves RXDMA error code from
* reo_entrance_ring descriptor
*
* @reo_ent_desc: reo_entrance_ring descriptor
* Returns: value of rxdma_error_code
*/
static inline
uint8_t hal_rx_reo_ent_rxdma_error_code_get(void *reo_ent_desc)
{
return _HAL_MS((*_OFFSET_TO_WORD_PTR(reo_ent_desc,
REO_ENTRANCE_RING_6_RXDMA_ERROR_CODE_OFFSET)),
REO_ENTRANCE_RING_6_RXDMA_ERROR_CODE_MASK,
REO_ENTRANCE_RING_6_RXDMA_ERROR_CODE_LSB);
}
#endif /* _HAL_RX_H */ #endif /* _HAL_RX_H */

View File

@@ -354,9 +354,12 @@ struct hal_soc {
#define HAL_DEFAULT_REO_TIMEOUT_MS 40 /* milliseconds */ #define HAL_DEFAULT_REO_TIMEOUT_MS 40 /* milliseconds */
#define HAL_DESC_SET_FIELD(_desc, _word, _fld, _value) \ #define HAL_DESC_SET_FIELD(_desc, _word, _fld, _value) do { \
((_desc)[(_word ## _ ## _fld ## _OFFSET) >> 2] |= \ ((uint32_t *)(_desc))[(_word ## _ ## _fld ## _OFFSET) >> 2] &= \
((_value) << _word ## _ ## _fld ## _LSB)) ~(_word ## _ ## _fld ## _MASK); \
((uint32_t *)(_desc))[(_word ## _ ## _fld ## _OFFSET) >> 2] |= \
((_value) << _word ## _ ## _fld ## _LSB); \
} while (0)
#define HAL_SM(_reg, _fld, _val) \ #define HAL_SM(_reg, _fld, _val) \
(((_val) << (_reg ## _ ## _fld ## _SHFT)) & \ (((_val) << (_reg ## _ ## _fld ## _SHFT)) & \