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

131 lines
3.9 KiB
C

#ifndef __OSPMSGH__
#define __OSPMSGH__
#ifdef __cplusplus
extern "C" {
#endif
#define OSP_MEGQ_DEP 8192
#define OSP_MESSAGE_LEN sizeof(uint64_t)
extern char *gOspMsgQue;
#define IS_TIMER_MSG(pMsg)((pMsg->MsgType) == OSP_TIMER_TYPE)
#define OSP_MSG_QUE_SIZE (sizeof(Osp_MsgQ_Tcb))
typedef enum en_osp_msg_type
{
OSP_TIMER_TYPE = 0x5555,
OSP_SHELL_TYPE,
/*OSP_STR_LOG = 0x12350002,
OSP_BIN_LOG = 0x1234000a,*/
OSP_STR_LOG = 0x60,
OSP_BIN_LOG = 0x61,
OSP_PLATFORM_LOG = 0x62,
OSP_MAX_TYPE,
}EN_OSP_MSG_TYPE;
typedef struct tag_Osp_Msg_Head
{
uint32_t MsgType;
uint32_t MsgSize; /*is just msgdata len, not include Osp_Msg_Head*/
uint32_t SrcId;
uint32_t DstId;
}Osp_Msg_Head;
typedef enum OSP_MSG_TYPE
{
UCP4008_KERNEL_INTER = 0, /* 核间通信 */
UCP4008_OSP_HANDSHAKE = 7, /* 握手消息 */
UCP4008_OSP_CFG_FILE, /* 微码配置文件消息 */
UCP4008_OSP_DDR_INIT, /* DDR初始化配置消息 */
UCP4008_OSP_DUMP, /* DUMP消息 */
UCP4008_OSP_LOG, /* LOG消息 */
UCP4008_OSP_SHELL, /* SHELL消息 */
UCP4008_OSP_SHELL_ECHO, /* SHELL回显消息 */
UCP4008_KERNEL_INNER = 0XFF, /* 核内通信消息 */
}osp_msg_type;
#if 0
typedef struct tag_Osp_Ape_Msg_Head
{
U32 MsgType;
U8 MsgSize;
U8 Msg_Padding[3]; /*reserved*/
U8 Src_Core_Id;
U8 Dst_Core_Id;
U8 Src_Task_Id;
U8 Dst_Task_Id;
U8 data[0];
}Osp_Ape_Msg_Head;
#endif
typedef struct tag_Osp_Timer_Msg_Block
{
Osp_Msg_Head osp_msg_head;
uint64_t data;
}Osp_Timer_Msg_Block;
#define APE_MSG_DADA_LEN(x) (x->msg_size - APE_MSG_HEAD_SIZE)
#define APE_MSG_HEAD_SIZE sizeof(Osp_Ape_Msg_Head)
#define APE_MSG_HEAD_TO_COMM(x) (char *)((uint64_t)x + APE_MSG_HEAD_SIZE)
#define MSG_HEAD_SIZE sizeof(Osp_Msg_Head)
#define MSG_HEAD_TO_COMM(x) (char *)((uint64_t)x + MSG_HEAD_SIZE)
#define MSG_DADA_LEN(x) (x->MsgSize)
#define MSG_TO_OFFSET(x) ((uint64_t)x - (uint64_t)gOspMsgQue)
#define OFFSET_TO_MSG(x) (Osp_Msg_Head *)((uint64_t)x + (uint64_t)gOspMsgQue)
typedef struct tag_Osp_MsgQ_Tcb
{
Osp_SoftQue soft_que;
uint64_t data[OSP_MEGQ_DEP];
}Osp_MsgQ_Tcb;
#define OSP_MSGQ_ENCNT(que) que->soft_que.EnCnt
#define OSP_MSGQ_DECNT(que) que->soft_que.DeCnt
#define OSP_MSGQ_CUR(que) que->soft_que.CurNum
#define OSP_MSGQ_DEP(que) que->soft_que.Dep
#define OSP_MSGQ_QUE(que) que->soft_que
extern int osp_create_msgq(Osp_MsgQ_Tcb *, char *name);
extern Osp_Msg_Head *osp_alloc_msg(uint32_t Len);
Osp_Msg_Head *osp_alloc_msgTimer(void);
Osp_Msg_Head *osp_alloc_msgCmd(uint32_t Len);
extern OSP_STATUS osp_send_msg(Osp_Msg_Head *p_MsgHead);
extern Osp_Msg_Head *osp_rev_msg(void);
extern Osp_Msg_Head *osp_rev_msgtry(void);
Osp_Msg_Head *osp_rev_msg_timeout(uint32_t timeout);
extern void osp_free_msg(Osp_Msg_Head *pHead);
extern OSP_STATUS osp_msg_que_init(void);
extern int dequetry(uint64_t *pvalue, Osp_MsgQ_Tcb *que);
extern int dequetimeout(uint64_t *pvalue, Osp_MsgQ_Tcb *que, uint32_t timeout);
extern Osp_Msg_Head *osp_rev_msgid(int id);
extern Osp_Msg_Head *osp_alloc_msgId(uint32_t Len, int id);
extern OSP_STATUS osp_send_msgId(Osp_Msg_Head *p_MsgHead,int id);
extern int osp_free_msgid(Osp_Msg_Head *pHead,int id);
extern OSP_STATUS osp_send_por_msg(Osp_Msg_Head *p_MsgHead, Osp_MsgQ_Tcb *que);
extern Osp_Msg_Head *osp_rev_promsg(Osp_MsgQ_Tcb *que);
#ifdef __cplusplus
}
#endif
#endif /*__OSPMSGH__ */