Merge branch 'dev_ck_v2.1_feature_enhancement#1118' into 'dev_ck_v2.1'

帧头偏移设置、查询功能入库

See merge request ucp/driver/ucp4008_platform_spu!48
This commit is contained in:
Xianfeng Du 2023-10-18 05:43:57 +00:00
commit 1c78485f0c
8 changed files with 174 additions and 34 deletions

View File

@ -132,6 +132,19 @@ typedef struct _tagCpriSetDelayRsp
uint8_t u8rsv[2];
}stCpriSetDelayRsp;
typedef struct _tagCpriFrameHeadOffsetReq {
uint16_t u16frame_head_offset;
uint8_t u8rsv[2];
} stCpriFrameHeadOffsetReq;
typedef struct _tagCpriFrameHeadOffsetRsp {
uint8_t u8result;
uint8_t u8rsv[3];
} stCpriFrameHeadOffsetRsp;
typedef struct _tagCpriGetFrameHeadOffset {
uint8_t u8result;
uint8_t u8rsv;
uint16_t u16frame_head_offset;
}stCpriGetFrameHeadOffset;
typedef struct _tagOamMsgTransferHeader {
uint8_t numMsg;
uint8_t cellIndex;
@ -152,9 +165,13 @@ void cpri_delay_measurement_ck();
void update_cpri_link_status();
// cpri延时设置与获取
stCpriSetDelayRsp* set_cpri_link_delay(stCpriSetLinkDelay* pCpriSetDelay);
void get_cpri_link_delay(uint8_t u8fiber_port, stCpriGetLinkDelay* pCpriGetDelay);
void get_cpri_rndtrip_delay(uint8_t u8fiber_port, stCpriGetRndDelay* pCpriRndDealy);
// cpri帧头偏移设置与获取
stCpriFrameHeadOffsetRsp* set_frame_head_offset(stCpriFrameHeadOffsetReq* pCpriFrameHeadOffset);
void get_cpri_framehead_offset(stCpriGetFrameHeadOffset* pCpriFrameHeadOffset);
#endif /* CPRI_DELAY_H_ */

View File

@ -36,6 +36,8 @@ typedef struct tEcsRfmDmLocalMgt {
stCpriSetLinkDelay* pOamBaseDelaySetRspPtr ;
stCpriGetLinkDelay* pOamBaseDelayQryRspPtr ;
stCpriGetRndDelay* pOamFiberDelayQryRspPtr ;
stCpriFrameHeadOffsetRsp* pOamFrameHeadOffsetRspPtr ;
stCpriGetFrameHeadOffset* pOamFrameHeadOffsetQryRspPtr;
} EcsRfmDmLocalMgt_t;
EcsRfmDmLocalMgt_t* get_ecs_rfm_dm_local_mgt(void);

View File

@ -78,6 +78,16 @@ int32_t ecs_rfm_dm_alloc(void)
return -1;
}
pEcsDmLocalMgt->pOamFrameHeadOffsetRspPtr = (stCpriFrameHeadOffsetRsp*)memSectionAlloc(pMemSection, sizeof(stCpriFrameHeadOffsetRsp), MEM_ALIGNED_4BYTES, "OamFrameHeadOffsetRsp");
if (NULL == pEcsDmLocalMgt->pOamFrameHeadOffsetRspPtr)
{
return -1;
}
pEcsDmLocalMgt->pOamFrameHeadOffsetQryRspPtr = (stCpriGetFrameHeadOffset*)memSectionAlloc(pMemSection, sizeof(stCpriGetFrameHeadOffset), MEM_ALIGNED_4BYTES, "pOamFrameHeadOffsetQryRspPtr");
if (NULL == pEcsDmLocalMgt->pOamFrameHeadOffsetQryRspPtr)
{
return -1;
}
for (int i = 0; i < MTIMER_INTEGRATED_MAX_NUM; i++)
{
pEcsDmLocalMgt->pMtimerPara[i] = (stMtimerPara*)memSectionAlloc(pMemSection, sizeof(stMtimerPara), MEM_ALIGNED_4BYTES, "pMtimerPara[i]");

View File

@ -481,3 +481,32 @@ void get_cpri_rndtrip_delay(uint8_t u8fiber_port, stCpriGetRndDelay* pCpriRndDea
return;
}
stCpriFrameHeadOffsetRsp stCpriFrameHeadOff;
stCpriFrameHeadOffsetRsp* set_frame_head_offset(stCpriFrameHeadOffsetReq* pCpriFrameHeadOffset)
{
memset(&stCpriFrameHeadOff, 0, sizeof(stCpriFrameHeadOff));
if (NULL == pCpriFrameHeadOffset)
{
stCpriFrameHeadOff.u8result = 0;
return &stCpriFrameHeadOff;
}
uint32_t addr = 0;
for (int8_t i = 0; i < PHY_SCS_MAX_NUM; i++)
{
addr = (uint32_t)&(phyPara[i].gpsOffset);
do_write_short(addr, pCpriFrameHeadOffset->u16frame_head_offset);
}
stCpriFrameHeadOff.u8result = 1;
return &stCpriFrameHeadOff;
}
void get_cpri_framehead_offset(stCpriGetFrameHeadOffset* pCpriFrameHeadOffset)
{
if (NULL == pCpriFrameHeadOffset)
{
return;
}
uint32_t addr = (uint32_t)&(phyPara[0].gpsOffset);
pCpriFrameHeadOffset->u16frame_head_offset = do_read_volatile_short(addr);
pCpriFrameHeadOffset->u8result = 1;
return;
}

View File

@ -23,6 +23,11 @@
#define SPU_OAM_BASE_DELAY_QRY_RSP 0x203
#define SPU_OAM_FIBER_DELAY_QRY_REQ 0x204
#define SPU_OAM_FIBER_DELAY_QRY_RSP 0x205
#define SPU_OAM_FRAME_HEAD_OFFSET_REQ 0x206
#define SPU_OAM_FRAME_HEAD_OFFSET_RSP 0x207
#define SPU_OAM_FRAME_HEAD_OFFSET_QRY_REQ 0x208
#define SPU_OAM_FRAME_HEAD_OFFSET_QRY_RSP 0x209
#define MSG_TRANSFER_OAM_MSG_TYPE 0x125
#define DM_GLADDR_TO_DMAADDR1(addr) (addr-0x100000)// (addr-0x200000) //
@ -73,11 +78,29 @@ typedef struct tSpuOamFiberDelayQryRsp {
uint32_t u32t14_val;
} SpuOamFiberDelayQryRsp_t;
typedef struct tSpuOamFrameHeadOffsetReq {
uint16_t u16frame_head_offset;
uint8_t u8rsv[2];
} SpuOamFrameHeadOffsetReq_t;
typedef struct tSpuOamFrameHeadOffsetRsp {
uint8_t u8result;
uint8_t u8rsv[3];
} SpuOamFrameHeadOffsetRsp_t;
typedef struct tSpuOamFrameHeadOffsetQryRsp {
uint8_t u8result;
uint8_t u8rsv;
uint16_t u16frame_head_offset;
}SpuOamFrameHeadOffsetQryRsp_t;
void oam_msg_init(void);
void oam_msg_proc(uint32_t u32msg_addr, uint32_t u32msg_size);
void oam_base_delay_proc(SpuOamBaseDelaySetReq_t *spu_oam_base_delay_set_ptr, OamMsgTransferHeader_t *spu_oam_msg_ptr);
void oam_base_qry_proc(SpuOamBaseDelayQryReq_t *spu_oam_base_delay_qry_ptr, OamMsgTransferHeader_t *spu_oam_msg_ptr);
void oam_fiber_delay_proc(SpuOamFiberDelayQryReq_t *spu_oam_fiber_delay_qry_ptr, OamMsgTransferHeader_t *spu_oam_msg_ptr);
void oam_frame_head_offset_proc(SpuOamFrameHeadOffsetReq_t *spu_oam_frame_head_offset_qry_ptr, OamMsgTransferHeader_t *spu_oam_msg_ptr);
void oam_frame_head_offset_qry_proc(OamMsgTransferHeader_t *spu_oam_msg_ptr);
void oam_msg_proc_test(uint32_t u32msg_addr, uint32_t u32msg_size);
static inline uint32_t oam_spu_fill_msg_header(uint8_t inst_id, char* buf, uint32_t size, uint32_t msgType);
static inline int32_t oam_spu_send_msg(uint8_t inst_id, uint32_t src_addr, uint32_t size, uint32_t msgType);

View File

@ -34,7 +34,8 @@ OamMsgTransferHeader_t *g_oam_msg_ptr = NULL;
SpuOamBaseDelaySetRsp_t *g_oam_base_delay_set_rsp_ptr = NULL;
SpuOamBaseDelayQryRsp_t *g_oam_base_delay_qry_rsp_ptr = NULL;
SpuOamFiberDelayQryRsp_t *g_oam_fiber_delay_qry_rsp_ptr = NULL;
SpuOamFrameHeadOffsetRsp_t *g_oam_frame_head_offset_rsp_ptr = NULL;
SpuOamFrameHeadOffsetQryRsp_t *g_oam_frame_head_offset_qry_rsp_ptr = NULL;
void oam_msg_init(void)
{
@ -45,10 +46,13 @@ void oam_msg_init(void)
g_oam_base_delay_set_rsp_ptr = (SpuOamBaseDelaySetRsp_t *)pEcsDmLocalMgt->pOamBaseDelaySetRspPtr;
g_oam_base_delay_qry_rsp_ptr = (SpuOamBaseDelayQryRsp_t *)pEcsDmLocalMgt->pOamBaseDelayQryRspPtr;
g_oam_fiber_delay_qry_rsp_ptr = (SpuOamFiberDelayQryRsp_t *)pEcsDmLocalMgt->pOamFiberDelayQryRspPtr;
g_oam_frame_head_offset_rsp_ptr = (SpuOamFrameHeadOffsetRsp_t *)pEcsDmLocalMgt->pOamFrameHeadOffsetRspPtr;
g_oam_frame_head_offset_qry_rsp_ptr = (SpuOamFrameHeadOffsetQryRsp_t *)pEcsDmLocalMgt->pOamFrameHeadOffsetQryRspPtr;
memset_ucp(g_oam_base_delay_set_rsp_ptr->u8rsv, 0, 2);
memset_ucp(g_oam_base_delay_qry_rsp_ptr->u8rsv, 0, 2);
memset_ucp(g_oam_fiber_delay_qry_rsp_ptr->u8rsv, 0, 2);
memset_ucp(g_oam_fiber_delay_qry_rsp_ptr->u8rsv, 0, 1);
debug_write(DBG_DDR_COMMON_IDX(u8core_id, 37), g_oam_msg_ptr);
debug_write(DBG_DDR_COMMON_IDX(u8core_id, 56), g_oam_base_delay_set_rsp_ptr);/*0xb7e016e0*/
return;
@ -65,6 +69,8 @@ void oam_msg_proc(uint32_t u32msg_addr, uint32_t u32msg_size)
SpuOamBaseDelaySetReq_t *oam_base_delay_set_ptr = NULL;
SpuOamBaseDelayQryReq_t *oam_base_delay_qry_ptr = NULL;
SpuOamFiberDelayQryReq_t *oam_fiber_delay_qry_ptr = NULL;
SpuOamFrameHeadOffsetReq_t *oam_frame_head_offset_ptr = NULL;
debug_write(DBG_DDR_COMMON_IDX(u8core_id, 36), 0x12345678);
memset((void *)g_oam_msg_ptr, 0, sizeof(OamMsgTransferHeader_t));
@ -74,7 +80,7 @@ void oam_msg_proc(uint32_t u32msg_addr, uint32_t u32msg_size)
debug_write(DBG_DDR_COMMON_IDX(u8core_id, 39), msg_buf);
debug_write(DBG_DDR_COMMON_IDX(u8core_id, 40), g_oam_msg_ptr->numMsg);
debug_write(DBG_DDR_COMMON_IDX(u8core_id, 41), g_oam_msg_ptr->msgType);
UCP_PRINT_LOG("oam_msg_proc numMsg:%d msg_type:0x%x msg_size:%d\n", g_oam_msg_ptr->numMsg, g_oam_msg_ptr->msgType, msg_size);
UCP_PRINT_ERROR("oam_msg_proc numMsg:%d msg_type:0x%x msg_size:%d\n", g_oam_msg_ptr->numMsg, g_oam_msg_ptr->msgType, msg_size);
for(i = 0; i < g_oam_msg_ptr->numMsg; i++)
{
@ -83,20 +89,29 @@ void oam_msg_proc(uint32_t u32msg_addr, uint32_t u32msg_size)
switch(msg_type)
{
case SPU_OAM_BASE_DELAY_SET_REQ:
UCP_PRINT_LOG("oam_msg_proc numMsg:%d i:%d msg_type:0x%x\n", g_oam_msg_ptr->numMsg, i, msg_type);
UCP_PRINT_ERROR("oam_msg_proc numMsg:%d i:%d msg_type:0x%x\n", g_oam_msg_ptr->numMsg, i, msg_type);
oam_base_delay_set_ptr = (SpuOamBaseDelaySetReq_t *)((uint8_t *)g_oam_msg_ptr + sizeof(OamMsgTransferHeader_t));
oam_base_delay_proc(oam_base_delay_set_ptr, g_oam_msg_ptr);
break;
case SPU_OAM_BASE_DELAY_QRY_REQ:
UCP_PRINT_LOG("oam_msg_proc numMsg:%d i:%d msg_type:0x%x\n", g_oam_msg_ptr->numMsg, i, msg_type);
UCP_PRINT_ERROR("oam_msg_proc numMsg:%d i:%d msg_type:0x%x\n", g_oam_msg_ptr->numMsg, i, msg_type);
oam_base_delay_qry_ptr = (SpuOamBaseDelayQryReq_t *)((uint8_t *)g_oam_msg_ptr + sizeof(OamMsgTransferHeader_t));
oam_base_qry_proc(oam_base_delay_qry_ptr, g_oam_msg_ptr);
break;
case SPU_OAM_FIBER_DELAY_QRY_REQ:
UCP_PRINT_LOG("oam_msg_proc numMsg:%d i:%d msg_type:0x%x\n", g_oam_msg_ptr->numMsg, i, msg_type);
UCP_PRINT_ERROR("oam_msg_proc numMsg:%d i:%d msg_type:0x%x\n", g_oam_msg_ptr->numMsg, i, msg_type);
oam_fiber_delay_qry_ptr = (SpuOamFiberDelayQryReq_t *)((uint8_t *)g_oam_msg_ptr + sizeof(OamMsgTransferHeader_t));
oam_fiber_delay_proc(oam_fiber_delay_qry_ptr, g_oam_msg_ptr);
break;
case SPU_OAM_FRAME_HEAD_OFFSET_REQ:
UCP_PRINT_ERROR("oam_msg_proc numMsg:%d i:%d msg_type:0x%x\n", g_oam_msg_ptr->numMsg, i, msg_type);
oam_frame_head_offset_ptr = (SpuOamFrameHeadOffsetReq_t *)((uint8_t *)g_oam_msg_ptr + sizeof(OamMsgTransferHeader_t));
oam_frame_head_offset_proc(oam_frame_head_offset_ptr, g_oam_msg_ptr);
break;
case SPU_OAM_FRAME_HEAD_OFFSET_QRY_REQ:
UCP_PRINT_ERROR("oam_msg_proc numMsg:%d i:%d msg_type:0x%x\n", g_oam_msg_ptr->numMsg, i, msg_type);
oam_frame_head_offset_qry_proc(g_oam_msg_ptr);
break;
default:
phy_oam_msg_proc(u32msg_addr, u32msg_size);
break;
@ -185,6 +200,50 @@ void oam_fiber_delay_proc(SpuOamFiberDelayQryReq_t *spu_oam_fiber_delay_qry_ptr,
return;
}
void oam_frame_head_offset_proc(SpuOamFrameHeadOffsetReq_t *spu_oam_frame_head_offset_ptr, OamMsgTransferHeader_t *spu_oam_msg_ptr)
{
uint8_t u8core_id = (uint8_t)get_core_id();
SpuOamFrameHeadOffsetRsp_t *oam_frame_head_offset_rsp_ptr = NULL;
if(NULL == spu_oam_frame_head_offset_ptr)
{
UCP_PRINT_ERROR("oam_frame_head_offset_proc is null\n");
return;
}
/*调用接口帧头偏移配置结果0:fail 1:ok*/
oam_frame_head_offset_rsp_ptr = (SpuOamFrameHeadOffsetRsp_t *)set_frame_head_offset((stCpriFrameHeadOffsetReq*)spu_oam_frame_head_offset_ptr);
g_oam_frame_head_offset_rsp_ptr->u8result = oam_frame_head_offset_rsp_ptr->u8result;
debug_write(DBG_DDR_COMMON_IDX(u8core_id, 56), g_oam_frame_head_offset_rsp_ptr->u8result);
UCP_PRINT_ERROR("oam_frame_head_offset_proc u8result:%d \n", g_oam_frame_head_offset_rsp_ptr->u8result);
oam_spu_send_msg(spu_oam_msg_ptr->cellIndex, (uint32_t)g_oam_frame_head_offset_rsp_ptr, sizeof(SpuOamFrameHeadOffsetRsp_t), SPU_OAM_FRAME_HEAD_OFFSET_RSP);
return;
}
void oam_frame_head_offset_qry_proc(OamMsgTransferHeader_t *spu_oam_msg_ptr)
{
uint8_t u8core_id = (uint8_t)get_core_id();
if(NULL == spu_oam_msg_ptr)
{
UCP_PRINT_ERROR("spu_oam_msg_ptr is null\n");
return;
}
/*调用接口帧头偏移配置结果0:fail 1:ok*/
get_cpri_framehead_offset((stCpriGetFrameHeadOffset *)g_oam_frame_head_offset_qry_rsp_ptr);
debug_write(DBG_DDR_COMMON_IDX(u8core_id, 57), g_oam_frame_head_offset_qry_rsp_ptr->u16frame_head_offset);
UCP_PRINT_ERROR("oam_frame_head_offset_qry_proc u8result:%d u16frame_head_offset:0x%x \n", g_oam_frame_head_offset_qry_rsp_ptr->u8result, g_oam_frame_head_offset_qry_rsp_ptr->u16frame_head_offset);
oam_spu_send_msg(spu_oam_msg_ptr->cellIndex, (uint32_t)g_oam_frame_head_offset_qry_rsp_ptr, sizeof(SpuOamFrameHeadOffsetQryRsp_t), SPU_OAM_FRAME_HEAD_OFFSET_QRY_RSP);
return;
}
static inline uint32_t oam_spu_fill_msg_header(uint8_t inst_id, char* buf, uint32_t size, uint32_t msgType)
{
OamMsgTransferHeader_t header;

View File

@ -45,7 +45,7 @@ void phy_queue_polling(void)
if(SPU_OAM_MSG_TYPE == u8msg_type)/* OAM MSG */
{
#ifdef TEST_ENABLE
#ifdef PCIE_BACKHAUL
oam_msg_proc_test(u32msg_addr, u32msg_size);
#else
oam_msg_proc(u32msg_addr, u32msg_size);