/******************************************************************
 * @file  ucp_mem_def.h
 * @brief:   两片UCP的内存分布头文件
 * @author: xuekun.zhang
 * @Date 2021年1月5日
 * COPYRIGHT NOTICE: (c) smartlogictech. All rights reserved.
 * Change_date         Owner         Change_content
 * 2021年1月5日        xuekun.zhang       create file

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

#ifndef     UCP_MEM_DEF_H
#define     UCP_MEM_DEF_H

//#include "interface_fapi_tasks.h"
//#include "interface_fapi_dl_lte.h"
//#include "interface_fapi_pusch.h"
//#include "interface_fapi_pucch.h"
//#include "interface_fapi_srs.h"
//#include "interface_fapi_dlctrl_lte.h"
//#include "interface_fapi_pbch_lte.h"
//#include "interface_pdcch_dl.h"
//#include "interface_fapi_prach.h"
#include "typedef.h"


typedef struct
{
    uint32_t sampling_rate;


    uint8_t tatol_tx_ants;
    uint8_t tatol_rx_ants;
    uint16_t rev;


    uint8_t num_tx0_ants;
    uint8_t num_tx1_ants;
    uint8_t num_rx0_ants;
    uint8_t num_rx1_ants;


    //tx的链表地址
    uint32_t tx_even_link_addr;
    uint32_t tx_odd_link_addr;
    uint32_t tx_last_link_addr;


    //rx的链表地址
    uint32_t rx_first_link_addr;
    uint32_t rx_even_link_addr;
    uint32_t rx_odd_link_addr;
}phy_csu_link_info_t;


//！命名宏定义时需要注意UCP使用的地址
/*********************************UCP************************************************/
//#define SM0_BASE                             (0x09D00000)//1M
//#define SM1_BASE                             (0x09E00000)//1M
//#define SM2_BASE                             (0x09F00000)//1.5M
//#define SM3_BASE                             (0x0A080000)//1.5M
//#define SM4_BASE                             (0x0A200000)//1.5M
//#define SM5_BASE                             (0x0A380000)//1.5M

/***************************************SM0--1M*********************************************/
//len define(Byte)
#define SM0_PHY_MSG_BUFFER_LEN               0x00000400  //1024
#define SM0_PHY_TASKS_MGR_LEN                0x00000100  //256
#define SM0_LTE_CELL0_FAPI_MSG_LEN           0x00004B00  //19200，实际使用17588
#define SM0_LTE_PBCH_REMAPPING_LUT_LEN       0x00000C64  //4+2*288*4+72*4+72*2*4=3172
#define SM0_LTE_PDCCH_REMAPPING_LUT_LEN      0x00003840  //(1200+2400+3600)*2=14400
#define SM0_LTE_PHICH_REMAPPING_LUT_LEN      0x00000480  //6*50*4=1200
#define SM0_LTE_PCFICH_REMAPPING_LUT_LEN     0x00000020  //8*4=32
#define SM0_LTE_CRS_REMAPPING_LUT_LEN        0x00000A50  //2*110*3*4=2640
//#define SM0_LTE_PDSCH_RBG_SUBSET_TABLE_LEN   0x00000064  //100
//#define SM0_LTE_PDSCH_VRB_PRB_TABLE_LEN      0x00000190  //400
#define SM0_LTE_CELL0_EVEN_TX_LEN            0x0003C000  //30720*2*4=245760
#define SM0_LTE_CELL0_ODD_TX_LEN             0x0003C000  //30720*2*4=245760
#define SM0_ERROR_RECORD_CNT_LEN             0x00003000  //12288
#define SM0_STATE_RECORD_CNT_LEN             0x00002600  //9728

