254 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			254 lines
		
	
	
		
			6.6 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_PDEV_H
 | ||
|  | #define MAC_PDEV_H
 | ||
|  | 
 | ||
|  | #include "plc_fr.h"
 | ||
|  | 
 | ||
|  | #if HW_PLATFORM == HW_PLATFORM_SIMU
 | ||
|  | #include "simulator_txrx.h"
 | ||
|  | #endif
 | ||
|  | #include "mac_vdev.h"
 | ||
|  | #include "iot_mem_pool.h"
 | ||
|  | #include "plc_mac_cfg.h"
 | ||
|  | #include "mac_hwq_mgr.h"
 | ||
|  | #include "mac_rx_buf_ring.h"
 | ||
|  | #include "iot_pkt.h"
 | ||
|  | #include "mac_zc.h"
 | ||
|  | #include "mac_status.h"
 | ||
|  | #include "mac_ppm_scan.h"
 | ||
|  | #include "mac_pm.h"
 | ||
|  | #include "mac_channel.h"
 | ||
|  | #include "multi_nid_sync.h"
 | ||
|  | #include "mac_check_spur.h"
 | ||
|  | #include "mac_rf_pdev.h"
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | typedef uint32_t(*mac_tx_hw_comp_t)(uint32_t hwqid); | ||
|  | typedef uint32_t(*mac_rx_t)(void *pdev, uint32_t ring_id, uint32_t quota_ms); | ||
|  | 
 | ||
|  | typedef struct _mac_pdev { | ||
|  |     iot_mem_pool_t vdev_pool; | ||
|  |     uint32_t cur_vdev_num : 3, | ||
|  |              /* this is the flag if cert mode enable */ | ||
|  |              switch_ctxt_in_mac_isr : 1, | ||
|  |              ena_bcast_hwretry : 1, | ||
|  |              ena_ucast_hwretry : 1, | ||
|  |              dbg_pkt_vdev_id : 8, | ||
|  |              /* reserved for future */ | ||
|  |              resv : 18; | ||
|  |     mac_vdev_t *vdev[MAX_VDEV_NUM]; | ||
|  | #if HW_PLATFORM == HW_PLATFORM_SIMU
 | ||
|  |     simulator_info_t simu; | ||
|  | #endif
 | ||
|  |     mac_queue_ctxt_t hwq_hdl; | ||
|  |     mac_rx_ring_ctxt_t ring_hdl; | ||
|  |     pdevid_t pdev_id; | ||
|  |     /* mac_tx_hw_comp handler */ | ||
|  |     mac_tx_hw_comp_t tx_comp; | ||
|  |     /* mac rx handler */ | ||
|  |     mac_rx_t rx; | ||
|  |     /* ppm scan context */ | ||
|  |     mac_scan_ctxt_t scan; | ||
|  |     /* channel scan context */ | ||
|  |     mac_channel_scan_ctxt_t channel_scan; | ||
|  |     /* mac status */ | ||
|  |     mac_status_t mac_status; | ||
|  | 
 | ||
|  |     uint32_t mac_isr_rx_fc_ts_ntb; | ||
|  | 
 | ||
|  | #if MAC_TIMESTAMPING
 | ||
|  |     /* record rx ntb in mac rx dsr */ | ||
|  |     uint32_t mac_rx_ntb; | ||
|  | 
 | ||
|  |     /* record tx hung pkt ntb when hung pkt */ | ||
|  |     uint32_t mac_tx_sw_ntb; | ||
|  | 
 | ||
|  |     /* the ntb when entry mac isr */ | ||
|  |     uint32_t mac_isr_ntb; | ||
|  | 
 | ||
|  |     /* the timestamp of rx mpdu end local_timestamp */ | ||
|  |     uint32_t mac_rx_timestamp; | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #if DBG_RX_ABORT_REASON_4 == 1
 | ||
|  |     uint32_t cont_rx_abort4_cnt; | ||
|  | #endif
 | ||
|  | 
 | ||
|  |     uint8_t rx_abort_rst_cnt; | ||
|  |     uint8_t rx_abort_spg_war_cnt; | ||
|  |     uint16_t rsvd2; | ||
|  | 
 | ||
|  |     /*power manage*/ | ||
|  |     mac_pm_t mac_pm; | ||
|  | 
 | ||
|  | #if DEBUG_CANNOT_SENDOUT_PKT
 | ||
|  |     /* timer id for mac cannot send out pkt */ | ||
|  |     timer_id_t plc_tx_timer; | ||
|  |     /* plc tx status */ | ||
|  |     uint8_t plc_tx_st              : 2, | ||
|  |             /* continuous tx timeout times */ | ||
|  |             plc_con_tx_timeout_cnt : 4, | ||
|  |             revs1                  : 2; | ||
|  |     uint8_t plc_debug_cnt; | ||
|  | 
 | ||
|  | #endif
 | ||
|  |     /*use debug dump data */ | ||
|  |     iot_pkt_t *dump_pkt; | ||
|  | #if DEBUG_INVAILD_ADDR
 | ||
|  |     void *buf_addr; | ||
|  |     uint32_t buf_len; | ||
|  | #endif
 | ||
|  |     /* this means mac hw read data
 | ||
|  |     * from RAM too slow | ||
|  |     */ | ||
|  |     uint32_t mac_underrun_cnt; | ||
|  |     /* hw fc when just before tx */ | ||
|  |     uint32_t fc_hw[4]; | ||
|  | #if ENABLE_CCA_ISR == 1
 | ||
|  |     uint8_t cca_isr_pri;  //0-3
 | ||
|  | #endif
 | ||
|  | #if ENA_SYNC_DIFF_CCO_PPM
 | ||
|  |     m_ppm_cal_ctxt_t ppm_cal; | ||
|  | #endif
 | ||
|  |     /* CCO&STA check spur support*/ | ||
|  |     mac_check_spur_ctxt_t mac_check_spur_ctxt; | ||
|  | 
 | ||
|  | #if DEBUG_HWQ_SHCED_HANG
 | ||
|  |     uint32_t dbg_status; | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #if PLC_SUPPORT_HW_TSFM_PA
 | ||
|  |     void *hw_tsfm; | ||
|  | #endif
 | ||
|  | 
 | ||
|  |     /* mac rf pdev */ | ||
|  |     mac_rf_pdev_t *mac_rf_pdev; | ||
|  | 
 | ||
|  | } mac_pdev_t; | ||
|  | 
 | ||
