96 lines
2.2 KiB
C
96 lines
2.2 KiB
C
|
#ifndef _H_IOT_MC_IPC
|
||
|
#define _H_IOT_MC_IPC
|
||
|
|
||
|
/* os shim includes */
|
||
|
#include "os_types.h"
|
||
|
#include "iot_utils.h"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
/* SW defined mail box credit number, should match with HW */
|
||
|
#define IOT_IPC_MAIL_SLOT_MAX 8
|
||
|
|
||
|
#define IOT_APPCPU_ID 0
|
||
|
#define IOT_SECCPU_ID 1
|
||
|
|
||
|
#define APP_CPU_POLL_SPEED 100000
|
||
|
|
||
|
#define SEC_CPU_POLL_SPEED (APP_CPU_POLL_SPEED*10)
|
||
|
|
||
|
typedef struct _iot_mc_ipc_msg
|
||
|
{
|
||
|
/* msg id mailed between cpus */
|
||
|
uint32_t ipc_msg_id;
|
||
|
/* pointer to msg args buffer */
|
||
|
void* ipc_msg_arg;
|
||
|
/* mail seq, useful to debug msg loss */
|
||
|
uint32_t ipc_seq;
|
||
|
/* send side time stamp, used for profiling */
|
||
|
uint32_t ipc_mail_sender_tick;
|
||
|
/* recev side time stamp, used for profiling */
|
||
|
uint32_t ipc_mail_recver_tick;
|
||
|
}iot_mc_ipc_msg_t;
|
||
|
|
||
|
typedef struct _iot_mc_ipc_hw_status
|
||
|
{
|
||
|
uint32_t hw_send_free_credit : 8;
|
||
|
uint32_t hw_send_slot_full1 : 1;
|
||
|
uint32_t hw_recv_slot_avail : 8;
|
||
|
uint32_t hw_recv_slot_empty : 1;
|
||
|
uint32_t reserve : 14;
|
||
|
}iot_mc_ipc_hw_status_t;
|
||
|
|
||
|
typedef void (*iot_mc_ipc_recv_func_t)(uint32_t msg_id, void* msg_arg);
|
||
|
|
||
|
#define POLL_MODE 0
|
||
|
#define INTC_MODE 1
|
||
|
|
||
|
typedef struct _iot_mc_ipc_mailbox
|
||
|
{
|
||
|
uint8_t ready;
|
||
|
uint8_t cupid;
|
||
|
uint8_t mode;
|
||
|
|
||
|
/* send msg by mailbox, this variable indicate how many free */
|
||
|
uint32_t ipc_fifo_credit;
|
||
|
|
||
|
/* log of send histrory */
|
||
|
uint8_t ipc_send_idx;
|
||
|
iot_mc_ipc_msg_t send_mail[IOT_IPC_MAIL_SLOT_MAX];
|
||
|
uint32_t ipc_send_seq;
|
||
|
|
||
|
uint32_t ipc_fifo_recv_credit;
|
||
|
/* log of recv history */
|
||
|
uint8_t ipc_recv_idx;
|
||
|
iot_mc_ipc_msg_t recv_mail[IOT_IPC_MAIL_SLOT_MAX];
|
||
|
|
||
|
/* log last time hw status */
|
||
|
iot_mc_ipc_hw_status_t ipc_hw_status;
|
||
|
|
||
|
/* rece msg handler, registerd by caller */
|
||
|
iot_mc_ipc_recv_func_t recv_callback;
|
||
|
}iot_mc_ipc_mailbox_t;
|
||
|
|
||
|
|
||
|
|
||
|
uint32_t iot_mc_ipc_init(iot_mc_ipc_recv_func_t callback, uint8_t cpuid, uint8_t mode);
|
||
|
|
||
|
uint32_t iot_mc_ipc_deinit(void);
|
||
|
|
||
|
uint32_t iot_mc_ipc_query_mailbox_freecredit(void);
|
||
|
|
||
|
uint32_t iot_mc_ipc_query_mailbox_reccredit(void);
|
||
|
|
||
|
uint32_t iot_mc_ipc_send_msg(uint32_t msg_id, void* msg_arg);
|
||
|
|
||
|
uint32_t iot_mc_ipc_get_hw_stauts(void);
|
||
|
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif
|