293 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			293 lines
		
	
	
		
			12 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_TX_HW_H
 | |
| #define MAC_RF_TX_HW_H
 | |
| 
 | |
| #include "os_types.h"
 | |
| #include "iot_config.h"
 | |
| #include "plc_utils.h"
 | |
| #include "mac_rf_hwq_mgr.h"
 | |
| #include "mac_rf_pdev.h"
 | |
| #include "mac_msdu.h"
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| /* rf bcsma warning depth */
 | |
| #define RF_BCSMA_Q_WARNING_DEPTH   (2)
 | |
| 
 | |
| #if HPLC_RF_DEV_SUPPORT
 | |
| 
 | |
| #include "rf_tx_mpdu_desc.h"
 | |
| 
 | |
| /**
 | |
|  *@brief mac_rf_tx_mpdu_fill_phyinfo     mac rf tx mpdu fill phy information
 | |
|  *@param rf_mpdu_start                   [rf mpdu start pointer]
 | |
|  *@param phy_info1                       [phy tx information]
 | |
|  *@exception                             [none.]
 | |
|  *@return                                [0]
 | |
|  */
 | |
| uint32_t mac_rf_tx_mpdu_fill_phyinfo(rf_tx_mpdu_start *rf_mpdu_start,
 | |
|     uint32_t phy_info1);
 | |
| 
 | |
| /**
 | |
|  *@brief mac_rf_tx_mpdu_fill_pb_start_info    mac rf tx mpdu fill pb start
 | |
|  *@param pb_buf_addr                     [pb buf address]
 | |
|  *@param sof_pb_header                   [sof pb header]
 | |
|  *@exception                             [none.]
 | |
|  *@return                                [0]
 | |
|  */
 | |
| uint32_t mac_rf_tx_mpdu_fill_pb_start_info(rf_tx_pb_start *rf_pb_start,
 | |
|     uint32_t pb_buf_addr, uint32_t sof_pb_header);
 | |
| 
 | |
| /**
 | |
|  *@brief mac_rf_tx_mpdu_fill_phrinfo      mac rf tx mpdu fill phy header info
 | |
|  *@param rf_mpdu_start                   [rf mpdu start pointer]
 | |
|  *@param proto                           [protocol type, see PLC_PROTO_TYPE_XXX]
 | |
|  *@param delimiter                       [delimiter type]
 | |
|  *@param network                         [network type]
 | |
|  *@param nid                             [network id]
 | |
|  *@param bcn_period_cnt                  [beacon period cnt]
 | |
|  *@param stei                            [source tei]
 | |
|  *@param dtei                            [destination tei]
 | |
|  *@param mcs                             [mcs]
 | |
|  *@param lid                             [link id]
 | |
|  *@param pb_sz_idx                       [pb size index]
 | |
|  *@param is_retry                        [is retry]
 | |
|  *@param is_encry                        [is encry]
 | |
|  *@param is_bcast                        [is broadcast]
 | |
|  *@exception                             [none.]
 | |
|  *@return                                [0]
 | |
|  */
 | |
| uint32_t mac_rf_tx_mpdu_fill_phrinfo(rf_tx_mpdu_start *rf_mpdu_start,
 | |
|     uint32_t proto, uint32_t delimiter, uint32_t network, uint32_t nid,
 | |
|     uint32_t bcn_period_cnt, tei_t stei, tei_t dtei, uint32_t mcs, lid_t lid,
 | |
|     uint32_t pb_sz_idx, uint8_t is_retry, uint8_t is_encry, uint8_t is_bcast);
 | |
| 
 | |
