213 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			213 lines
		
	
	
		
			7.1 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_ZC_H_
 | 
						|
#define _MAC_ZC_H_
 | 
						|
 | 
						|
/* common */
 | 
						|
#include "os_types.h"
 | 
						|
#include "iot_pkt.h"
 | 
						|
#include "os_timer.h"
 | 
						|
#include "plc_protocol.h"
 | 
						|
#include "iot_config.h"
 | 
						|
/* mac layer */
 | 
						|
#include "plc_mac_cfg.h"
 | 
						|
#include "mac_dsr.h"
 | 
						|
#include "mac.h"
 | 
						|
#include "mac_vdev.h"
 | 
						|
#include "mac_zc_api.h"
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
/* enable/disbale mac zc start follow vdev (for sta) */
 | 
						|
#define MAC_ZC_START_FOLLOW_VDEV            \
 | 
						|
    (0 && (TARGET_VERSION >= TARGET_KUNLUN3))
 | 
						|
 | 
						|
/* mac zc support max num, same as mac pdev num */
 | 
						|
#define MAC_ZC_NUM_MAX                      MAX_PDEV_NUM
 | 
						|
 | 
						|
/* mac zc support phase line */
 | 
						|
#define MAC_ZC_PHASE_A                      0
 | 
						|
#define MAC_ZC_PHASE_B                      1
 | 
						|
#define MAC_ZC_PHASE_C                      2
 | 
						|
#define MAC_ZC_PHASE_ALL                    3
 | 
						|
#define MAC_ZC_PHASE_CNT                    3
 | 
						|
 | 
						|
/* mac zc ntb get pkt distribution
 | 
						|
 * GET_RESV + RPT_HEAD + RPT_NTB_DATA
 | 
						|
 */
 | 
						|
/* mac zc ntb get pkt reserve length */
 | 
						|
#define MAC_ZC_NTB_GET_RESV_SIZE            sizeof(mac_zc_ntb_get_para_t)
 | 
						|
 | 
						|
/* mac zc ntb get reserve + rpt_header length */
 | 
						|
#define MAC_ZC_NTB_RESV_HEAD_SIZE           \
 | 
						|
    (sizeof(mac_zc_ntb_get_para_t) + sizeof(mac_zc_ntb_rpt_t))
 | 
						|
 | 
						|
#define MAC_ZC_RPT_PKT_GET(pkt, ntb_cnt, mid) \
 | 
						|
    IOT_PKT_GET(pkt, MAC_ZC_NTB_RESV_HEAD_SIZE + ((ntb_cnt) \
 | 
						|
    * sizeof(uint32_t)), MAC_ZC_NTB_GET_RESV_SIZE, mid)
 | 
						|
 | 
						|
/* set mac zc function command id */
 | 
						|
typedef enum _mac_zc_func_cmd_id {
 | 
						|
    /* indicate mac zc reset hw, then re-training */
 | 
						|
    MAC_ZC_FUNC_CMD_RESET_HW = 0,
 | 
						|
    /* indicate mac zc stop collect */
 | 
						|
    MAC_ZC_FUNC_CMD_COLLECT_STOP,
 | 
						|
    /* indicate mac zc delay reset hw */
 | 
						|
    MAC_ZC_FUNC_CMD_DELAY_RESET_HW,
 | 
						|
    /* notification ntb stabilization */
 | 
						|
    MAC_ZC_FUNC_CMD_NTB_STABLE_NOTIF,
 | 
						|
    /* mac zc set command id max */
 | 
						|
    MAC_ZC_FUNC_CMD_ID_MAX,
 | 
						|
} mac_zc_func_cmd_id_t;
 | 
						|
 | 
						|
/* mac dsr set entry function address */
 | 
						|
typedef void (*mac_zc_dsr_set_entry_fn_t)(void *table, \
 | 
						|
    uint8_t dsr_id, void *entry);
 | 
						|
 | 
						|
/* mac dsr clean function address */
 | 
						|
typedef void (*mac_zc_dsr_clr_fn_t)(uint32_t dsr_id);
 | 
						|
 | 
						|
/* zero-cross ntb get api parameter */
 | 
						|
typedef struct _mac_zc_ntb_get_para {
 | 
						|
    /* get ntb count */
 | 
						|
    uint32_t count                  :16,
 | 
						|
    /* indicate get zc ntb is full period or half period.
 | 
						|
     * 1: full period; 0: half period
 | 
						|
     */
 | 
						|
        is_full_period              :1,
 | 
						|
    /* indicate get zc ntb is history or current ntb.
 | 
						|
     * 1: history ntb; 0: current ntb
 | 
						|
     */
 | 
						|
        is_get_history              :1,
 | 
						|
        rsvd0                       :14;
 | 
						|
    /* indicate get targe network id, if the value is INVALID_NID, it is
 | 
						|
     * represented as current network
 | 
						|
     */
 | 
						|
    uint32_t nid                    :24,
 | 
						|
        rsvd1                       :8;
 | 
						|
    /* indicate get target history ntb. if is_get_history is false, then not
 | 
						|
     * care this parameter
 | 
						|
     */
 | 
						|
    uint32_t ntb;
 | 
						|
} mac_zc_ntb_get_para_t;
 | 
						|
 | 
						|
 | 
						|