//addr base define
#define SM0_PHY_MSG_BUFFER_ADDR              (SM0_BASE)
#define SM0_PHY_TASKS_MGR_ADDR               (SM0_PHY_MSG_BUFFER_ADDR + SM0_PHY_MSG_BUFFER_LEN)
#define SM0_LTE_CELL0_FAPI_MSG_ADDR          (SM0_PHY_TASKS_MGR_ADDR + SM0_PHY_TASKS_MGR_LEN)
#define SM0_LTE_PBCH_REMAPPING_LUT_ADDR      (SM0_LTE_CELL0_FAPI_MSG_ADDR + SM0_LTE_CELL0_FAPI_MSG_LEN)
#define SM0_LTE_PDCCH_REMAPPING_LUT_ADDR     (SM0_LTE_PBCH_REMAPPING_LUT_ADDR + SM0_LTE_PBCH_REMAPPING_LUT_LEN)
#define SM0_LTE_PHICH_REMAPPING_LUT_ADDR     (SM0_LTE_PDCCH_REMAPPING_LUT_ADDR + SM0_LTE_PDCCH_REMAPPING_LUT_LEN)
#define SM0_LTE_PCFICH_REMAPPING_LUT_ADDR    (SM0_LTE_PHICH_REMAPPING_LUT_ADDR + SM0_LTE_PHICH_REMAPPING_LUT_LEN)
#define SM0_LTE_CRS_REMAPPING_LUT_ADDR       (SM0_LTE_PCFICH_REMAPPING_LUT_ADDR + SM0_LTE_PCFICH_REMAPPING_LUT_LEN)
#define SM0_LTE_CELL0_EVEN_TX_ADDR           (SM0_LTE_CRS_REMAPPING_LUT_ADDR + SM0_LTE_CRS_REMAPPING_LUT_LEN)
#define SM0_LTE_CELL0_ODD_TX_ADDR            (SM0_LTE_CELL0_EVEN_TX_ADDR + SM0_LTE_CELL0_EVEN_TX_LEN)
//方便联查询，先写死，后续改动需计算地址
#define SM0_ERROR_RECORD_CNT_ADDR            (0x9DE0000)//(SM0_LTE_CELL0_ODD_TX_ADDR + SM0_LTE_CELL0_ODD_TX_LEN)
#define SM0_STATE_RECORD_CNT_ADDR            (0x9DF0000)//(SM0_ERROR_RECORD_CNT_ADDR + SM0_ERROR_RECORD_CNT_LEN)

/************************************SM1---1M ***********************************************/ 
//len define(Byte)
#define SM1_LTE_RX_FREQ_EVEN_SUBFRAME_LEN    0x00020D00  //14*2*1200*4=134400
#define SM1_LTE_RX_FREQ_ODD_SUBFRAME_LEN     0x00020D00  //14*2*1200*4=134400

//addr base define
#define SM1_LTE_RX_FREQ_EVEN_SUBFRAME_ADDR   (SM1_BASE)
#define SM1_LTE_RX_FREQ_ODD_SUBFRAME_ADDR    (SM1_LTE_RX_FREQ_EVEN_SUBFRAME_ADDR + SM1_LTE_RX_FREQ_EVEN_SUBFRAME_LEN)

#define SM1_PHY_USED_ADDR                    (SM1_BASE + 0x50000) //PHY使用的SM结束地址，暂时写死
/************************************SM2--1.5M***********************************************/


/************************************SM3--1.5M***********************************************/


/************************************SM4--1.5M***********************************************/


/************************************SM5--1.5M***********************************************/


/**************************************DDR***************************************************/
//base
#define DDR_PHY_BASE                         (0x6BC00000) //共579M可用0x6BC00000-0x8FFFFFFF

//len
#define DDR_LTE_CELL0_RX_LEN                 0x0003C000   //一体化(30720*2)*4 = 240K
#define DDR_LTE_PDSCH_CODING_TABLE_LEN       0x002665D0   //PDSCH编码表 2.4M

//addr
#define DDR_LTE_CELL0_RX_ADDR                (0x89000000) //TESTMAC测试阶段暂时写死，后续根据使用情况规划到SM或DDR
#define DDR_LTE_PDSCH_CODING_TABLE_ADDR      (DDR_LTE_CELL0_RX_ADDR + DDR_LTE_CELL0_RX_LEN)

// 6BEB0000 = 0x6BC00000 + 0x2B0000
#define DDR_PHY_UESD_ADDR                    (DDR_PHY_BASE + 0x2B0000) //PHY使用的DDR结束地址，暂时写死
#define DDR_PDSCH_DUMP_DATA_START            (DDR_PHY_UESD_ADDR) 

/*************test addr start*************/

#define LTE_TX_BASE_ADDR     (0xB4500000)  // 
#define LTE_RX_BASE_ADDR     (0xB4800000)  // 

#define NR_COM_FACT_LEN      (0x1E00) //NR压缩因子长度
#define LTE_COM_FACT_LEN     (0xF00) //LTE压缩因子长度

