MAILBOX_EXTERN long mailbox_channel_register( unsigned long channel_id, unsigned long int_src, unsigned long dst_id, unsigned long direct, void **mutex) { struct mb_local_cfg *local_cfg = &g_mb_local_cfg_tbl[0]; while (MAILBOX_MAILCODE_INVALID != local_cfg->channel_id) { if (channel_id == local_cfg->channel_id) { *mutex = mailbox_mutex_create(local_cfg); if (MAILBOX_NULL == *mutex) { return mailbox_logerro_p1(MAILBOX_CRIT_PORT_CONFIG, channel_id); } /*通道资源配置已找到,注册IPC中断*/ local_cfg->int_src = int_src; local_cfg->dst_id = dst_id; if(MIALBOX_DIRECTION_RECEIVE == direct) { BSP_IPC_IntConnect((IPC_INT_LEV_E)int_src , (VOIDFUNCPTR)mailbox_ipc_int_handle, int_src); BSP_IPC_IntEnable ((IPC_INT_LEV_E)int_src); /*板侧ST用例通道注册*/ test_mailbox_msg_reg(channel_id); } break; } local_cfg++; } /*如果适配层找不到对应的配置,报错*/ if (MAILBOX_MAILCODE_INVALID == local_cfg->channel_id) { return mailbox_logerro_p1(MAILBOX_ERR_LINUX_CHANNEL_NOT_FIND, channel_id); } return MAILBOX_OK; }
MAILBOX_EXTERN int mailbox_channel_register( unsigned int channel_id, unsigned int int_src, unsigned int dst_id, unsigned int direct, void **mutex) { struct mb_vx_cfg *cfg = &g_mailbox_vx_cfg_tbl[0]; while (MAILBOX_MAILCODE_INVALID != cfg->channel_id) { if (channel_id == cfg->channel_id) { *mutex = mailbox_mutex_create(); /*通道资源配置已找到,注册IPC中断*/ cfg->Int_src = int_src; cfg->dst_cpu = dst_id; if(MIALBOX_DIRECTION_RECEIVE == direct) { (void)BSP_IPC_IntConnect((IPC_INT_LEV_E)int_src , (VOIDFUNCPTR)mailbox_ipc_int_handle, int_src); (void)BSP_IPC_IntEnable ((IPC_INT_LEV_E)int_src); /*板侧ST用例通道注册*/ tm_mailbox_msg_reg(channel_id); /*TODO: 如果开发单核下电重启特性,这里需要主动触发一次通道读回调: */ /*mailbox_ipc_int_handle(int_src);*/ } return MAILBOX_OK; } cfg++; } /*如果适配层找不到对应的配置,报错*/ return mailbox_logerro_p1(MAILBOX_ERR_VXWORKS_CHANNEL_NOT_FIND, channel_id); }