Files
kunlun/plc/halmac/inc/mac_rf_hwq_mgr.h
2024-09-28 14:24:04 +08:00

125 lines
4.1 KiB
C

/****************************************************************************
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
be copied by any method or incorporated into another program without
the express written consent of Aerospace C.Power. This Information or any portion
thereof remains the property of Aerospace C.Power. The Information contained herein
is believed to be accurate and Aerospace C.Power assumes no responsibility or
liability for its use in any way and conveys no license or title under
any patent or copyright and makes no representation or warranty that this
Information is free from patent or copyright infringement.
****************************************************************************/
#ifndef MAC_RF_HWQ_MGR_H
#define MAC_RF_HWQ_MGR_H
#include "os_types.h"
#include "plc_utils.h"
#include "iot_config.h"
#ifdef __cplusplus
extern "C" {
#endif
#define INV_MAC_RF_HWQ_ID (uint8_t)(~0)
typedef enum _mac_rf_queue {
MAC_RF_QUE_BCN,
MAC_RF_QUE_CSMA_0,
MAC_RF_QUE_CSMA_1,
MAC_RF_QUE_CSMA_2,
MAC_RF_QUE_CSMA_3,
/* for some package of special needs */
MAC_RF_QUE_CSMA_DBG,
MAC_RF_QUE_BCSMA,
MAC_RF_QUE_TDMA,
MAX_MAC_RF_QUE_NUM
} mac_rf_queue_t;
/* define the max csma hwq cnt */
#define MAX_ENABLE_CSMA_HWQ (MAC_RF_QUE_CSMA_DBG + 1)
#define MAX_MAC_RF_TXQ_NUM MAX_MAC_RF_QUE_NUM /* 0 - 7 */
typedef struct _mac_rf_queue_ctxt {
/* the last available hwq id*/
uint8_t last_hwq_id;
/* store the hwq id for each swq type id */
uint8_t hwq_map[MAX_MAC_RF_QUE_NUM];
/* store the last desc for each hwq */
void *last_desc[MAX_MAC_RF_TXQ_NUM];
/* store the current sw handle ptr for each hwq */
void *cur_hdl_desc[MAX_MAC_RF_TXQ_NUM];
/* cur msdu ctxt for each hwq */
void *cur_msdu_ptr[MAX_MAC_RF_TXQ_NUM];
/*hwq depth*/
uint16_t q_depth[MAX_MAC_RF_TXQ_NUM];
/* hwq block */
uint8_t is_block_all_tx;
} mac_rf_queue_ctxt_t;
#if HPLC_RF_DEV_SUPPORT
/* init the hwq ctxt */
void mac_rf_q_init(mac_rf_queue_ctxt_t *queue);
/* get the real rf hwq mapping id
* @queue - hwq handler
* @mac_que - sw queue that designated
* return - the real rf hwq id that mapping to MAC HW if allocated
* INV_MAC_RF_HWQ_ID if not allocated
*/
uint8_t mac_rf_q_get_hwqid(mac_rf_queue_ctxt_t *queue,
mac_rf_queue_t qtype);
uint8_t mac_rf_q_alloc_hwq(mac_rf_queue_ctxt_t *queue,
mac_rf_queue_t qtype);
/* get the swq id from region type, lid
* return MAX_MAC_RF_QUE_NUM if error
*/
mac_rf_queue_t mac_rf_q_get_swq_type(uint32_t bcn_region_type,
lid_t lid, uint8_t is_dbg_tx);
/* get the rf swqid from lid info */
uint32_t mac_rf_q_get_swqid_from_lid(mac_rf_queue_ctxt_t *queue,
lid_t lid, uint8_t is_dbg_tx);
/* get the rf hwqid from swq id info */
uint32_t mac_rf_q_create_hwqid_from_swqid(mac_rf_queue_ctxt_t *queue,
mac_rf_queue_t swq_id);
/*
* @breif mac_rf_block_all_tx_ena() set hw block
* @param tx_ctxt the pointer of the hwq_ctxt
* @param uint32_t ena enable/disable]
* @return uint32_t ERR_OK
*/
uint32_t mac_rf_block_all_tx_ena(mac_rf_queue_ctxt_t *tx_ctxt, uint32_t ena);
/*
* @breif mac_rf_is_block_all_tx() - get is block tx status
* @param tx_ctxt the pointer of the hwq_ctxt
* @return uint32_t 0: false; other: true;
*/
uint32_t mac_rf_is_block_all_tx(mac_rf_queue_ctxt_t *tx_ctxt);
#else /* HPLC_RF_DEV_SUPPORT */
#define mac_rf_q_get_swq_type(bcn_region_type, lid, is_dbg_tx) \
MAX_MAC_RF_QUE_NUM; \
do { \
(void)(bcn_region_type); \
(void)(lid); \
(void)(is_dbg_tx); \
} while(0);
#endif /* HPLC_RF_DEV_SUPPORT */
#ifdef __cplusplus
}
#endif
#endif //MAC_HWQ_MGR_H