254 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			254 lines
		
	
	
		
			6.6 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_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
 |