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

162 lines
5.2 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_CHECK_SPUR_H__
#define __MAC_CHECK_SPUR_H__
/* os shim includes */
#include "os_types.h"
#include "os_timer_api.h"
#include "mac_sched_hw.h"
#ifdef __cplusplus
extern "C" {
#endif
#if PHY_HW_SPIKE_OPTIMIZATION
/* PHY_BBAI_SLIDE_WINDOWS:
* 20ms * 3 = 60ms
* the phy_chn_nf_update function takes 118ms to execute twice.
* total time = 20*N + 118
*/
#define MAC_CHECK_SPUR_MS 178
#define MAC_CHECK_SPUR_MAGIN_MS 400
#else
/* PHY_BBAI_FIX_WINDOWS:
* 10ms * 6 = 60ms
* time = 10*N + 25
* PHY_BBAI_SLIDE_WINDOWS:
* 20ms * 3 = 60ms
* time = 30*N + 25
*/
#define MAC_CHECK_SPUR_MS 85
#define MAC_CHECK_SPUR_MAGIN_MS 200
#endif
/*
* totally check spur duration
* is compose of actual HW check spur time + margin time
* (200 + 10) = 210ms
*/
#define MAC_CHECK_SPUR_NTB MAC_MS_TO_NTB(MAC_CHECK_SPUR_MS + \
MAC_CHECK_SPUR_MAGIN_MS)
typedef enum {
/* mac start check spur initalization status */
MAC_CHECK_SPUR_INIT,
/* mac CCO start check spur period status */
MAC_CCO_CHECK_SPUR_WAIT_PERIOD_START,
/* mac CCO start check spur status */
MAC_CCO_CHECK_SPUR_WAIT_PERIOD_END,
/* mac sta start check spur status */
MAC_STA_CHECK_SPUR
} MAC_CHECK_SPUR_ENUM;
/* this is per pdev, for check spur */
typedef struct _mac_check_spur_ctxt {
uint8_t
/* cco check spur status
* 0: initalization status
* 1: start check spur period
* 2: start check spur
*/
is_check_spur_sts : 2,
/* check_spur_en = 0 : disable check spur
* check_spur_en = 1 : enable check spur
*/
check_spur_en : 1,
/* record the continuous spur check cnt */
con_spur_cnt : 3,
/* sta period check spur */
sta_period_spur_en : 1,
resv : 1;
#if CCO_CHECK_SPUR_SUPPORT
/* check spur timer */
timer_id_t cco_check_spur_timer;
#else
/*sta check spur timer*/
timer_id_t sta_check_spur_timer;
#endif
uint32_t check_spur_time_ntb;
uint64_t next_bcn_start_ntb;
/* record ratio */
uint32_t do_checkspur_cnt;
uint32_t do_checkspur_success_cnt;
} mac_check_spur_ctxt_t;
/**
*@brief mac_check_spur_init mac check spur init
*@param spur_ctxt point to mac_check_cpur_ctxt
*@param check_spur_en check spur enable/disable
*@param check_spur_time_ntb check spur time ntb
*@exception [none.]
*@return [0]
*/
uint32_t mac_check_spur_init(mac_check_spur_ctxt_t *spur_ctxt, \
uint32_t check_spur_time_ntb);
/**
*@brief mac_check_spur mac check spur.
*@param spur_ctxt point to mac_check_cpur_ctxt
*@param pdev point to pdev
*@param time_ms time ms
*@param is_check_slot whether need judge slot
*@exception [none.]
*@return [0]
*/
uint32_t mac_check_spur(mac_check_spur_ctxt_t *spur_ctxt, \
void *pdev, uint32_t time_ms, bool_t is_check_slot);
/**
*@brief mac_check_spur_for_txhang mac check spur for tx hang.
*@exception [none.]
*@return [0]
*/
uint32_t mac_check_spur_for_txhang();
/**
*@brief mac_check_spur_en mac check spur timer enable.
*@param spur_ctxt point to mac_check_cpur_ctxt
*@param enable enalbe/disable.
*@exception [none.]
*@return [0]
*/
uint32_t mac_check_spur_en(mac_check_spur_ctxt_t *spur_ctxt, uint32_t enable);
/**
*@brief mac_check_spur_cert mac check spur for cert mode.
*@param time_ms do bbai time ms
*@exception [none.]
*@return [0: success, or not fail]
*/
uint32_t mac_check_spur_cert(uint32_t time_ms);
/**
*@brief mac_phy_channel_est_msg mac phy channel estimed.
*@param time_ms do bbai time ms
*@exception [none.]
*@return [0: success, or not fail]
*/
uint32_t mac_phy_channel_est_msg(uint32_t time_ms);
#ifdef __cplusplus
}
#endif
#endif