| /**
 | |
|  *@brief mac_rf_tx_mpdu_fill_macinfo     mac rf tx mpdu fill mac information
 | |
|  *@param rf_mpdu_start                   [rf mpdu start pointer]
 | |
|  *@param next                            [next rf_tx_mpdu_start]
 | |
|  *@param pb_start                        [pointer to tx_pb_start]
 | |
|  *@param proto                           [protocol type, see PLC_PROTO_TYPE_XXX]
 | |
|  *@param end                             [pointer to tx_pb_end]
 | |
|  *@param need_ack                        [is need ack]
 | |
|  *@param retry_cnt                       [retry count]
 | |
|  *@param tx_power                        [tx power]
 | |
|  *@param retry_bit_en                    [retry bit enable]
 | |
|  *@param is_msdu                         [is msdu]
 | |
|  *@param pb_buf_reuse                    [is pb buf reuse]
 | |
|  *@param tx_desc_resue                   [is tx desc reuse]
 | |
|  *@param sw_buf_offset                   [sw buf offset]
 | |
|  *@param is_list_start                   [is list start]
 | |
|  *@param is_list_end                     [is list end]
 | |
|  *@param phr_mcs                         [phy frame header mcs]
 | |
|  *@param pts                             [phy timestamp]
 | |
|  *@param pts_off                         [phy timestamp offset]
 | |
|  *@param pld_mcs                         [payload mcs]
 | |
|  *@param blkz                            [pb block size]
 | |
|  *@param crc32_en                        [crc32 check enable]
 | |
|  *@param crc32_ofs                       [crc32 offset]
 | |
|  *@param hwq_id                          [swq id of mpdu queued into SW Debug]
 | |
|  *@param option                          [option]
 | |
|  *@param pb_num                          [pb numbers]
 | |
|  *@param tx_frame_len                    [tx frame length]
 | |
|  *@exception                             [none.]
 | |
|  *@return                                [0]
 | |
|  */
 | |
| uint32_t mac_rf_tx_mpdu_fill_macinfo(rf_tx_mpdu_start *rf_mpdu_start,
 | |
|     rf_tx_mpdu_start *next, rf_tx_pb_start *pb_start, rf_tx_mpdu_end *end,
 | |
|     uint32_t proto, uint32_t need_ack, uint32_t retry_cnt, uint32_t tx_power,
 | |
|     uint32_t retry_bit_en, uint8_t is_msdu, uint32_t pb_buf_reuse,
 | |
|     uint32_t tx_desc_resue, uint32_t sw_buf_offset, uint8_t is_list_start,
 | |
|     uint8_t is_list_end, uint32_t phr_mcs, uint32_t pts, uint32_t pts_off,
 | |
|     uint32_t pld_mcs, uint32_t blkz, uint32_t crc32_en, uint32_t crc32_ofs,
 | |
|     uint32_t hwq_id, uint32_t option, uint32_t pb_num, uint32_t tx_frame_len);
 | |
| 
 | |
| /**
 | |
|  *@brief mac_rf_tx_mpdu_form_pb          mac rf tx hw mpdu form pb.
 | |
|  *@param pb                              [the point of pb]
 | |
|  *@param pkt_buf                         [the point of pkt buf]
 | |
|  *@param bitmap                          [bitmap]
 | |
|  *@param pb_sz                           [pb size]
 | |
|  *@exception                             [none.]
 | |
|  *@return                                [0]
 | |
|  */
 | |
| uint32_t mac_rf_tx_mpdu_form_pb(rf_tx_pb_start **pb,
 | |
|     iot_pkt_t *pkt_buf, uint32_t bitmap, uint32_t pb_sz);
 | |
| 
 | |
| /**
 | |
|  *@brief mac_rf_tx_hw_mpdu               mac rf tx hw mpdu.
 | |
|  *@param tx_ctxt                         [queue ctxt]
 | |
|  *@param hwq_id                          [hwq id]
 | |
|  *@param mpdu                            [mpdu]
 | |
|  *@exception                             [none.]
 | |
|  *@return                                [0]
 | |
|  */
 | |
| uint32_t mac_rf_tx_hw_mpdu(mac_rf_queue_ctxt_t *tx_ctxt, uint32_t hwq_id,
 | |
|     rf_tx_mpdu_start *mpdu);
 | |
| 
 | |