#define NR_AXC_DATA_LEN      (0x78000) //NR天线数据长度
#define LTE_AXC_DATA_LEN     (0x1E000) //LTE天线数据长度

//#define NR_AGC_LEN           (0x1E00) //NR AGC长度
//#define LTE_AGC_LEN          (0xF00) //LTE AGC长度
#define    AGC_LEN           (0x2D00) //NR AGC长度

//Tx
#define SM0_LTE_CELL0_EVEN_COM_FACT_ADDR     (LTE_TX_BASE_ADDR)  // LTE偶时隙压缩因子 0xB4500000
#define SM0_LTE_CELL0_EVEN_TX_ADDR_CPRI      (SM0_LTE_CELL0_EVEN_COM_FACT_ADDR+ LTE_COM_FACT_LEN )  // LTE偶时隙天线数据 0xB4500F00
#define SM0_LTE_CELL0_ODD_COM_FACT_ADDR      (SM0_LTE_CELL0_EVEN_TX_ADDR_CPRI + LTE_AXC_DATA_LEN )  // LTE奇时隙压缩因子 0xB451EF00
#define SM0_LTE_CELL0_ODD_TX_ADDR_CPRI       (SM0_LTE_CELL0_ODD_COM_FACT_ADDR + LTE_COM_FACT_LEN )  // LTE奇时隙天线数据 0xB451FE00

#define SM0_LTE_CELL0_EVEN_COM_FACT_ADDR_NR  (SM0_LTE_CELL0_ODD_TX_ADDR_CPRI      + LTE_AXC_DATA_LEN ) // NR偶时隙压缩因子 0xB453DE00
#define SM0_LTE_CELL0_EVEN_TX_ADDR_CPRI_NR0  (SM0_LTE_CELL0_EVEN_COM_FACT_ADDR_NR + NR_COM_FACT_LEN )  // NR偶时隙天线数据0和1 0xB453FC00
#define SM0_LTE_CELL0_EVEN_TX_ADDR_CPRI_NR1  (SM0_LTE_CELL0_EVEN_TX_ADDR_CPRI_NR0 + NR_AXC_DATA_LEN )  // NR偶时隙天线数据2和3 0xB45B7C00
//#define SM0_LTE_CELL0_EVEN_COM_AGC_ADDR_NR   (SM0_LTE_CELL0_EVEN_TX_ADDR_CPRI_NR1 + NR_AXC_DATA_LEN )  // NR偶时隙AGC 0xB462FC00
//#define SM0_LTE_CELL0_EVEN_COM_AGC_ADDR      (SM0_LTE_CELL0_EVEN_COM_AGC_ADDR_NR  + NR_AGC_LEN )       // LTE偶时隙AGC 0xB4631A00
#define SM0_LTE_CELL0_EVEN_COM_AGC_ADDR      (SM0_LTE_CELL0_EVEN_TX_ADDR_CPRI_NR1 + NR_AXC_DATA_LEN )         //AGC 0xB462FC00


#define SM0_LTE_CELL0_ODD_COM_FACT_ADDR_NR   (SM0_LTE_CELL0_EVEN_COM_AGC_ADDR  +  AGC_LEN )         // NR奇时隙压缩因子        0xB4632900
#define SM0_LTE_CELL0_ODD_TX_ADDR_CPRI_NR0   (SM0_LTE_CELL0_ODD_COM_FACT_ADDR_NR  + NR_COM_FACT_LEN )  // NR奇时隙天线数据0和1         0xB4634700
#define SM0_LTE_CELL0_ODD_TX_ADDR_CPRI_NR1   (SM0_LTE_CELL0_ODD_TX_ADDR_CPRI_NR0  + NR_AXC_DATA_LEN )  // NR奇时隙天线数据2和3         0xB46AC700
//#define SM0_LTE_CELL0_ODD_COM_AGC_ADDR_NR    (SM0_LTE_CELL0_ODD_TX_ADDR_CPRI_NR1  + NR_AXC_DATA_LEN )  // NR奇时隙AGC         0xB4724700
//#define SM0_LTE_CELL0_ODD_COM_AGC_ADDR       (SM0_LTE_CELL0_ODD_COM_AGC_ADDR_NR  + NR_AGC_LEN )        // LTE奇时隙AGC       0xB4726500
#define SM0_LTE_CELL0_ODD_COM_AGC_ADDR       (SM0_LTE_CELL0_ODD_TX_ADDR_CPRI_NR1  + NR_AXC_DATA_LEN )  // 奇时隙AGC         0xB4724700

