125 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			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
 |