| /**
 | |
|  *@brief mac_rf_tx_hw_msdu_comp          mac rf tx hw msdu complete.
 | |
|  *@param hwq_id                          [hwq id]
 | |
|  *@param current_mpdu                    [current mpdu]
 | |
|  *@param pdev                            [rf pdev]
 | |
|  *@exception                             [none.]
 | |
|  *@return                                [need free msdu]
 | |
|  */
 | |
| mac_msdu_t *mac_rf_tx_hw_msdu_comp(uint32_t hwq_id,
 | |
|     rf_tx_mpdu_start * current_mpdu, mac_rf_pdev_t * pdev);
 | |
| 
 | |
| /**
 | |
|  *@brief mac_rf_tx_mpdu_fill_dummy       mac rf tx mpdu fill dummy.
 | |
|  *@param rf_mpdu_dummy                   [point to dummy]
 | |
|  *@exception                             [none.]
 | |
|  *@return                                [0]
 | |
|  */
 | |
| uint32_t mac_rf_tx_mpdu_fill_dummy(rf_tx_dummy_node *rf_mpdu_dummy);
 | |
| 
 | |
| /**
 | |
|  *@brief mac_rf_tx_hw_mpdu_comp          mac rf tx hw mpdu complete.
 | |
|  *@param hwq_id                          [hwq id]
 | |
|  *@param mpdu                            [mpdu]
 | |
|  *@exception                             [none.]
 | |
|  *@return                                [0]
 | |
|  */
 | |
| uint32_t mac_rf_tx_hw_mpdu_comp(uint32_t hwq_id);
 | |
| 
 | |
| /**
 | |
|  *@brief mac_rf_tx_flush_hwq             mac rf tx flush hwq.
 | |
|  *@param tx_ctxt                         [point to tx queue ctxt]
 | |
|  *@param qid                             [qid]
 | |
|  *@param disable_hwq                     [disable hwq or not]
 | |
|  *@exception                             [none.]
 | |
|  *@return                                [0]
 | |
|  */
 | |
| uint32_t mac_rf_tx_flush_hwq(mac_rf_queue_ctxt_t *tx_ctxt, uint32_t qid,
 | |
|     uint8_t disable_hwq);
 | |
| 
 | |
| /*
 | |
| * @breif  mac_rf_tx_flush_bcsma_pending_queue()  mac rf tx flush bcsma
 | |
| * @param  tx_ctxt                       the pointer of the rf hwq_ctxt
 | |
| * @return ovid                          void.
 | |
| */
 | |
| void mac_rf_tx_flush_bcsma_pending_queue(mac_rf_queue_ctxt_t *tx_ctxt);
 | |
| 
 | |
| /**
 | |
|  *@brief mac_rf_tx_flush_all_tdma_queue  mac rf tx flush all tdma queue.
 | |
|  *@param tx_ctxt                         [point to tx queue ctxt]
 | |
|  *@exception                             [none.]
 | |
|  *@return                                [0]
 | |
|  */
 | |
| uint32_t mac_rf_tx_flush_all_tdma_queue(mac_rf_queue_ctxt_t *tx_ctxt);
 | |
| 
 | |
| /**
 | |
|  *@brief mac_rf_tx_flush_all_queue       mac rf tx flush all hwq.
 | |
|  *@param tx_ctxt                         [point to tx queue ctxt]
 | |
|  *@exception                             [none.]
 | |
|  *@return                                [0]
 | |
|  */
 | |
| uint32_t mac_rf_tx_flush_all_queue(mac_rf_queue_ctxt_t *tx_ctxt);
 | |
| 
 | |
| /**
 | |
|  *@brief mac_rf_tx_mpdu_fill_pb_start    mac rf tx mpdu fill pb start.
 | |
|  *@param pb                              [point to tx pb]
 | |
|  *@param buf_addr                        [buf addr]
 | |
|  *@param pb_seq                          [pb seq]
 | |
|  *@param msdu_start                      [is msdu start]
 | |
|  *@param msdu_end                        [is msdu end]
 | |
|  *@param proto                           [proto]
 | |
|  *@exception                             [none.]
 | |
|  *@return                                [void]
 | |
|  */
 | |
