//******************** (C) COPYRIGHT 2020 SmartLogic*******************************
// FileName           : ecpri_queue_proc.h
// Author             : shanghuihui, huihui.shang@smartlogictech.com
// Date First Issued  : 2023-05-15 11:16:39 AM
// Last Modified      : 2023-05-15 11:16:39 AM
// Description        :
// ------------------------------------------------------------
// Modification History:
// Version    Date       Author    Modification Description
//
//**********************************************************************************

#ifndef _ECPRI_QUEUE_PROC_H_
#define _ECPRI_QUEUE_PROC_H_

//#include <netinet/in.h>

//#include "typedef.h"
#include "ucp_ecpri.h"
#include "ucp_printf.h"
#include "ucp_utility.h"
#include "app_interface.h"
#include "ucp_handshake.h"
#include "ucp_tick.h"
#include "ape_csu.h"
#include "hwque.h"


#ifndef NULL
#define NULL                                                ((void *)0)
#endif

/* eCPRI数据缓冲区地址 */
#define ECPRI_DATA_BUF_ADDR                                 0xAEE00000ul

/* eCPRI数据缓冲区大小（63MB） */
#define ECPRI_DATA_BUF_SIZE                                 0x01E00000ul // 0x03F00000ul

/* eCPRI调试缓冲区地址 */
#define ECPRI_DBG_BUF_ADDR                                  (ECPRI_DATA_BUF_ADDR + 0x03F00000ul) // (ECPRI_DATA_BUF_ADDR + ECPRI_DATA_BUF_SIZE)

/* eCPRI调试缓冲区大小（1MB） */
#define ECPRI_DBG_BUF_SIZE                                  0x00100000ul

/* eCPRI数据包大小（16KB） */
#define ECPRI_DATA_PKT_SIZE                                 0x00004000ul

/* eCPRI数据包最大数量 */
#define ECPRI_DATA_PKT_MAX                                  (ECPRI_DATA_BUF_SIZE / ECPRI_DATA_PKT_SIZE)

/* eCPRI ROEC DESC地址单位（1:32B） */
#define ECPRI_DESC_ADDR_UNIT                                32

/* 数据包类型-eCPRI */
#define ECPRI_PKT_TYPE_ECPRI                                0xAEFE

/* 数据包类型-1588 */
#define ECPRI_PKT_TYPE_1588                                 0x88F7

/* APE测试任务ID */
#define ECPRI_APE_TEST_TASK_ID                              40 // 63
/* STC统计最大cycle值 */
#define STC_CYCLE_MAX                                       1000000000ul


/* 循环队列结构体 */
typedef struct Stru_Ring_Buf
{
    uint32_t u32WrIdx;          /* 写索引 */
    uint32_t u32RdIdx;          /* 读索引 */
    uint32_t u32BufSize;        /* 缓冲区大小 */
    uint8_t *pu8Buf;            /* 缓冲区指针 */
} STRU_RING_BUF;

/* 通知消息结构体 */
typedef struct Stru_Inform_Msg
{
    uint32_t u32PktAddr;        /* 数据包地址 */
    uint32_t u32PktLen;         /* 数据包长度 */
} STRU_INFORM_MSG;

/* 消息类型枚举 */
typedef enum Enum_Msg_Type
{
    E_MSG_TYPE_APE = 0x55,      /* APE消息类型 */
    E_MSG_TYPE_ARM = 0xaa       /* ARM消息类型 */
} ENUM_MSG_TYPE;

/* 核ID */
typedef enum Enum_Core_Id
{
    E_CORE_ID_APE0 = 0,        /* APE0核ID */
    E_CORE_ID_APE1,            /* APE1核ID */
    E_CORE_ID_APE2,            /* APE2核ID */
    E_CORE_ID_APE3,            /* APE3核ID */
    E_CORE_ID_APE4,            /* APE4核ID */
    E_CORE_ID_APE5,            /* APE5核ID */
    E_CORE_ID_APE6,            /* APE6核ID */
    E_CORE_ID_APE7,            /* APE7核ID */
    E_CORE_ID_PET0,            /* PET RFM SPU0核ID */
    E_CORE_ID_PET1,            /* PET RFM SPU1核ID */
    E_CORE_ID_ECS0,            /* ECS RFM SPU0核ID */
    E_CORE_ID_ECS1,            /* PET RFM SPU1核ID */
    E_CORE_ID_ARM0             /* ARM0核ID */
} ENUM_APE_CORE_ID;


/* ecpri循环队列初始化 */
void ecpri_queue_init(void);
/* ecpri循环队列轮询 */
void ecpri_queue_proc(void);
/* ecpri数据包处理 */
void ecpri_packet_proc(uint32_t u32PktAddr);
/* ecpri通知ape */
int32_t ecpri_inform_ape(uint32_t u32PktAddr, uint32_t u32PktLen);
/* ecpri通知arm */
int32_t ecpri_inform_arm(uint32_t u32PktAddr, uint32_t u32PktLen);
/* ecpri通知arm扩展接口 */
int32_t ecpri_inform_arm_ex(uint32_t u32PktAddr);
/* ecpri内存拷贝测试 */
void ecpri_memcpy_test(void);
/* ecpri csu_dma搬数测试 */
void ecpri_csu_dma_test(void);

#endif /* _ECPRI_QUEUE_PROC_H_ */


