/******************************************************************
 * @file  error_record.h
 * @brief:    [file description] 
 * @author: guicheng.liu
 * @Date 2022年9月29日
 * COPYRIGHT NOTICE: (c) smartlogictech. All rights reserved. 
 * Change_date         Owner         Change_content
 * 2022年9月29日        guicheng.liu       create file

*****************************************************************/

#ifndef     ERROR_RECORD_H
#define     ERROR_RECORD_H
#include <type_define.h>

#define ERROR_RECORD_DEFINE_BASE   (0)
#define ERROR_RECORD_STEP          (40) // max 40 errors for each task 

#define ERROR_CONFIG (ERROR_RECORD_DEFINE_BASE + 0*ERROR_RECORD_STEP)
#define ERROR_FAPI   (ERROR_RECORD_DEFINE_BASE + 1*ERROR_RECORD_STEP)
#define ERROR_SSB    (ERROR_RECORD_DEFINE_BASE + 2*ERROR_RECORD_STEP)
#define ERROR_PDCCH  (ERROR_RECORD_DEFINE_BASE + 3*ERROR_RECORD_STEP)
#define ERROR_PDSCH  (ERROR_RECORD_DEFINE_BASE + 4*ERROR_RECORD_STEP)
#define ERROR_CSIRS  (ERROR_RECORD_DEFINE_BASE + 5*ERROR_RECORD_STEP)
#define ERROR_DEOFDM (ERROR_RECORD_DEFINE_BASE + 6*ERROR_RECORD_STEP)
#define ERROR_PUSCH_SYM  (ERROR_RECORD_DEFINE_BASE + 7*ERROR_RECORD_STEP)
#define ERROR_PUSCH_CB   (ERROR_RECORD_DEFINE_BASE + 7*ERROR_RECORD_STEP + (ERROR_RECORD_STEP >> 1))
//#define ERROR_PUSCH_CB   (ERROR_RECORD_DEFINE_BASE + 9*ERROR_RECORD_STEP)
#define ERROR_PUCCH  (ERROR_RECORD_DEFINE_BASE + 8*ERROR_RECORD_STEP)
#define ERROR_PRACH  (ERROR_RECORD_DEFINE_BASE + 9*ERROR_RECORD_STEP)
#define ERROR_SRS    (ERROR_RECORD_DEFINE_BASE + 10*ERROR_RECORD_STEP)

//6*4*40*11=10560byte,最大不能超过SM1_ERROR_RECORD_CNT_LEN
//只记录第一个error,共记录6(24byte)个参数:共5个入参+coreid
#define ERROR_RECORD(err_no, val0, val1, val2, val3) \
{\
    uint32_t offset = (err_no)*24;\
    uint32_t core_id = get_core_id();\
    if (0 == LOAD_EX_W((char*)(DDR_ERROR_RECORD_CNT_ADDR+offset)))\
    {\
        STORE_EX_W((char*)(DDR_ERROR_RECORD_CNT_ADDR+offset), (int)err_no);\
        STORE_EX_W((char*)(DDR_ERROR_RECORD_CNT_ADDR+offset+4), (int)core_id);\
        STORE_EX_W((char*)(DDR_ERROR_RECORD_CNT_ADDR+offset+8), (int)val0);\
        STORE_EX_W((char*)(DDR_ERROR_RECORD_CNT_ADDR+offset+12), (int)val1);\
        STORE_EX_W((char*)(DDR_ERROR_RECORD_CNT_ADDR+offset+16), (int)val2);\
        STORE_EX_W((char*)(DDR_ERROR_RECORD_CNT_ADDR+offset+20), (int)val3);\
    }\
}



#endif
