Files
kunlun/plc/halmac/hw/inc/mac_sched_hw.h
2024-09-28 14:24:04 +08:00

225 lines
7.0 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_SCHED_HW_H
#define MAC_SCHED_HW_H
/* os shim includes */
#include "os_types.h"
/* mac module internal includes */
#include "mac_vdev.h"
/* plc public api includes */
#include "plc_fr.h"
#ifdef __cplusplus
extern "C" {
#endif
#if HW_PLATFORM == HW_PLATFORM_SIMU
/* convert ntb to ms. in simulator, the ntb unit is 1ms */
#define MAC_NTB_TO_MS(ntb) (ntb)
/* convert ms to ntb. in simulator, the ntb uint is 1ms */
#define MAC_MS_TO_NTB(ms) (ms)
/* alead alert time before the end of current beacon period. unit is 1ms. */
#define MAC_BP_AHEAD_ALERT_DUR 70
/* ahead time before next beacon period while config the next bp scheduler.
* unit is 1ms.
*/
#define MAC_BP_AHEAD_NEXT_BP_DUR 20
/* golden gap value suggested by HW team. this value will assist HW to sync
* up NTB with remote device. This value shouldn't be changed unless required
* by HW team. the unit is 1 NTB.
*/
#define MAC_SCHED_GOLDEN_GAP 13541
#else /* HW_PLATFORM */
/* convert ntb to ms. in HW, the ntb clock freq is 25 mhz. */
#define MAC_NTB_TO_MS(ntb) ((ntb) / (25 * 1000))
/* convert ms to ntb. in HW, the ntb clock freq is 25 mhz. */
#define MAC_MS_TO_NTB(ms) ((ms) * (25 * 1000))
/* ahead alert time before the end of current beacon period. unit is 1ms. */
#if !IOT_HTBUS_EN
#define MAC_BP_AHEAD_ALERT_DUR 70
#else
#define MAC_BP_AHEAD_ALERT_DUR 5
#endif
/* ahead time before next beacon period while config the next bp scheduler.
* unit is 1ms.
*/
#if !IOT_HTBUS_EN
#define MAC_BP_AHEAD_NEXT_BP_DUR 20
#else
#define MAC_BP_AHEAD_NEXT_BP_DUR 5
#endif
#if DBG_NTB_SYNC
/* TODO: for debug NTB has shift about 10us */
#define MAC_SYNC_SHIFT_NTB 125
#else
#define MAC_SYNC_SHIFT_NTB 0
#endif
/* SW set tx delay ntb time duration between tx start and first sample on power
* line
*/
#define MAC_SW_TX_BTS_DLY_NTB (895)
/* HW set tx delay ntb time duration between tx start and first sample on power
* line
*/
#define MAC_HW_TX_BTS_DLY_NTB (960)
/* golden gap value suggested by HW team. this value will assist HW to sync
* up NTB with remote device. This value shouldn't be changed unless required
* by HW team. the unit is 1 NTB.
*/
#define MAC_SCHED_GOLDEN_GAP ((13541) + MAC_SYNC_SHIFT_NTB)
#endif /* HW_PLATFORM */
/*
* @brief mac_sched_enable_hw_ntb_sync() - config HW to enable/disable automatic
* @brief HW NTB sync feature.
*
* @param vdev: pointer to mac vdev
* @param enable: 1 - enable. 0 - disable.
*/
void mac_sched_enable_hw_ntb_sync(mac_vdev_t *vdev, uint8_t enable);
/* mac_sched_sync_ntb() - config HW to sync up local NTB with the NTB
* of preferred network.
* @vdev: pointer to mac vdev
* @golden_gap: the time consumed from remote tx to local rx.
* @ntb_delta: the delta between local NTB and preferred network NTB
*/
void mac_sched_sync_ntb(mac_vdev_t *vdev, uint16_t golden_gap,
int32_t ntb_delta);
/* mac_sched_get_ntb() - get local NTB
* @vdev: pointer to mac vdev
*
* return:
* local NTB
*/
uint32_t mac_sched_get_ntb(mac_vdev_t *vdev);
/* mac_sched_get_neighbor_ntb() - get neighbor NTB
* @vdev: pointer to mac vdev
* @nid: neighbor nid
* return:
* neighbor NTB
*/
uint32_t mac_sched_get_neighbor_ntb(mac_vdev_t *vdev, nid_t nid);
/* mac_sched_get_ntb64() - get local NTB 64bit version
* @vdev: pointer to mac vdev
*
* return:
* local NTB 64bit version
*/
uint64_t mac_sched_get_ntb64(mac_vdev_t *vdev);
/* mac_sched_set_bp_ahead_alert() - config beacon period ahead alert interrupt
* to be fired right before ahead time.
* @vdev: pointer to mac vdev
* @ahead: ahead time. unit is 1 ms.
*/
void mac_sched_set_bp_ahead_alert(mac_vdev_t *vdev, uint16_t ahead);
/* mac_sched_set_recursive_mode() - set HW to work in either recursive mode or
* not. if recursive mode enabled, HW will
* re-run the command list in PING unless
* PONG is valid or SW stop the shceduler.
* @vdev: pointer to mac vdev
* @enable: 0 to disable and 1 to enable recursive mode.
*/
void mac_sched_set_recursive_mode(mac_vdev_t *vdev, uint8_t enable);
/* mac_sched_set_bp_start_ntb() - config start ntb of next beacon period
* @vdev: pointer to mac vdev
* @start_ntb: start ntb of next beacon period
*/
void mac_sched_set_bp_start_ntb(mac_vdev_t *vdev, uint32_t start_ntb);
/* mac_sched_set_bp_dur() - config duration of next beacon period
* @vdev: pointer to mac vdev
* @bp: duration of next beacon period
*/
void mac_sched_set_bp_dur(mac_vdev_t *vdev, uint16_t bp);
/* mac_sched_set_bp_cmd_list() - config command list of next beacon period
* @vdev: pointer to mac vdev
* @cmd: pointer to the array of the commands
* @cnt: number of cmd in the array
*/
void mac_sched_set_bp_cmd_list(mac_vdev_t *vdev, hw_sched_cmd_t *cmd,
uint16_t cnt);
/* mac_sched_get_cmd_list_cnt() - get number of pending command list include
* the command list being executed.
* @vdev: pointer to mac vdev
*
* return:
* number of pending command list
*/
uint8_t mac_sched_get_cmd_list_cnt(mac_vdev_t *vdev);
/* mac_sched_trigger_bp() - trigger HW to load the configuration of next
* beacon period
* @vdev: pointer to mac vdev
*/
void mac_sched_trigger_bp(mac_vdev_t *vdev);
/* mac_sched_enable_bp() - enable or disable HW scheduler
* @vdev: pointer to mac vdev
* @enable: 0 for disable and 1 for enable
*/
void mac_sched_enable_bp(mac_vdev_t *vdev, uint8_t enable);
/* mac_sched_get_lts() - get local free run timer tick
*
* return:
* local free run timer tick, 0.04us unit
*/
uint32_t mac_sched_get_lts();
/* mac_sched_get_bp_start_ntb() -get bp start ntb
* return: -start ntb
*/
uint32_t mac_sched_get_bp_start_ntb();
/* mac_sched_get_bp_dur() -get beacon period
* return: -bc period
*/
uint32_t mac_sched_get_bp_dur();
#ifdef __cplusplus
}
#endif
#endif /* MAC_SCHED_HW_H */