| void mac_rf_tx_mpdu_fill_pb_start(rf_tx_pb_start *pb, void *buf_addr,
 | |
|     uint32_t pb_seq, uint32_t msdu_start, uint32_t msdu_end, uint32_t proto);
 | |
| 
 | |
| /**
 | |
|  *@brief mac_rf_csma_bcn_flush           mac rf csma beacon flush.
 | |
|  *@param tx_ctxt                         [point to tx queue ctxt]
 | |
|  *@exception                             [none.]
 | |
|  *@return                                [0]
 | |
|  */
 | |
| uint32_t mac_rf_csma_bcn_flush(mac_rf_queue_ctxt_t *tx_ctxt);
 | |
| 
 | |
| /**
 | |
|  *@brief mac_rf_fill_rftest_txcali_phrinfo() -  mac rf tx mpdu fill phy header info
 | |
|  *                                              for rf test tx cali frame
 | |
|  *@param rf_mpdu_start                [rf mpdu start pointer]
 | |
|  *@param proto                        [protocol type, see PLC_PROTO_TYPE_XXX]
 | |
|  *@param nid                          [network id]
 | |
|  *@param reg_type                     [tx Calibration register type,
 | |
|  *                                     see RF_TEST_TX_CALI_REG_T]
 | |
|  *@param dev_id_magic                 [dev id magic]
 | |
|  *@param reg_magic                    [register combination magic]
 | |
|  *@return                             [0]
 | |
|  */
 | |
| void mac_rf_fill_rftest_txcali_phrinfo(rf_tx_mpdu_start *rf_mpdu_start,
 | |
|     uint32_t proto, uint32_t nid, RF_TEST_TX_CALI_REG_T reg_type,
 | |
|     uint16_t dev_id_magic, uint32_t reg_magic);
 | |
| 
 | |
| #else /* HPLC_RF_DEV_SUPPORT */
 | |
| 
 | |
| #define mac_rf_tx_flush_hwq(tx_ctxt, qid, disable_hwq) \
 | |
|     do { \
 | |
|         (void)tx_ctxt; (void)qid; (void)disable_hwq; \
 | |
|     } while (0)
 | |
| 
 | |
| #define mac_rf_tx_flush_bcsma_pending_queue(tx_ctxt); \
 | |
|     do { \
 | |
|         (void)tx_ctxt; \
 | |
|     } while (0)
 | |
| 
 | |
| #define mac_rf_tx_flush_all_tdma_queue(tx_ctxt) \
 | |
|     do { \
 | |
|         (void)tx_ctxt; \
 | |
|     } while (0)
 | |
| 
 | |
| #define mac_rf_tx_flush_all_queue(tx_ctxt) \
 | |
|     do { \
 | |
|         (void)tx_ctxt; \
 | |
|     } while (0)
 | |
| 
 | |
| #define mac_rf_tx_mpdu_fill_pb_start(pb, buf_addr, pb_seq, msdu_start, \
 | |
|     msdu_end) \
 | |
|     do { \
 | |
|         (void)pb; (void)buf_addr; (void)pb_seq; \
 | |
|         (void)msdu_start;(void)msdu_end; \
 | |
|     } while (0)
 | |
| 
 | |
| #define mac_rf_csma_bcn_flush(tx_ctxt) \
 | |
|     do { \
 | |
|         (void)tx_ctxt; \
 | |
|     } while (0)
 | |
| 
 | |
| #endif /* HPLC_RF_DEV_SUPPORT */
 | |
| 
 | |
| /**
 | |
|  *@brief mac_rf_tx_hw_init               mac rf tx hw init.
 | |
|  *@param rf_pdev                         [rf pdev pointer]
 | |
|  *@exception                             [none.]
 | |
|  *@return                                [0]
 | |
|  */
 | |
| uint32_t mac_rf_tx_hw_init(mac_rf_pdev_t *rf_pdev);
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif /* MAC_RF_TX_HW_H */
 |