658 lines
23 KiB
C
658 lines
23 KiB
C
|
#ifndef __RFM_INTERFACE_H__
|
|||
|
#define __RFM_INTERFACE_H__
|
|||
|
|
|||
|
/****************************UCP2.0 Platform start***********************************/
|
|||
|
/* 相关头文件 */
|
|||
|
#include "err_num.h"
|
|||
|
#include "msg_transfer_layer.h"
|
|||
|
|
|||
|
#define STC_LOCAL_TIME_BASE (0x08568000 + 0x4014)
|
|||
|
|
|||
|
#define GET_STC_CNT() (LOAD_EX_V_W(STC_LOCAL_TIME_BASE))
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:delay_us
|
|||
|
函数入参:num:微秒
|
|||
|
函数功能:时延函数
|
|||
|
*/
|
|||
|
void delay_us(uint32_t num);
|
|||
|
|
|||
|
/**************************************************/
|
|||
|
/* 调试信息输出相关 */
|
|||
|
/**************************************************/
|
|||
|
/**************************************************/
|
|||
|
/*
|
|||
|
函数名称:osp_sendLog
|
|||
|
函数入参:level,固定传1
|
|||
|
函数入参:pbuf,申请的buf地址,osp_msg_head预留
|
|||
|
函数入参:size,消息大小
|
|||
|
函数功能:调试信息输出(字符串型接口)
|
|||
|
*/
|
|||
|
void osp_sendLog(int level,char* pbuf, int size);
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:osp_sendLog_print
|
|||
|
函数入参:level,固定传1
|
|||
|
函数入参:pbuf,申请的buf地址,osp_msg_head预留
|
|||
|
函数入参:size,消息大小
|
|||
|
函数功能:调试信息输出(二进制型接口)
|
|||
|
*/
|
|||
|
void osp_sendLog_print(int level,char* pbuf, int size);
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:ecs_rfm0_shell_callback
|
|||
|
函数入参:port_id, UCP port ID
|
|||
|
函数入参:queue_num,固定传7
|
|||
|
函数入参:el_ind, 对列中的buffer index
|
|||
|
函数入参:buf, buffer 地址
|
|||
|
函数入参:remainedLength, buffer长度
|
|||
|
函数入参:handledLength
|
|||
|
函数功能:shell,log功能回调函数,将arm发过来的消息转发到ape
|
|||
|
*/
|
|||
|
uint32_t ecs_rfm0_shell_callback(uint32_t port_id,
|
|||
|
uint32_t queue_num,
|
|||
|
uint32_t el_ind,
|
|||
|
const char* buf,
|
|||
|
uint32_t remainedLength,
|
|||
|
uint32_t* handledLength);
|
|||
|
/**************************************************/
|
|||
|
/* PORT ID相关 */
|
|||
|
/**************************************************/
|
|||
|
/*
|
|||
|
函数名称:get_ucp_port_id
|
|||
|
函数入参:无
|
|||
|
函数功能:获取核的port id
|
|||
|
*/
|
|||
|
uint32_t get_ucp_port_id();
|
|||
|
|
|||
|
/**************************************************/
|
|||
|
/* 核ID相关 */
|
|||
|
/**************************************************/
|
|||
|
/*
|
|||
|
函数名称:get_core_id
|
|||
|
函数入参:无
|
|||
|
函数功能:获取核id
|
|||
|
*/
|
|||
|
uint32_t get_core_id(void);
|
|||
|
|
|||
|
/**************************************************/
|
|||
|
/* 调试信息相关 */
|
|||
|
/**************************************************/
|
|||
|
/*
|
|||
|
函数名称:osp_printf
|
|||
|
函数入参:fmt
|
|||
|
函数功能:输出调试信息
|
|||
|
*/
|
|||
|
int osp_printf(const char *fmt, ...);
|
|||
|
/**************************************************/
|
|||
|
/* 初始化接口 */
|
|||
|
/**************************************************/
|
|||
|
/*
|
|||
|
函数名称:rfm0_drv_init
|
|||
|
函数入参:无
|
|||
|
函数功能:RFM0模块驱动初始化
|
|||
|
*/
|
|||
|
void rfm0_drv_init(void);
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:ecs_rfm0_app_init
|
|||
|
函数入参:无
|
|||
|
函数功能:RFM0模块应用初始化
|
|||
|
*/
|
|||
|
void ecs_rfm0_app_init(void);
|
|||
|
|
|||
|
/**************************************************/
|
|||
|
/* 其他接口 */
|
|||
|
/**************************************************/
|
|||
|
/*
|
|||
|
函数名称:set_tx_slot_intflag
|
|||
|
函数入参:scs: 子载波ID号
|
|||
|
flag, 1: 设置中断标志; 0:清空中断标志
|
|||
|
函数功能:设置发送时隙中断标志
|
|||
|
备注 :该标志位在SM上,rfm1负责在中断中置位,清零操作交给物理层,只有一个核可清零,否则可能有冲突,导致读出的时隙号有误。
|
|||
|
*/
|
|||
|
void set_tx_slot_intflag(uint8_t scs, int flag);
|
|||
|
/*
|
|||
|
函数名称:get_tx_slot_intflag
|
|||
|
函数入参:scs: 子载波ID号
|
|||
|
函数功能:获取接收时隙中断标志
|
|||
|
*/
|
|||
|
int get_tx_slot_intflag(uint8_t scs);
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:set_rx_slot_intflag
|
|||
|
函数入参:scs: 子载波ID号
|
|||
|
flag, 1: 设置中断标志; 0:清空中断标志
|
|||
|
函数功能:设置接收时隙中断标志
|
|||
|
备注 :该标志位在SM上,rfm1负责在中断中置位,清零操作交给物理层,只有一个核可清零,否则可能有冲突,导致读出的时隙号有误。
|
|||
|
*/
|
|||
|
void set_rx_slot_intflag(uint8_t scs, int flag);
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:get_rx_slot_intflag
|
|||
|
函数入参:scs: 子载波ID号
|
|||
|
函数功能:获取接收时隙中断标志
|
|||
|
*/
|
|||
|
int get_rx_slot_intflag(uint8_t scs);
|
|||
|
|
|||
|
|
|||
|
typedef struct phy_timer_config_ind_t
|
|||
|
{
|
|||
|
uint32_t scsId;
|
|||
|
uint32_t runCoreId; // 此次需要建小区的ape core id,bitmap方式,bit0对应ape0,bit1对应ape1,。。。
|
|||
|
uint16_t bandWidth; //带宽:5M,10M,15M,20M,25M,30M,40M,50M,60M,80M,100M
|
|||
|
uint16_t t_period; //timer周期=t_us*num_t, 500us, 625us, 1000us, 1250us, 2500us, 5000us, 10000us, 20000us
|
|||
|
|
|||
|
uint16_t t_us; //物理层时隙定时长度, 125us, 250us, 500us, 1000us
|
|||
|
uint8_t num_t; //timer周期内时隙的个数5,10,20,40,80
|
|||
|
uint8_t num_t_per_sfn; //一个SFN内的时隙个数
|
|||
|
|
|||
|
uint8_t num_t_dl; //下行时隙个数
|
|||
|
uint8_t num_t_dl_symb; //时隙内下行符号个数
|
|||
|
uint8_t num_t_ul_symb; //时隙内上行符号个数
|
|||
|
uint8_t num_ants; //天线个数
|
|||
|
}phy_timer_config_ind_t;
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:cpri_timer_init4buildcell_c0
|
|||
|
函数入参:my_cpritmr:小区参数
|
|||
|
函数功能:小区创建时,定时器参数配置接口
|
|||
|
*/
|
|||
|
void cpri_timer_init4buildcell_c0(phy_timer_config_ind_t *my_cpritmr);
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:get_tx_nr_sfn
|
|||
|
函数入参:scs
|
|||
|
函数功能:获取发送帧号
|
|||
|
*/
|
|||
|
int get_tx_nr_sfn(uint8_t scs);
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:get_tx_lte_sfn
|
|||
|
函数入参:无
|
|||
|
函数功能:获取发送帧号
|
|||
|
*/
|
|||
|
int get_tx_lte_sfn();
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:get_tx_slot
|
|||
|
函数入参:scs
|
|||
|
函数功能:获取发送时隙号
|
|||
|
*/
|
|||
|
int get_tx_nr_slot(uint8_t scs);
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:get_tx_subframe
|
|||
|
函数入参:无
|
|||
|
函数功能:获取发送时隙号
|
|||
|
*/
|
|||
|
int get_tx_lte_subframe();
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:get_rx_nr_sfn
|
|||
|
函数入参:scs
|
|||
|
函数功能:接收帧号
|
|||
|
*/
|
|||
|
int get_rx_nr_sfn(uint8_t scs);
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:get_rx_nr_sfn
|
|||
|
函数入参:无
|
|||
|
函数功能:接收帧号
|
|||
|
*/
|
|||
|
int get_rx_lte_sfn();
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:get_rx_slot
|
|||
|
函数入参:scs
|
|||
|
函数功能:接收时隙号
|
|||
|
*/
|
|||
|
int get_rx_nr_slot(uint8_t scs);
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:get_rx_subframe
|
|||
|
函数入参:无
|
|||
|
函数功能:接收时隙号
|
|||
|
*/
|
|||
|
int get_rx_lte_subframe();
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:get_tx_nr_slot_cycle
|
|||
|
函数入参:scs
|
|||
|
函数功能:获取发送时隙偏移,单位为ns
|
|||
|
*/
|
|||
|
int get_tx_nr_slot_cycle(uint8_t scs);
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:get_tx_lte_slot_cycle
|
|||
|
函数入参:无
|
|||
|
函数功能:获取发送时隙偏移,单位为ns
|
|||
|
*/
|
|||
|
int get_tx_lte_subframe_cycle();
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:get_rx_nr_slot_cycle
|
|||
|
函数入参:scs
|
|||
|
函数功能:获取接收时隙偏移,单位为ns
|
|||
|
*/
|
|||
|
int get_rx_nr_slot_cycle(uint8_t scs);
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:get_rx_lte_slot_cycle
|
|||
|
函数入参:
|
|||
|
函数功能:获取接收时隙偏移,单位为ns
|
|||
|
*/
|
|||
|
int get_rx_lte_subframe_cycle();
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:get_cpri_delay
|
|||
|
函数入参:
|
|||
|
*delay: cpri的接收延迟量,单位为us
|
|||
|
函数功能:获取cpri的接收延迟量
|
|||
|
*/
|
|||
|
void get_cpri_delay(uint32_t* delay);
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:get_cpri_advance
|
|||
|
函数入参:
|
|||
|
*advance: cpri的发送提前量,单位为us
|
|||
|
函数功能:获取cpri的发送提前量
|
|||
|
*/
|
|||
|
void get_cpri_advance(uint32_t* advance);
|
|||
|
|
|||
|
/**************************************************/
|
|||
|
/* ape csu相关 */
|
|||
|
/**************************************************/
|
|||
|
#define APC_DMA_REG_NUM 16
|
|||
|
|
|||
|
#define DMA_DIR_L2G 0
|
|||
|
#define DMA_DIR_G2L 1
|
|||
|
#define DMA_DIR_G2G 1
|
|||
|
|
|||
|
|
|||
|
#define DMA_REG_GROUP0 0
|
|||
|
#define DMA_REG_GROUP1 1
|
|||
|
#define DMA_REG_GROUP2 2
|
|||
|
#define DMA_REG_GROUP3 3
|
|||
|
|
|||
|
//ape-csu dma chain define
|
|||
|
#define MAX_CHAIN_LEN (16)
|
|||
|
#define APC_DMA_CHAIN_L2_SIZE_WORD (4)
|
|||
|
#define APC_DMA_CHAIN_L1_3D_SIZE_WORD (8)
|
|||
|
#define APC_DMA_CHAIN_L1_1D_SIZE_WORD (4)
|
|||
|
|
|||
|
/* apc-dma chain level2 info */
|
|||
|
// word0
|
|||
|
// cmdData Low 32bit
|
|||
|
#define APC_DMA_CHAIN_L2_CMDDATAL_WORD_OFFSET (0)
|
|||
|
#define APC_DMA_CHAIN_L2_CMDDATAL_BIT_OFFSET (0)
|
|||
|
// word1
|
|||
|
// bit26:24: next node address High 3bit
|
|||
|
// bit17:16: base address for level1 chain High 2bit
|
|||
|
// bit15:0: number of nodes for level1 chain 16bit
|
|||
|
#define APC_DMA_CHAIN_L2_NXTADDRH_L1_BASEADDRH_NUMNODES_WORD_OFFSET (1)
|
|||
|
#define APC_DMA_CHAIN_L2_L1_NUMNODES_BIT_OFFSET (0)
|
|||
|
#define APC_DMA_CHAIN_L2_L1_BASEADDRH_BIT_OFFSET (16)
|
|||
|
#define APC_DMA_CHAIN_L2_NXTADDRH_BIT_OFFSET (24)
|
|||
|
// word2
|
|||
|
// base address for level1 chain Low 32bit
|
|||
|
#define APC_DMA_CHAIN_LEVEL2_L1_BASEADDR_L32_WORD_OFFSET (2)
|
|||
|
#define APC_DMA_CHAIN_LEVEL2_L1_BASEADDR_L32_BIT_OFFSET (0)
|
|||
|
// word3
|
|||
|
// bit31: node address mode 1bit
|
|||
|
// bit30:0: next node address Low 31bit
|
|||
|
#define APC_DMA_CHAIN_L2_ADDRMODE_NXTADDRL_WORD_OFFSET (3)
|
|||
|
#define APC_DMA_CHAIN_L2_NXTADDR_L31_BIT_OFFSET (0)
|
|||
|
#define APC_DMA_CHAIN_L2_ADDRMODE_BIT_OFFSET (31)
|
|||
|
|
|||
|
/* apc-dma chain level1 2-3d info */
|
|||
|
// word0
|
|||
|
// cmdData Low 32bit
|
|||
|
#define APC_DMA_CHAIN_L1_3D_CMDDATAL_WORD_OFFSET (0)
|
|||
|
#define APC_DMA_CHAIN_L1_3D_CMDDATAL_BIT_OFFSET (0)
|
|||
|
// word1
|
|||
|
// xAddr Low 32bit
|
|||
|
#define APC_DMA_CHAIN_L1_3D_XADDRL_WORD_OFFSET (1)
|
|||
|
#define APC_DMA_CHAIN_L1_3D_XADDRL_BIT_OFFSET (0)
|
|||
|
// word2
|
|||
|
// bit29:16: cmdData High 14bit
|
|||
|
// bit15:0: xNum 16bit
|
|||
|
#define APC_DMA_CHAIN_L1_3D_CMDDATAH_XNUM_WORD_OFFSET (2)
|
|||
|
#define APC_DMA_CHAIN_L1_3D_XNUM_BIT_OFFSET (0)
|
|||
|
#define APC_DMA_CHAIN_L1_3D_CMDDATAH_BIT_OFFSET (16)
|
|||
|
// word3
|
|||
|
// yStep 32bit
|
|||
|
#define APC_DMA_CHAIN_L1_3D_YSTEP_WORD_OFFSET (3)
|
|||
|
#define APC_DMA_CHAIN_L1_3D_YSTEP_BIT_OFFSET (0)
|
|||
|
// word4
|
|||
|
// bit30:28: next node address High 3bit
|
|||
|
// bit25:24: xAddr High 2bit
|
|||
|
// bit23:20: GRAN
|
|||
|
// bit19:16: SIZE
|
|||
|
// bit15:0: YNum
|
|||
|
#define APC_DMA_CHAIN_L1_3D_NXTADDRH_XADDRH_GRANSIZE_YNUM_WORD_OFFSET (4)
|
|||
|
#define APC_DMA_CHAIN_L1_3D_YNUM_BIT_OFFSET (0)
|
|||
|
#define APC_DMA_CHAIN_L1_3D_SIZE_BIT_OFFSET (16)
|
|||
|
#define APC_DMA_CHAIN_L1_3D_GRAN_BIT_OFFSET (20)
|
|||
|
#define APC_DMA_CHAIN_L1_3D_XADDRH_BIT_OFFSET (24)
|
|||
|
#define APC_DMA_CHAIN_L1_3D_NXTADDRH_BIT_OFFSET (28)
|
|||
|
// word5
|
|||
|
// zStep 32bit
|
|||
|
#define APC_DMA_CHAIN_L1_3D_ZSTEP_WORD_OFFSET (5)
|
|||
|
#define APC_DMA_CHAIN_L1_3D_ZSTEP_BIT_OFFSET (0)
|
|||
|
// word6
|
|||
|
// AllNum 32bit (valid field is bit23:0)
|
|||
|
#define APC_DMA_CHAIN_L1_3D_ALLNUM_WORD_OFFSET (6)
|
|||
|
#define APC_DMA_CHAIN_L1_3D_ALLNUM_BIT_OFFSET (0)
|
|||
|
// word7
|
|||
|
// bit31: node address mode 1bit
|
|||
|
// bit30:0: next node address Low 31bit
|
|||
|
#define APC_DMA_CHAIN_L1_3D_ADDRMODE_NXTADDRL_WORD_OFFSET (7)
|
|||
|
#define APC_DMA_CHAIN_L1_3D_NXTADDRL_BIT_OFFSET (0)
|
|||
|
#define APC_DMA_CHAIN_L1_3D_ADDRMODE_BIT_OFFSET (31)
|
|||
|
|
|||
|
/* apc-dma chain level1 1d info */
|
|||
|
// word0
|
|||
|
// cmdData Low 32bit
|
|||
|
#define APC_DMA_CHAIN_L1_1D_CMDDATAL_WORD_OFFSET (0)
|
|||
|
#define APC_DMA_CHAIN_L1_1D_CMDDATAL_BIT_OFFSET (0)
|
|||
|
// word1
|
|||
|
// xAddr Low 32bit
|
|||
|
#define APC_DMA_CHAIN_L1_1D_XADDRL_WORD_OFFSET (1)
|
|||
|
#define APC_DMA_CHAIN_L1_1D_XADDRL_BIT_OFFSET (0)
|
|||
|
// word2
|
|||
|
// bit31:30: xAddr High 2bit
|
|||
|
// bit29:16: cmdData High 14bit
|
|||
|
// bit15:0: AllNum 16bit (MaxBytes 65535)
|
|||
|
#define APC_DMA_CHAIN_L1_1D_XADDRH_CMDDATAH_ALLNUM_WORD_OFFSET (2)
|
|||
|
#define APC_DMA_CHAIN_L1_1D_ALLNUM_BIT_OFFSET (0)
|
|||
|
#define APC_DMA_CHAIN_L1_1D_CMDDATAH_BIT_OFFSET (16)
|
|||
|
#define APC_DMA_CHAIN_L1_1D_XADDRH_BIT_OFFSET (30)
|
|||
|
// word3
|
|||
|
// bit31: node address mode 1bit
|
|||
|
// bit30:0: next node address Low 31bit
|
|||
|
#define APC_DMA_CHAIN_L1_1D_ADDRMODE_NXTADDRL_WORD_OFFSET (3)
|
|||
|
#define APC_DMA_CHAIN_L1_1D_NXTADDRL_BIT_OFFSET (0)
|
|||
|
#define APC_DMA_CHAIN_L1_1D_ADDRMODE_BIT_OFFSET (31)
|
|||
|
|
|||
|
//-------------------------------------------------------------
|
|||
|
//struct define
|
|||
|
//-------------------------------------------------------------
|
|||
|
// cus dma 寄存器方式,结构体参数
|
|||
|
typedef struct _tagCsuDmaReg
|
|||
|
{
|
|||
|
uint32_t dmaAddrL;
|
|||
|
uint32_t dmaAddrH;
|
|||
|
uint32_t dmaYStepL;
|
|||
|
uint32_t dmaYStepH;
|
|||
|
uint32_t dmaZStepL;
|
|||
|
uint32_t dmaZStepH;
|
|||
|
uint16_t dmaXNum;
|
|||
|
uint16_t dmaYNum;
|
|||
|
uint32_t dmaAllNum : 24;
|
|||
|
uint32_t dmaGran : 4;
|
|||
|
uint32_t dmaSize : 4;
|
|||
|
}stCsuDmaReg;
|
|||
|
|
|||
|
typedef struct _tagCsuDmaCmdL
|
|||
|
{
|
|||
|
uint32_t rCmd : 2; // 0:普通DMA,1:一级DMA,2:一级DMA并等待ActNum,3:二级DMA
|
|||
|
uint32_t wCmd : 2;
|
|||
|
uint32_t dmaType : 1; // 0:一维,1:多维
|
|||
|
uint32_t cacheMode : 1; // 0:common mode, 1:cache mode
|
|||
|
uint32_t continueNext : 1; // continue the next dma
|
|||
|
uint32_t continueLast : 1; // continue the last dma
|
|||
|
uint32_t idSrc : 5; // src buffer id
|
|||
|
uint32_t idDst : 5; // dst buffer id
|
|||
|
uint32_t dmaTag : 5; // tag
|
|||
|
uint32_t flush : 1;
|
|||
|
uint32_t ecpriEnd : 3;
|
|||
|
uint32_t zNumValid : 1;
|
|||
|
uint32_t allOrYNum : 2;
|
|||
|
uint32_t allNumSel : 1;
|
|||
|
uint32_t stall : 1; // stall信号,是否在传输之前触发stall中断
|
|||
|
}stCsuDmaCmdL;
|
|||
|
|
|||
|
typedef struct _tagCsuDmaCmdH
|
|||
|
{
|
|||
|
uint32_t rXNumNextDma : 1; // 读操作完成一个XNum后,换下一个DMA
|
|||
|
uint32_t rYNumNextDma : 1; // 读操作完成一个YNum后,换下一个DMA
|
|||
|
uint32_t wXNumNextDma : 1; // 写操作完成一个XNum后,换下一个DMA
|
|||
|
uint32_t wYNumNextDma : 1; // 写操作完成一个YNum后,换下一个DMA
|
|||
|
uint32_t rRfpFirstDma : 1; // 读操作位对应AxC的rfp后第一组DMA请求
|
|||
|
uint32_t reserved1 : 6;
|
|||
|
uint32_t wLinkCycleMode : 1; // 写操作为链表循环模式
|
|||
|
uint32_t reserved2 : 1;
|
|||
|
uint32_t rLinkCycleMode : 1; // 读操作为链表循环模式
|
|||
|
uint32_t reserved3 : 18;
|
|||
|
}stCsuDmaCmdH;
|
|||
|
|
|||
|
// 一级链表,多维DMA
|
|||
|
typedef struct _tagCsuLinkDesc1L3D
|
|||
|
{
|
|||
|
uint32_t cmdFifoL; // [31:0] // fifo[31:0]
|
|||
|
uint32_t dmaAddrL; // [63:32] // addr[31:0]
|
|||
|
uint32_t dmaXNum : 16; // [79:64] // XNum
|
|||
|
uint32_t cmdFifoH : 14; // [93:80] // fifo[45:32]
|
|||
|
uint32_t reserved1 : 2; // [95:94]
|
|||
|
uint32_t dmaYStep; // [127:96] // YStep[31:0]
|
|||
|
uint32_t dmaYNum : 16; // [143:128] // YNum
|
|||
|
uint32_t dmaSize : 4; // [147:144] // dmaSize
|
|||
|
uint32_t dmaGran : 3; // [150:148] // gran
|
|||
|
uint32_t dmaCGran : 1; // [151] // cgran
|
|||
|
uint32_t dmaAddrH : 2; // [153:152] // addr[33:32]
|
|||
|
uint32_t reserved2 : 2; // [155:154]
|
|||
|
uint32_t nextAddrH : 3; // [158:156] // next addr[33:31]
|
|||
|
uint32_t reserved3 : 1; // [159]
|
|||
|
uint32_t dmaZStep; // [191:160] // ZStep[31:0]
|
|||
|
uint32_t dmaAllNum; // [223:192] // all num
|
|||
|
uint32_t nextAddrL : 31; // [254:224] // next addr[30:0]
|
|||
|
uint32_t nAddrMode : 1; // [255] // 1:使用nextAddr,0:地址自动加0x20/0x40
|
|||
|
}stCsuLinkDesc1L3D;
|
|||
|
|
|||
|
//extern __attribute__((always_inline)) uint8_t os_get_apeid();
|
|||
|
|
|||
|
//-------------------------------------------------------------
|
|||
|
//api
|
|||
|
//-------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
/*!
|
|||
|
* @brief: 查看tag号对应的dma任务是否完成,未完成返回0,完成返回1
|
|||
|
* 如果isWait==1,则等待该tag对应的任务完成,再返回,返回1
|
|||
|
* @author: xinxin.li
|
|||
|
* @Date: 2022年6月1日
|
|||
|
* @param: task_tag : [DMA Tag: 0~31用于查询是否完成 ]
|
|||
|
* @param: isWait : [是否等DMA结束函数返回0:不等待,1:等待 ]
|
|||
|
* @return: 1:已完成,0:未完成
|
|||
|
*/
|
|||
|
int ape_csu_task_lookup(uint8_t task_tag, uint8_t isWait);
|
|||
|
|
|||
|
/*!
|
|||
|
* @brief: 一维搬移到一维,使用寄存器组0和组1实现L2G的Dma搬移
|
|||
|
* @author: xinxin.li
|
|||
|
* @Date: 2022年6月1日
|
|||
|
* @param: addrSrc : [源地址 ]
|
|||
|
* @param: addrDst : [目的地址 ]
|
|||
|
* @param: dataLen : [搬移总字节数 ]
|
|||
|
* @param: tag : [DMA Tag: 0~31用于查询是否完成 ]
|
|||
|
* @param: isWait : [是否等DMA结束函数返回0:不等待,1:等待 ]
|
|||
|
*/
|
|||
|
int ape_csu_dma_1D_L2G_ch0ch1_transfer(uint64_t addrSrc, uint64_t addrDst, uint32_t dataLen, uint8_t tag, uint8_t isWait);
|
|||
|
|
|||
|
/*!
|
|||
|
* @brief: 一维搬移到一维,使用寄存器组2和组3实现L2G的Dma搬移
|
|||
|
* @author: xinxin.li
|
|||
|
* @Date: 2022年6月1日
|
|||
|
* @param: addrSrc : [源地址 ]
|
|||
|
* @param: addrDst : [目的地址 ]
|
|||
|
* @param: dataLen : [搬移总字节数 ]
|
|||
|
* @param: tag : [DMA Tag: 0~31用于查询是否完成 ]
|
|||
|
* @param: isWait : [是否等DMA结束函数返回0:不等待,1:等待 ]
|
|||
|
*/
|
|||
|
int ape_csu_dma_1D_L2G_ch2ch3_transfer(uint64_t addrSrc, uint64_t addrDst, uint32_t dataLen, uint8_t tag, uint8_t isWait);
|
|||
|
|
|||
|
/*!
|
|||
|
* @brief: 一维搬移到一维,使用寄存器组0和组1实现G2L的Dma搬移
|
|||
|
* @author: xinxin.li
|
|||
|
* @Date: 2022年6月1日
|
|||
|
* @param: addrSrc : [源地址 ]
|
|||
|
* @param: addrDst : [目的地址 ]
|
|||
|
* @param: dataLen : [搬移总字节数 ]
|
|||
|
* @param: tag : [DMA Tag: 0~31用于查询是否完成 ]
|
|||
|
* @param: isWait : [是否等DMA结束函数返回0:不等待,1:等待 ]
|
|||
|
*/
|
|||
|
int ape_csu_dma_1D_G2L_ch0ch1_transfer(uint64_t addrSrc, uint64_t addrDst, uint32_t dataLen, uint8_t tag, uint8_t isWait);
|
|||
|
|
|||
|
/*!
|
|||
|
* @brief: 一维搬移到一维,使用寄存器组2和组3实现G2L的Dma搬移
|
|||
|
* @author: xinxin.li
|
|||
|
* @Date: 2022年6月1日
|
|||
|
* @param: addrSrc : [源地址 ]
|
|||
|
* @param: addrDst : [目的地址 ]
|
|||
|
* @param: dataLen : [搬移总字节数 ]
|
|||
|
* @param: tag : [DMA Tag: 0~31用于查询是否完成 ]
|
|||
|
* @param: isWait : [是否等DMA结束函数返回0:不等待,1:等待 ]
|
|||
|
*/
|
|||
|
int ape_csu_dma_1D_G2L_ch2ch3_transfer(uint64_t addrSrc, uint64_t addrDst, uint32_t dataLen, uint8_t tag, uint8_t isWait);
|
|||
|
|
|||
|
/*!
|
|||
|
* @brief: 二维搬移到二维
|
|||
|
* @author: xinxin.li
|
|||
|
* @Date: 2022年6月1日
|
|||
|
* @param: addrSrc : [源地址 ]
|
|||
|
* @param: blockLenSrc : [源第一维度搬移字节数 ]
|
|||
|
* @param: blockStepSrc : [源第二维度搬移步进字节数 ]
|
|||
|
* @param: addrDst : [目的地址 ]
|
|||
|
* @param: blockLenDst : [目的第一维度搬移字节数 ]
|
|||
|
* @param: blockStepDst : [目的第二维度搬移步进字节数 ]
|
|||
|
* @param: dataLen : [搬移总字节数 ]
|
|||
|
* @param: tag : [DMA Tag: 0~31用于查询是否完成 ]
|
|||
|
* @param: isWait : [是否等DMA结束函数返回0:不等待,1:等待 ]
|
|||
|
* @param: regGroup : [寄存器组,2:源寄存器组4,目的寄存器组5;3:源寄存器组6,目的寄存器组7 ]
|
|||
|
* @param: dir : [0:L2G,1:G2L or G2G ]
|
|||
|
*/
|
|||
|
int ape_csu_dma_2Dto2D_transfer(uint64_t addrSrc, uint16_t blockLenSrc, uint64_t blockStepSrc,
|
|||
|
uint64_t addrDst, uint16_t blockLenDst, uint64_t blockStepDst,
|
|||
|
uint32_t dataLen, uint8_t tag, uint8_t isWait, uint8_t regGroup, uint8_t dir);
|
|||
|
|
|||
|
/*!
|
|||
|
* @brief: 三维搬移到一维
|
|||
|
* @author: xinxin.li
|
|||
|
* @Date: 2022年6月1日
|
|||
|
* @param: addrSrc : [源地址 ]
|
|||
|
* @param: xNumSrc : [源第一维度搬移字节数 ]
|
|||
|
* @param: yNumSrc : [源第二维度搬移个数 ]
|
|||
|
* @param: yStepSrc : [源第二维度搬移步进字节数 ]
|
|||
|
* @param: zStepSrc : [源第三维度搬移步进字节数 ]
|
|||
|
* @param: addrDst : [目的地址 ]
|
|||
|
* @param: dataLen : [搬移总字节数 ]
|
|||
|
* @param: tag : [DMA Tag: 0~31用于查询是否完成 ]
|
|||
|
* @param: isWait : [是否等DMA结束函数返回0:不等待,1:等待 ]
|
|||
|
* @param: regGroup : [寄存器组,2:源寄存器组4,目的寄存器组5;3:源寄存器组6,目的寄存器组7 ]
|
|||
|
* @param: dir : [0:L2G,1:G2L or G2G ]
|
|||
|
*/
|
|||
|
int ape_csu_dma_3Dto1D_transfer(uint64_t addrSrc, uint16_t xNumSrc, uint16_t yNumSrc, uint64_t yStepSrc, uint64_t zStepSrc,
|
|||
|
uint64_t addrDst, uint32_t dataLen, uint8_t tag, uint8_t isWait, uint8_t regGroup, uint8_t dir);
|
|||
|
|
|||
|
void ape_csu_dma_3Dto1D_G2L_ch4ch0_simp_transfer(uint32_t addrSrc, uint16_t xNumSrc, uint16_t yNumSrc, uint32_t yStepSrc, uint32_t zStepSrc,
|
|||
|
uint32_t addrDst, uint32_t dataLen, uint8_t tag, uint8_t isWait);
|
|||
|
|
|||
|
void ape_csu_dma_3Dto1D_G2L_ch6ch2_simp_transfer(uint32_t addrSrc, uint16_t xNumSrc, uint16_t yNumSrc, uint32_t yStepSrc, uint32_t zStepSrc,
|
|||
|
uint32_t addrDst, uint32_t dataLen, uint8_t tag, uint8_t isWait);
|
|||
|
|
|||
|
|
|||
|
void dma_1l3d1s_chain_G2L_ch0ch1_simp_config_start(uint32_t *paramPtr,
|
|||
|
uint32_t paramCsuAddr,
|
|||
|
uint32_t numNodes,
|
|||
|
uint32_t dmaTag,
|
|||
|
uint32_t *xAddrSrcPtr,
|
|||
|
uint16_t xNum,
|
|||
|
uint32_t *allNumPtr,
|
|||
|
uint32_t addrDst,
|
|||
|
uint32_t allNumTotal,
|
|||
|
uint32_t waitFlag);
|
|||
|
|
|||
|
void dma_1l1d2s_chain_ch3_G2L_start(uint32_t *paramPtr,
|
|||
|
uint32_t paramCsuAddr,
|
|||
|
uint32_t *srcAddrPtr,
|
|||
|
uint32_t *dstAddrPtr,
|
|||
|
uint32_t *allNumPtr,
|
|||
|
uint32_t numNodes,
|
|||
|
uint32_t dmaTag,
|
|||
|
uint32_t waitFlag);
|
|||
|
|
|||
|
|
|||
|
void qounit_findK_config_start(uint32_t bitSequenceAddr,
|
|||
|
uint32_t seqIndexAddr,
|
|||
|
uint32_t seqLength,
|
|||
|
uint32_t K0,
|
|||
|
uint32_t K1);
|
|||
|
|
|||
|
void qounit_findEqual_config_start(uint32_t compData,
|
|||
|
uint32_t seqAddr,
|
|||
|
uint16_t seqLength);
|
|||
|
|
|||
|
uint32_t qounit_wait_complete();
|
|||
|
|
|||
|
/*!
|
|||
|
* @brief: 等待QOunit处理完成
|
|||
|
* @author: yufei.wang
|
|||
|
* @Date: 2022年6月11日
|
|||
|
*/
|
|||
|
int16_t qounit_equal_wait_complete();
|
|||
|
|
|||
|
/**************************************************/
|
|||
|
/* 硬件队列收发消息接口 */
|
|||
|
/**************************************************/
|
|||
|
/*
|
|||
|
函数名称:osp_alloc_msg
|
|||
|
函数功能:申请消息通信的内存空间(根据约定均在DDR上)采用循环覆盖的方式,故接收放不需要释放
|
|||
|
函数参数:size:真实消息的大小(单位:字节)
|
|||
|
函数返回值:
|
|||
|
非0: 申请到的消息首地址
|
|||
|
-NULLPTR:申请失败
|
|||
|
*/
|
|||
|
extern char *osp_alloc_msg(int size);
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:osp_send_msg
|
|||
|
函数功能:发送消息用于核间或者核内通信
|
|||
|
函数参数:msg_addr:消息体的地址
|
|||
|
msg_len:消息体的长度(单位:字节)
|
|||
|
msg_type:消息类型
|
|||
|
src_core_id:源核ID
|
|||
|
dst_core_id:目的核ID
|
|||
|
src_task_id:源任务ID
|
|||
|
dst_task_id:目的任务ID
|
|||
|
函数返回值:
|
|||
|
0: 成功返回
|
|||
|
-2: 入参错误
|
|||
|
-1: 错误返回
|
|||
|
*/
|
|||
|
extern int osp_send_msg(uint32_t msg_addr,
|
|||
|
uint32_t msg_len,
|
|||
|
uint8_t msg_type,
|
|||
|
uint8_t src_core_id,
|
|||
|
uint8_t dst_core_id,
|
|||
|
uint8_t src_task_id,
|
|||
|
uint8_t dst_task_id);
|
|||
|
|
|||
|
/* ECS侧硬件队列中断回调函数 */
|
|||
|
typedef void(*ECS_HWQUE_IRQ_FUNC)();
|
|||
|
|
|||
|
/*
|
|||
|
函数名称:ecs_hw_que_irq_callback
|
|||
|
函数功能:ECS侧高层注册硬件队列中断回调处理函数
|
|||
|
注意: 中断回调处理函数需要快速处理返回
|
|||
|
函数参数:func:中断回调处理函数
|
|||
|
函数返回值:无
|
|||
|
*/
|
|||
|
void ecs_hw_que_irq_callback(ECS_HWQUE_IRQ_FUNC func);
|
|||
|
|
|||
|
|
|||
|
/****************************UCP2.0 Platform end*************************************/
|
|||
|
|
|||
|
#endif /* __RFM_INTERFACE_H__ */
|
|||
|
|