225 lines
7.0 KiB
C
Executable File
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 */
|