//Rx
#define SM1_LTE_CELL0_EVEN_COM_FACT_ADDR     (LTE_RX_BASE_ADDR)  // LTE偶时隙压缩因子 0xB4800000
#define SM1_LTE_CELL0_EVEN_RX_ADDR_CPRI      (SM1_LTE_CELL0_EVEN_COM_FACT_ADDR + LTE_COM_FACT_LEN)   // LTE偶时隙天线数据          0xB4800F00
#define SM1_LTE_CELL0_ODD_COM_FACT_ADDR      (SM1_LTE_CELL0_EVEN_RX_ADDR_CPRI + LTE_AXC_DATA_LEN)    // LTE奇时隙压缩因子          0xB481EF00
#define SM1_LTE_CELL0_ODD_RX_ADDR_CPRI       (SM1_LTE_CELL0_ODD_COM_FACT_ADDR + LTE_COM_FACT_LEN)    // LTE奇时隙天线数据          0xB481FE00

#define SM1_LTE_CELL0_EVEN_COM_FACT_ADDR_NR  (SM1_LTE_CELL0_ODD_RX_ADDR_CPRI + LTE_AXC_DATA_LEN)      // NR偶时隙压缩因子            0xB483DE00
#define SM1_LTE_CELL0_EVEN_RX_ADDR_CPRI_NR0  (SM1_LTE_CELL0_EVEN_COM_FACT_ADDR_NR + NR_COM_FACT_LEN)  // NR偶时隙天线数据0和1 0xB483FC00
#define SM1_LTE_CELL0_EVEN_RX_ADDR_CPRI_NR1  (SM1_LTE_CELL0_EVEN_RX_ADDR_CPRI_NR0 + NR_AXC_DATA_LEN)  // NR偶时隙天线数据2和3 0xB48B7C00
//#define SM1_LTE_CELL0_EVEN_COM_AGC_ADDR_NR   (SM1_LTE_CELL0_EVEN_RX_ADDR_CPRI_NR1 + NR_AXC_DATA_LEN)  // NR偶时隙AGC             0xB492FC00
//#define SM1_LTE_CELL0_EVEN_COM_AGC_ADDR      (SM1_LTE_CELL0_EVEN_COM_AGC_ADDR_NR + NR_AGC_LEN)        // LTE偶时隙AGC            0xB4931A00
#define SM1_LTE_CELL0_EVEN_COM_AGC_ADDR      (SM1_LTE_CELL0_EVEN_RX_ADDR_CPRI_NR1 + NR_AXC_DATA_LEN)   //  偶时隙AGC             0xB492FC00


#define SM1_LTE_CELL0_ODD_COM_FACT_ADDR_NR   (SM1_LTE_CELL0_EVEN_COM_AGC_ADDR + AGC_LEN)          // NR奇时隙压缩因子            0xB4932900
#define SM1_LTE_CELL0_ODD_RX_ADDR_CPRI_NR0   (SM1_LTE_CELL0_ODD_COM_FACT_ADDR_NR + NR_COM_FACT_LEN)   // NR奇时隙天线数据0和1         0xB4934700
#define SM1_LTE_CELL0_ODD_RX_ADDR_CPRI_NR1   (SM1_LTE_CELL0_ODD_RX_ADDR_CPRI_NR0 + NR_AXC_DATA_LEN)   // NR奇时隙天线数据2和3 0xB49AC700
//#define SM1_LTE_CELL0_ODD_COM_AGC_ADDR_NR    (SM1_LTE_CELL0_ODD_RX_ADDR_CPRI_NR1 + NR_AXC_DATA_LEN)   // NR奇时隙AGC             0xB4a24700
//#define SM1_LTE_CELL0_ODD_COM_AGC_ADDR       (SM1_LTE_CELL0_ODD_COM_AGC_ADDR_NR + NR_AGC_LEN)         // LTE奇时隙AGC            0xB4a26500
#define SM1_LTE_CELL0_ODD_COM_AGC_ADDR       (SM1_LTE_CELL0_ODD_RX_ADDR_CPRI_NR1 + NR_AXC_DATA_LEN)   // 奇时隙AGC             0xB4a24700

/*************test addr end***************/


//void Config_Cpri_Csu_Lte(lte_cell_info_t* cell);
void Config_Cpri_Csu_Lte();


#endif
