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

142 lines
4.4 KiB
C
Executable File

/****************************************************************************
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_HWQ_MGR_H
#define MAC_HWQ_MGR_H
#include "os_types.h"
#include "plc_utils.h"
#include "mac_txq_hw.h"
#include "iot_config.h"
#ifdef __cplusplus
extern "C" {
#endif
#define INV_MAC_HWQ_ID (uint8_t)(~0)
typedef enum _mac_queue {
MAC_QUE_BCN_A,
MAC_QUE_BCN_B,
MAC_QUE_BCN_C,
MAC_QUE_CSMA_A_0,
MAC_QUE_CSMA_A_1,
MAC_QUE_CSMA_A_2,
MAC_QUE_CSMA_A_3,
MAC_QUE_CSMA_B_0,
MAC_QUE_CSMA_B_1,
MAC_QUE_CSMA_B_2,
MAC_QUE_CSMA_B_3,
MAC_QUE_CSMA_C_0,
MAC_QUE_CSMA_C_1,
MAC_QUE_CSMA_C_2,
MAC_QUE_CSMA_C_3,
MAC_QUE_BCSMA_A,
MAC_QUE_BCSMA_B,
MAC_QUE_BCSMA_C,
MAC_QUE_TDMA_A,
MAC_QUE_TDMA_B,
MAC_QUE_TDMA_C,
MAC_QUE_NB_BCN_A,
MAC_QUE_NB_BCN_B,
MAC_QUE_NB_BCN_C,
MAX_MAC_QUE_NUM
} mac_queue_t;
typedef struct _mac_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_QUE_NUM];
/* store the last desc for each hwq */
void *last_desc[MAX_MAC_TXQ_NUM];
/* store the current sw handle ptr for each hwq */
void *cur_hdl_desc[MAX_MAC_TXQ_NUM];
/* cur msdu ctxt for each hwq */
void *cur_msdu_ptr[MAX_MAC_TXQ_NUM];
/*hwq depth*/
uint16_t q_depth[MAX_MAC_TXQ_NUM];
/* hwq block */
uint8_t is_block_all_tx;
} mac_queue_ctxt_t;
/* init the hwq ctxt */
void mac_q_init(mac_queue_ctxt_t *queue);
/* get the real hwq mapping id
* @queue - hwq handler
* @mac_que - sw queue that designated
* return - the real hwq id that mapping to MAC HW if allocated
* INV_MAC_HWQ_ID if not allocated
*/
uint8_t mac_q_get_hwqid(mac_queue_ctxt_t *queue, mac_queue_t qtype);
uint8_t mac_q_alloc_hwq(mac_queue_ctxt_t *queue, mac_queue_t qtype);
/* get beacon region type from lid */
uint32_t mac_get_bcn_region_type(lid_t lid);
/* check if has msdu for current sending */
uint8_t mac_token_check(uint32_t bcn_region_type, lid_t lid, uint8_t is_rf);
/* TX done,return token */
void mac_token_free(uint32_t bcn_region_type, lid_t lid, uint8_t is_rf);
/* TX,take token */
void mac_token_alloc(uint32_t bcn_region_type, lid_t lid, uint8_t is_rf);
/* get the swq id from region type, phase and lid
* return MAX_MAC_QUE_NUM if error
*/
mac_queue_t mac_q_get_swq_type(uint32_t bcn_region_type, \
uint32_t phase, lid_t lid);
/* get the swqid from phase and lid info */
uint32_t mac_q_get_swqid_from_phase_lid(mac_queue_ctxt_t *queue, \
uint32_t phase, lid_t lid);
/* get the hwqid from swq id info */
uint32_t mac_q_create_hwqid_from_swqid(mac_queue_ctxt_t *queue, \
mac_queue_t swq_id);
/*
* @breif mac_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_block_all_tx_ena(mac_queue_ctxt_t *tx_ctxt, uint32_t ena);
/*
* @breif mac_is_block_all_tx() - get is block tx status
* @param pdev the pointer of the hwq_ctxt
* @return uint32_t 0: false; other: true;
*/
uint32_t mac_is_block_all_tx(mac_queue_ctxt_t *tx_ctxt);
/**
*@brief mac_tx_flush_hwq mac tx flush hwq.
*
* @param tx_ctxt the pointer of the hwq_ctxt
*@param qid hwqid.
*@param disable_hwq need disable hwq.
*
*@return success;
*/
uint32_t mac_tx_flush_hwq(mac_queue_ctxt_t *tx_ctxt, uint32_t qid,
uint8_t disable_hwq);
#ifdef __cplusplus
}
#endif
#endif //MAC_HWQ_MGR_H