|  | #if DEBUG_CANNOT_SENDOUT_PKT
 | ||
|  | 
 | ||
|  | /* tx timer statas on init */ | ||
|  | #define PLC_DEBUG_INIT_ST         0
 | ||
|  | 
 | ||
|  | /*tx timer status on print */ | ||
|  | #define PLC_DEBUG_PRINTF_ST       1
 | ||
|  | 
 | ||
|  | /*tx timer status on normal calu cnt */ | ||
|  | #define PLC_DEBUG_NORMAL_ST       2
 | ||
|  | 
 | ||
|  | #define PLC_DEBUG_PHY_CNT         1
 | ||
|  | 
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /* define the max 32 ntb */ | ||
|  | #define MAX_UINT32_NTB            (0x100000000UL)
 | ||
|  | /* define the reserve ntb to max ntb 8us */ | ||
|  | #define RESERVE_NTB               (200)
 | ||
|  | /* define the max delay time 12us */ | ||
|  | #define DELAY_MAX_NTB             (300)
 | ||
|  | 
 | ||
|  | extern mac_pdev_t* g_mac_pdev[]; | ||
|  | 
 | ||
|  | uint32_t mac_pdev_init(); | ||
|  | 
 | ||
|  | /* set tx comp cb for pdev */ | ||
|  | void mac_set_pdev_tx_comp(mac_pdev_t *pdev, \ | ||
|  |     mac_tx_hw_comp_t tx_comp_cb); | ||
|  | 
 | ||
|  | /* set rx cb for pdev */ | ||
|  | void mac_set_pdev_rx_cb(mac_pdev_t *pdev, \ | ||
|  |     mac_rx_t rx_cb); | ||
|  | /*
 | ||
|  | * mac_set_pdev_cfg_internal - set a pdev's config | ||
|  | * | ||
|  | * pdev_id - which pdev to config | ||
|  | * cfg_struct_ptr - the pointer to the param config structure | ||
|  | * | ||
|  | * return 0 for success and non-zero for failure. | ||
|  | */ | ||
|  | uint32_t mac_set_pdev_cfg_internal(pdevid_t pdev_id, void *cfg_struct_ptr); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief - mac_get_pdev_cfg_internal()   mac handle get pdev cfg | ||
|  |  * @param - [pdev]                  pdev handler | ||
|  |  * @param - [cfg_struct_ptr]        the pointer to the param config structure | ||
|  |  * @return - 0 for success and non-zero for failure | ||
|  |  */ | ||
|  | uint32_t mac_get_pdev_cfg_internal(pdevid_t pdev_id, void *cfg_struct_ptr); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief - mac_pdev_send_reset_war_msg(), | ||
|  |  *          let mac or phy reset due to WAR | ||
|  |  * @param - [pdev] pdev handler | ||
|  |  * @param - [flag] reset flag | ||
|  |  * @return - [none] | ||
|  |  */ | ||
|  | void mac_pdev_send_reset_war_msg(mac_pdev_t *pdev, uint32_t flag); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief  -  get_pdev_ptr()      get pdev | ||
|  |  * @param  -  [pdev_id] pdev id | ||
|  |  * @return -  [pdev] | ||
|  |  */ | ||
|  | mac_pdev_t *get_pdev_ptr(uint32_t pdev_id); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief -  mac_tx_hang_msg()       tx msg to mac task for tx hang | ||
|  |  * @param -  [timer_id]              timer id | ||
|  |  * @param -  [arg] | ||
|  |  * @return - [none] | ||
|  |  */ | ||
|  | void mac_tx_hang_msg(timer_id_t timer_id, void * arg); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief - mac_tx_hang_handle()    handle tx hang | ||
|  |  * @return - [none] | ||
|  |  */ | ||
|  | void mac_tx_hang_handle(); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief -  mac_set_bcast_hwretry_cfg()     cfg bcast hwretry enable or disable | ||
|  |  * @param -  [pdev]                          pdev | ||
|  |  * @param -  [ena]                           disable/enable | ||
|  |  * @return - [none] | ||
|  |  */ | ||
|  | void mac_set_bcast_hwretry_cfg(mac_pdev_t *pdev, uint8_t ena); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief -  mac_get_bcast_hwretry_cfg()     get bcast hwretry cfg | ||
|  |  * @param -  [pdev]                          pdev | ||
|  |  * @return - [cfg] | ||
|  |  */ | ||
|  | uint32_t mac_get_bcast_hwretry_cfg(mac_pdev_t *pdev); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief - mac_rx_hang_handle()    handle rx hang | ||
|  |  *                                  try to cold restart mac | ||
|  |  * @return - [none] | ||
|  |  */ | ||
|  | void mac_rx_hang_handle(mac_pdev_t *pdev); | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | } | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #endif // !MAC_PDEV_H
 |