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
|