yb_arm/osp/inc/ospSwQueue.h
2023-07-12 14:14:31 +08:00

134 lines
3.5 KiB
C

// +FHDR------------------------------------------------------------
// Copyright (c) 2022 SmartLogic.
// ALL RIGHTS RESERVED
// -----------------------------------------------------------------
// Filename : ospSwQueue.h
// Author :
// Created On : 2023-01-19
// Last Modified :
// -----------------------------------------------------------------
// Description:
//
//
// -FHDR------------------------------------------------------------
#ifndef __OSP_SW_QUEUE_H__
#define __OSP_SW_QUEUE_H__
#define SPU_APE_RFM_QUE_SIG_SIZE (512) /* 软件队列一个单位的长度为512字节 */
#define OSP_APE_RFM_SHELL_QUE_DEP (8) /* Shell软件队列的深度为8 */
#define OSP_APE_RFM_QUE_DEP (256)
#define OSP_APE_RFM_MSG_QUE_DEP (128)
#define OSP_APE_RFM_LOG_NUM (12)
#define OSP_APE_RFM_SHELL_NUM (24)
typedef enum OSP_SW_QUEUE_INDEX
{
SW_LOG_APE0 = 0,
SW_LOG_APE1,
SW_LOG_APE2,
SW_LOG_APE3,
SW_LOG_APE4,
SW_LOG_APE5,
SW_LOG_APE6,
SW_LOG_APE7,
SW_LOG_PET_RFM0,
SW_LOG_PET_RFM1,
SW_LOG_ECS_RFM0,
SW_LOG_ECS_RFM1,
SW_SHELL_APE0, //12
SW_SHELL_APE1,
SW_SHELL_APE2,
SW_SHELL_APE3,
SW_SHELL_APE4,
SW_SHELL_APE5,
SW_SHELL_APE6,
SW_SHELL_APE7,
SW_SHELL_PET_RFM0,
SW_SHELL_PET_RFM1,
SW_SHELL_ECS_RFM0,
SW_SHELL_ECS_RFM1,
SW_SHELL_ECHO_APE0, //24
SW_SHELL_ECHO_APE1,
SW_SHELL_ECHO_APE2,
SW_SHELL_ECHO_APE3,
SW_SHELL_ECHO_APE4,
SW_SHELL_ECHO_APE5,
SW_SHELL_ECHO_APE6,
SW_SHELL_ECHO_APE7,
SW_SHELL_ECHO_PET_RFM0,
SW_SHELL_ECHO_PET_RFM1,
SW_SHELL_ECHO_ECS_RFM0,
SW_SHELL_ECHO_ECS_RFM1,
SW_QUEUE_MAX_INDEX,
}osp_sw_queue_index_e;
typedef enum OSP_SW_QUEUE_TYPE
{
OSP_SW_QUEUE_LOG, /* Log软件队列 */
OSP_SW_QUEUE_SHELL, /* Shell软件队列 */
OSP_SW_QUEUE_MAX, /* 软件队列最大类型 */
}osp_sw_queue_type_e;
typedef struct SPU_SW_QUEUE_MEM
{
void* pvaddr;
uint16_t u16queue_id;
uint16_t u16queue_type;
uint8_t u8queue_offset;
uint8_t u8queue_padding;
uint16_t u16queue_mem_idx;
uint16_t u16queue_dep;
uint16_t u16queue_mask;
uint16_t u16queue_padding;
uint32_t u32queue_full_count;
uint32_t u32queue_empty_count;
}spu_sw_queue_mem_t;
typedef struct SPU_SW_QUEUE_SHARE_INFO
{
volatile uint16_t u16queue_deque_idx;
volatile uint16_t u16queue_enque_idx;
volatile uint16_t u16queue_alloc_idx;
volatile uint16_t u16queue_free_idx;
//volatile uint16_t u16queue_deque_count;
//volatile uint16_t u16queue_enque_count;
volatile uint16_t u16queue_msg[OSP_APE_RFM_QUE_DEP];
}spu_sw_queue_share_info_t;
#define SPU_SW_QUEUE_SHARE_INFO_SIZE (sizeof(spu_sw_queue_share_info_t))
typedef enum OSP_SW_MSG_PKT_TYPE
{
PKT_TYPE_LOG = 0x60,
PKT_TYPE_STR_LOG = 0x61,
}osp_sw_msg_pkt_type_e;
typedef struct OSP_SW_MSG_INFO
{
uint8_t u8Head[2];
uint16_t u16DataLen;
uint8_t u8PktType;
uint8_t u8CoreId;
uint16_t u16Tail;
int8_t i8Data[0];
}osp_sw_msg_info_t;
#define OSP_SW_MSG_INFO_HEAD1 (0xAB)
#define OSP_SW_MSG_INFO_HEAD2 (0xEF)
#define OSP_SW_MSG_INFO_SIZE sizeof(osp_sw_msg_info_t)
uint8_t osp_sw_queue_init(void);
uint8_t osp_sw_enque(osp_sw_queue_index_e emqueue_idx, int8_t *pi8addr);
uint8_t osp_sw_deque(osp_sw_queue_index_e emqueue_idx, osp_sw_msg_info_t **pstmsg_info);
int8_t *osp_sw_mem_malloc(osp_sw_queue_index_e emqueue_idx);
#endif /* __OSP_SW_QUEUE_H__ */