#if !MAC_ZC_ENABLE
 | 
						|
#define mac_zc_systic_trig()
 | 
						|
 | 
						|
#define mac_zc_train_hw_timeout_internal(id, arg)
 | 
						|
 | 
						|
#define mac_start_zc_ntb_collect_internal(pdev_id, vdev_id, pkt) \
 | 
						|
    (ERR_NOSUPP); \
 | 
						|
    do { \
 | 
						|
        (void)pdev_id; \
 | 
						|
        (void)vdev_id; \
 | 
						|
        (void)pkt; \
 | 
						|
    } while(0)
 | 
						|
 | 
						|
#define mac_zc_set_func_cmd_internal(zc_id, cmd, arg)
 | 
						|
 | 
						|
#define mac_zc_set_func_cmd(zc_id, cmd, arg)
 | 
						|
 | 
						|
#else //!MAC_ZC_ENABLE
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief                   get mac zero-cross ntb data
 | 
						|
 * @param id:               which pdev to be collected
 | 
						|
 * @param rpt:              report mac zc data parameter
 | 
						|
 * @param count:            number of consecutive zero-cross ntb to be collected
 | 
						|
 * @param is_full_period:   flag to mark if it is collecting full period.
 | 
						|
 * @param is_history_ntb:   flag to mark if it is collecting history ntb.
 | 
						|
 * @param nid:              target network id, 0: means local network id
 | 
						|
 * @param ntb:              target historical zc ntb that needs to be collected
 | 
						|
 *
 | 
						|
 * @retval:                 error code,see ERR_XXX
 | 
						|
 */
 | 
						|
uint32_t mac_zc_get_ntb(uint8_t id, mac_zc_ntb_rpt_t *rpt,
 | 
						|
    uint16_t count, uint8_t is_full_period, uint8_t is_history_ntb,
 | 
						|
    uint32_t nid, uint32_t ntb);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief                   triger mac zc by system timer
 | 
						|
 * @retval:                 none
 | 
						|
 */
 | 
						|
void mac_zc_systic_trig(void);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief                   mac_zc_train_hw_timeout_internal
 | 
						|
 * @param id:               timer id
 | 
						|
 * @param arg:              timer callback fn arg(zc ptr)
 | 
						|
 * @retval:                 none
 | 
						|
 */
 | 
						|
void mac_zc_train_hw_timeout_internal(uint32_t id, void *arg);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief                   start mac layer zero-cross ntb collection. this
 | 
						|
 *                          function is similar to mac_start_zc_ntb_collect
 | 
						|
 *                          but can only be called inside mac context.
 | 
						|
 * @param pdev_id:          which pdev to be collected
 | 
						|
 * @param vdev_id:          which vdev to be collected
 | 
						|
 * @param pkt:              get zc parameter in the reserve block, and the
 | 
						|
 *                          result will fill data block.
 | 
						|
 *
 | 
						|
 * @retval: 0        - for success case
 | 
						|
 * @retval: othersie - error code
 | 
						|
 */
 | 
						|
uint32_t mac_start_zc_ntb_collect_internal(uint8_t pdev_id, uint8_t vdev_id,
 | 
						|
    iot_pkt_t *pkt);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief                   set zc function cmd message
 | 
						|
 * @param zc_id:            which pdev's zc to set
 | 
						|
 * @param cmd:              set command, see mac_zc_func_cmd_id_t.
 | 
						|
 * @param arg:              command parameter.
 | 
						|
 * @retval:                 none
 | 
						|
 */
 | 
						|
void mac_zc_set_func_cmd_internal(uint8_t zc_id, uint8_t cmd, void *arg);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief                   set zc function cmd message
 | 
						|
 * @param zc_id:            which pdev's zc to set
 | 
						|
 * @param cmd:              set command, see mac_zc_func_cmd_id_t.
 | 
						|
 * @param arg:              command parameter.
 | 
						|
 * @retval:                 none
 | 
						|
 */
 | 
						|
void mac_zc_set_func_cmd(uint8_t zc_id, mac_zc_func_cmd_id_t cmd, void *arg);
 | 
						|
 | 
						|
#endif //!MAC_ZC_ENABLE
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief                   initialize mac zc system
 | 
						|
 *
 | 
						|
 * @param id:               mac zc pdev id
 | 
						|
 * @param task_hdl:         current task handle ctxt
 | 
						|
 * @param dsr_tbl:          current task dsr function table entry address
 | 
						|
 * @param dsr_set_fn:       current taks set dsr function address
 | 
						|
 * @param dsr_clr_fn:       current taks clear dsr function address
 | 
						|
 *
 | 
						|
 * @retval                  0:        for success case
 | 
						|
 *                          othersie: error code
 | 
						|
 */
 | 
						|
uint32_t mac_zc_system_init(uint8_t id, void *task_hdl, void *dsr_tbl,
 | 
						|
    void *dsr_set_fn, void *dsr_clr_fn);
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif //_MAC_ZC_H_
 |