337 lines
10 KiB
C
Executable File
337 lines
10 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 CVG_BWM_H
|
|
#define CVG_BWM_H
|
|
|
|
/* os shim includes */
|
|
#include "os_types.h"
|
|
|
|
/* public api includes */
|
|
#include "cvg_api.h"
|
|
#include "plc_fr.h"
|
|
#include "mac_bcm_api.h"
|
|
|
|
/* cvg module internal includes */
|
|
#include "cvg.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* define minimum band switch delay. unit is 1 ms */
|
|
#define CVG_BWM_BAND_SWITCH_DELAY_MIN (2 * 60 * 1000)
|
|
|
|
/* define fast band switch delay. unit is 1ms */
|
|
#define CVG_BWM_BAND_SWITCH_DELAY_FAST (15 * 1000)
|
|
|
|
/* define minimum rf channel switch delay. unit is 1s */
|
|
#define CVG_BWM_RF_CHANNEL_SWITCH_DELAY_MIN (2 * 60)
|
|
|
|
/* define fast rf channel switch delay. unit is 1s */
|
|
#define CVG_BWM_RF_CHANNEL_SWITCH_DELAY_FAST (15)
|
|
|
|
/* define rf channel switch delay for cert test. unit is 1s */
|
|
#define CVG_BWM_RF_CHANNEL_SWITCH_DELAY_CERT_TEST (25)
|
|
|
|
/* define joined sta count of enabling plc band or rf channel fast switching */
|
|
#define CVG_BWM_FB_SWITCH_FAST_STA_CNT (10)
|
|
|
|
/*
|
|
* cvg_bwm_init() - global init of bandwdith management module
|
|
* @glb: pointer of cvg global data
|
|
* @cfg: pointer of cvg configuration
|
|
*
|
|
* return:
|
|
* 0 -- for success case
|
|
* othersie -- error code
|
|
*/
|
|
uint32_t cvg_bwm_init(cvg_global_t *glb, cvg_cfg_t *cfg);
|
|
|
|
/*
|
|
* cvg_bwm_init_vdev() - vdev init of bandwdith management module
|
|
* @vdev: pointer of vdev to be init
|
|
* @cfg: pointer of vdev configuration
|
|
*
|
|
* return:
|
|
* 0 -- for success case
|
|
* othersie -- error code
|
|
*/
|
|
uint32_t cvg_bwm_init_vdev(cvg_vdev_t *vdev, cvg_vdev_cfg_t *cfg);
|
|
|
|
/*
|
|
* cvg_bwm_deinit_vdev() - vdev deinit of bandwidth management module
|
|
* @vdev: pointer of vdev to be deinit
|
|
*/
|
|
void cvg_bwm_deinit_vdev(cvg_vdev_t *vdev);
|
|
|
|
/*
|
|
* cvg_bwm_reset_vdev() - vdev reset of bandwdith management module
|
|
* @vdev: pointer of vdev to be reset
|
|
* @cfg: pointer of vdev configuration
|
|
*/
|
|
void cvg_bwm_reset_vdev(cvg_vdev_t *vdev, cvg_vdev_cfg_t *cfg);
|
|
|
|
/*
|
|
* cvg_bwm_update_bc() - trigger bandwidth management module to update
|
|
* beacon template
|
|
* @vdev: pointer to vdev
|
|
* @ent: pointer to beacon update descriptor
|
|
* @rf_chg: pointer to beacon rf channel change entry to be forwarded,
|
|
* it is only valid for single mode sta device
|
|
*
|
|
* return:
|
|
* 0 -- for success case
|
|
* othersie -- error code
|
|
*/
|
|
uint32_t cvg_bwm_update_bc(cvg_vdev_t *vdev, mac_bc_update_t *ent,
|
|
mac_bc_rf_channel_chg_t *rf_chg);
|
|
|
|
/*
|
|
* cvg_bwm_update_ts() - update time slot assignment info
|
|
* @vdev: pointer to vdev
|
|
* @ts: pointer to new time slot assignment info to be updated
|
|
*/
|
|
void cvg_bwm_update_ts(cvg_vdev_t *vdev, mac_bc_time_slot_t *ts);
|
|
|
|
/*
|
|
* cvg_bwm_fwd_lid_check() - check which lid should be chose
|
|
* @vdev: pointer to vdev
|
|
* @lid: lid in frame control field
|
|
* @retval: the appropriate tx info lid
|
|
*/
|
|
uint8_t cvg_bwm_fwd_lid_check(cvg_vdev_t *vdev, uint8_t lid);
|
|
|
|
/**
|
|
* @brief cvg_bwm_update_fb_chg() - update frequency band change entry
|
|
* assignment info
|
|
* @param vdev: pointer to vdev
|
|
* @param fb_chg: pointer to frequency band change entry assignment info
|
|
* to be updated. if fb_chg == NULL, indicates that no
|
|
* freq band change entries in the beacon frame.
|
|
* @param bc_band_id: freq band ID of the current received beacon.
|
|
*/
|
|
void cvg_bwm_update_fb_chg(cvg_vdev_t *vdev, mac_bc_freq_chg_t *fb_chg,
|
|
uint8_t bc_band_id);
|
|
|
|
/*
|
|
* cvg_bwm_get_bc_period() - get current beacon period
|
|
* @vdev: pointer to vdev
|
|
*
|
|
* return:
|
|
* beacon period. unit is 1ms.
|
|
*/
|
|
uint32_t cvg_bwm_get_bc_period(cvg_vdev_t *vdev);
|
|
|
|
/**
|
|
* @brief cvg_bwm_set_fb() - set frequency band
|
|
* @param vdev: pointer to vdev
|
|
* @param freq_band_id: new frequency band ID to be set.
|
|
* @retval: 0 -- success
|
|
* @retval: otherwise -- error code
|
|
*/
|
|
uint32_t cvg_bwm_set_fb(cvg_vdev_t *vdev, uint8_t freq_band_id);
|
|
|
|
/**
|
|
* @brief cvg_bwm_get_fb() - gets the currently used frequency band information.
|
|
* @param vdev: pointer to vdev
|
|
* @retval: currently used frequency band id.
|
|
*/
|
|
uint8_t cvg_bwm_get_fb(cvg_vdev_t *vdev);
|
|
|
|
/**
|
|
* @brief cvg_bwm_init_fb() - initialize freq band ID.
|
|
* @param vdev: pointer to vdev
|
|
*/
|
|
void cvg_bwm_init_fb(cvg_vdev_t *vdev);
|
|
|
|
/**
|
|
* @brief cvg_bwm_config_self_fb() - set frequency band to MAC layer
|
|
* @param vdev: pointer to vdev
|
|
* @param freq_band_id: new frequency band ID to be set.
|
|
* @param lock: if set, band will be locked.
|
|
* @return:
|
|
* ERR_OK - success
|
|
* otherwise - see ERR_XXX
|
|
*/
|
|
uint32_t cvg_bwm_config_self_fb(cvg_vdev_t *vdev, uint8_t freq_band_id,
|
|
uint8_t lock);
|
|
|
|
/**
|
|
* @brief cvg_bwm_fg_chg_timeout_handle() - frequency band change timeout
|
|
* fuction.
|
|
* @param vdev: pointer to vdev
|
|
* @return:
|
|
* ERR_OK - success
|
|
* otherwise - see ERR_XXX
|
|
*/
|
|
uint32_t cvg_bwm_fb_chg_timeout_handle(cvg_vdev_t *vdev);
|
|
|
|
/**
|
|
* @brief cvg_bwm_set_ts_reuse() - set reuse time solt flag. the flag allow to
|
|
* reuse the time slot if we miss beacons for
|
|
* following beacon periods to improve channel
|
|
* utilization.
|
|
* @param vdev: pointer to vdev
|
|
* @param enable: non-zero to enable reuse time solt. 0 to disable
|
|
* reuse time solt.
|
|
*/
|
|
void cvg_bwm_set_ts_reuse(cvg_vdev_t *vdev, uint8_t enable);
|
|
|
|
/**
|
|
* @brief cvg_bwm_is_ts_reuse() - check if reuse time solt flag is enabled.
|
|
* @param vdev: pointer to vdev
|
|
* @retval: 0 -- reuse time solt is disable
|
|
* @retval: otherwise -- reuse time solt is enable
|
|
*/
|
|
uint8_t cvg_bwm_is_ts_reuse(cvg_vdev_t *vdev);
|
|
|
|
/**
|
|
* @brief cvg_bwm_is_rf_update() - check if rf channel change info changed
|
|
* @param vdev: pointer to vdev
|
|
* @retval: 1 -- changed
|
|
* @retval: 0 -- not changed
|
|
*/
|
|
uint8_t cvg_bwm_is_rf_update(cvg_vdev_t *vdev);
|
|
|
|
/**
|
|
* @brief cvg_bwm_is_fb_update() - check if frequency band change info changed.
|
|
* @param vdev: pointer to vdev
|
|
* @retval: 1 -- changed
|
|
* @retval: 0 -- not changed
|
|
*/
|
|
uint8_t cvg_bwm_is_fb_update(cvg_vdev_t *vdev);
|
|
|
|
/**
|
|
* @brief cvg_bwm_check_alloc_lid() - check if beacon time slot lid is updated
|
|
* @param vdev: pointer to vdev
|
|
*/
|
|
void cvg_bwm_check_alloc_lid(cvg_vdev_t *vdev);
|
|
|
|
#if (PLC_SUPPORT_CCO_ROLE)
|
|
|
|
/*
|
|
* cvg_bwm_cco_request_lid() - request bandwidth for specified lid
|
|
* @vdev: pointer of vdev
|
|
* @lid: specified lid
|
|
*
|
|
* return:
|
|
* 0 - success
|
|
* otherwise - error code
|
|
*/
|
|
uint32_t cvg_bwm_cco_request_lid(cvg_vdev_t *vdev, uint8_t lid);
|
|
|
|
/*
|
|
* cvg_bwm_cco_release_lid() - release bandwidth for specified lid
|
|
* @vdev: pointer of vdev
|
|
* @lid: specified lid
|
|
*/
|
|
void cvg_bwm_cco_release_lid(cvg_vdev_t *vdev, uint8_t lid);
|
|
|
|
/*
|
|
* cvg_bwm_cco_bp_check() - check if beacon period parameters need to be updated
|
|
* @vdev: pointer to vdev
|
|
*/
|
|
void cvg_bwm_cco_bp_check(cvg_vdev_t *vdev);
|
|
|
|
/*
|
|
* cvg_bwm_cco_bp_end_alert() - beacon period end alert notification callback
|
|
* of bwm module
|
|
* @vdev: pointer of vdev
|
|
*/
|
|
void cvg_bwm_cco_bp_end_alert(cvg_vdev_t *vdev);
|
|
|
|
/*
|
|
* cvg_bwm_get_next_bc_period() - get duration of next beacon period
|
|
* @vdev: pointer of vdev
|
|
*
|
|
* return:
|
|
* beacon period. unit is 1ms.
|
|
*/
|
|
uint32_t cvg_bwm_get_next_bc_period(cvg_vdev_t *vdev);
|
|
|
|
/**
|
|
* @brief cvg_bwm_cco_set_csma_slot_average() - set csma slot average
|
|
* distribution of each phase.
|
|
* @param vdev: pointer to vdev
|
|
* @param enable: non-zero to enable csma slot average. 0 to disable
|
|
* csma solt average.
|
|
*/
|
|
void cvg_bwm_cco_set_csma_slot_average(cvg_vdev_t *vdev, uint8_t enable);
|
|
|
|
/**
|
|
* @brief cvg_bwm_cco_get_rf_slot_ratio() - get rf slot ratio,
|
|
* the ratio of rf beacon slot duration to hplc beacon slot duration
|
|
* @param vdev: pointer to vdev
|
|
*
|
|
* return: rf slot ratio
|
|
*/
|
|
uint8_t cvg_bwm_cco_get_rf_slot_ratio(cvg_vdev_t *vdev);
|
|
|
|
/*
|
|
* cvg_bwm_cco_check_cand_proxy_assign_ts() - check if candidate proxy can be
|
|
* assigned time slots when node selects the cand proxy to join network
|
|
* or roam.
|
|
* @vdev: pointer to vdev
|
|
* @nw_stat: pco type statistics of whole network
|
|
* @sub_stat: sub-pco type statistics of peer
|
|
* @peer: pointer to peer
|
|
* @cand_proxy: pointer to candidate proxy
|
|
* @cand_link: link type of candidate proxy, see PLC_DEV_COMM_TYPE_XXX
|
|
*
|
|
* return:
|
|
* 0 - can't assign ts
|
|
* 1 - can assign ts
|
|
*/
|
|
uint32_t cvg_bwm_cco_check_cand_proxy_assign_ts(cvg_vdev_t *vdev,
|
|
uint16_t nw_stat[][CVG_PRM_LINK_BM_P_CNT],
|
|
uint16_t sub_stat[][CVG_PRM_LINK_BM_P_CNT], cvg_peer_info_t *peer,
|
|
cvg_peer_info_t *cand_proxy, uint8_t cand_link);
|
|
|
|
/**
|
|
* @brief cvg_bwm_cco_get_bcsma_valid() - get if current bcsma is valid
|
|
* @param vdev: pointer to vdev
|
|
*
|
|
* return:
|
|
* 0 - bcsma is not valid
|
|
* 1 - bcsma is valid
|
|
*/
|
|
uint8_t cvg_bwm_cco_get_bcsma_valid(cvg_vdev_t *vdev);
|
|
|
|
/**
|
|
* @brief cvg_bwm_cco_is_rf_chging() - check if the rf channel is changing
|
|
* @param vdev: pointer to vdev
|
|
*
|
|
* return:
|
|
* 0 - no change
|
|
* 1 - rf is changing
|
|
*/
|
|
uint8_t cvg_bwm_cco_is_rf_chging(cvg_vdev_t *vdev);
|
|
|
|
#else /* PLC_SUPPORT_CCO_ROLE */
|
|
|
|
#define cvg_bwm_get_next_bc_period(vdev) (0)
|
|
|
|
#define cvg_bwm_cco_bp_check(vdev)
|
|
|
|
#endif /* PLC_SUPPORT_CCO_ROLE */
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* CVG_BWM_H */
|