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

214 lines
7.0 KiB
C

/****************************************************************************
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 PLC_MME_DIAGNOSE_H
#define PLC_MME_DIAGNOSE_H
/* os shim includes */
#include "os_types_api.h"
#include "plc_fr.h"
#include "plc_mme.h"
#include "plc_utils.h"
#ifdef __cplusplus
extern "C" {
#endif
/* pack for the structures in the whole file */
#pragma pack(push) /* save the pack status */
#pragma pack(1) /* 1 byte align */
/* diag message ID definition */
#define MME_DIAG_MSG_ID_INVALID 0
#define MME_DIAG_MSG_ID_APP 1
#define MME_DIAG_MSG_ID_ZC_COLLECT_IND 2
#define MME_DIAG_MSG_ID_ZC_RPT 3
#define MME_DIAG_MSG_ID_TSFM_LOG_RPT 4
#define MME_DIAG_MSG_ID_PCO_SNR_RPT 5
/* maximum number of level snr stats reported in transformer detection log */
#define PLC_TSFM_LOG_MAX_LEVEL 2
/* definition of each sta snr info */
typedef struct _mme_diag_sta_snr_info {
/* tei of the sta */
tei_t sta_tei;
/* downlink snr */
int8_t dl_snr;
/* uplink snr */
int8_t ul_snr;
} mme_diag_sta_snr_info_t;
/* definition of pco snr report */
typedef struct _mme_diag_pco_snr_rpt {
/* tei of the proxy sending this packet */
tei_t pco_tei;
/* number of direct sub sta */
uint16_t sub_sta_cnt;
/* snr info of each sub sta */
mme_diag_sta_snr_info_t sta_snr[0];
} mme_diag_pco_snr_rpt_t;
/* definition of level snr statistics */
typedef struct _mme_diag_tsfm_level_snr {
/* level info */
uint8_t level :4,
/* flag to mark if the level data is valid */
valid :1,
/* reserved for future */
rsvd :3;
/* average snr */
int8_t snr;
/* received count */
uint16_t cnt;
} mme_diag_tsfm_nw_level_snr_t;
/* definition of peer snr statistics */
typedef struct _mme_diag_tsfm_peer_snr {
/* level info */
uint8_t level :4,
/* reserved for future */
rsvd :4;
/* mac address info. big endian */
uint8_t addr[6];
/* average snr, unit is (1 db >> 8) */
int16_t snr;
/* received count */
uint16_t cnt;
} mme_diag_tsfm_nw_peer_snr_t;
/* definition of zc ntb diff statistics */
typedef struct _mme_diag_tsfm_ntb_diff {
/* zc ntb delta variance of the last statistics */
uint32_t ntb_delta_var;
/* zc ntb delta average of the last statistics */
uint32_t ntb_delta_avg;
/* zc period difference average of the last statistics */
uint32_t period_delta_var_avg;
} mme_diag_tsfm_nw_ntb_diff_t;
/* definition of tranformer statistics */
typedef struct _mme_diag_tsfm_nw_stat {
/* the STA reporting zero corss NTB */
uint32_t nid :24,
/* reserved for future */
rsvd :8;
/* level snr statistics */
mme_diag_tsfm_nw_level_snr_t level_snr[PLC_TSFM_LOG_MAX_LEVEL];
/* peer snr statistics */
mme_diag_tsfm_nw_peer_snr_t peer_snr[PLC_TSFM_LOG_MAX_LEVEL];
/* zc ntb diff statistics */
mme_diag_tsfm_nw_ntb_diff_t ntb_diff;
} mme_diag_tsfm_nw_stat_t;
typedef struct _mme_diag_tsfm_log_rpt {
/* number of network info in the array */
uint8_t nn_nwm_cnt :6,
/* flag to mark if current network is locked */
locked :1,
/* reserved for future */
rsvd :1;
/* duration since last tsfm check. unit is 1s */
uint16_t last_check_dur;
/* network statistics. first one in the array is the current network
* network statistics.
*/
mme_diag_tsfm_nw_stat_t nn_nw[0];
} mme_diag_tsfm_log_rpt_t;
/* each ntb_diff_value_t contain 2 NTB diff value.
* please use ntb_diff1 to access the 1st value and ntb_diff2 for the 2nd one.
*/
typedef struct _diag_ntb_diff_value {
union {
struct {
uint32_t ntb_diff1 :20;
uint32_t _reserved_1 :12;
uint8_t _reserved_2;
};
struct {
uint8_t _reserved_3;
uint32_t _reserved_4 :12;
uint32_t ntb_diff2 :20;
};
uint8_t data[5];
};
} diag_ntb_diff_value_t;
/* definition of zero cross NTB report */
typedef struct _mme_diag_zc_ntb_report {
/* the STA reporting zero corss NTB */
tei_t sta;
/* number of zero cross NTB collected */
uint8_t clct_cnt;
/* standard NTB */
uint32_t std_ntb;
/* each item contain 2 NTB diff values */
diag_ntb_diff_value_t ntb_diff_val[0];
} mme_diag_zc_ntb_report_t;
/* definition of zero cross NTB collect indication */
typedef struct _mme_diag_zc_ntb_clct_ind {
/* the STA should collect zero cross NTB */
tei_t sta;
/* ntb collection period. see MME_ZC_CP_XXX */
uint8_t clct_period;
/* number of zero cross NTB to collect */
uint8_t clct_cnt;
} mme_diag_zc_ntb_clct_ind_t;
/* note that this data structure must be 4 bytes aligned */
typedef struct _mme_diag_app {
/* application id of this diagnose data */
uint8_t app_id;
/* reserved for future */
uint8_t rsvd[3];
/* application specific data */
uint8_t data[0];
} mme_diag_app_t;
/* note that this data structure must be 4 bytes aligned */
typedef struct _mme_diagnose {
/* chip vendor ID */
uint16_t chip_vendor_id;
/* note that, below fields are vendor specific data */
/* message id, see MME_DIAG_MSG_ID_XXX */
uint8_t msg_id;
/* reserved for future */
uint8_t rsvd;
/* message specific data. see mme_diag_xxx */
uint8_t data[0];
} mme_diagnose_t;
/* note that this data structure must be 2 bytes aligned */
typedef struct _spg_mme_diagnose {
/* chip vendor ID */
uint16_t chip_vendor_id;
/* note that, below fields are vendor specific data */
/* message id, see MME_DIAG_MSG_ID_XXX */
uint8_t msg_id;
/* reserved for future */
uint8_t rsvd[3];
/* message specific data. see mme_diag_xxx */
uint8_t data[0];
} spg_mme_diagnose_t;
#pragma pack(pop) /* restore the pack status */
#ifdef __cplusplus
}
#endif
#endif /* PLC_MME_DIAGNOSE_H */