MAILBOX_LOCAL int mailbox_ipc_int_handle(unsigned int int_src) { struct mb_vx_cfg *cfg = &g_mailbox_vx_cfg_tbl[0]; struct mb_vx_proc *proc = MAILBOX_NULL; struct mb_vx_work *work = MAILBOX_NULL; unsigned int count = sizeof(g_mailbox_vx_proc_tbl)/sizeof(struct mb_vx_proc); unsigned int proc_id = 0; unsigned int channel_id = 0; unsigned int is_find = MAILBOX_FALSE; unsigned int ret_val = MAILBOX_OK; if(MAILBOX_INIT_MAGIC != g_mailbox_handle.init_flag) { return (int)ret_val; } g_hifimailbox++; /*找到传入ID对应的邮箱配置*/ while (MAILBOX_MAILCODE_INVALID != cfg->channel_id) { /*处理所有挂接到这个中断号的接收邮箱通道*/ proc_id = cfg->proc_style; if ((int_src == cfg->Int_src) && (MAILBOX_VXWORKS_PROC_STYLE_SEND_RESERVED != cfg->proc_style)) { channel_id = cfg->channel_id; proc = &g_mailbox_vx_proc_tbl[0]; count = sizeof(g_mailbox_vx_proc_tbl)/sizeof(struct mb_vx_proc); while (count) { /*找到此邮箱通道对应的任务信息*/ if (proc_id == proc->id) { work = proc->vxqueue; is_find = (unsigned int)mailbox_ipc_process( work, proc, channel_id, proc_id); break; } count--; proc++; } if (0 == count) { ret_val = (unsigned int)mailbox_logerro_p1(MAILBOX_ERR_VXWORKS_MAIL_TASK_NOT_FIND, channel_id); } } cfg++; } if (MAILBOX_TRUE != is_find) { ret_val = (unsigned int)mailbox_logerro_p1(MAILBOX_ERR_VXWORKS_MAIL_INT_NOT_FIND, channel_id); } return (int)ret_val; }
MAILBOX_LOCAL long mailbox_ipc_int_handle(unsigned long int_num) { struct mb_local_cfg *local_cfg = &g_mb_local_cfg_tbl[0]; struct mb_local_proc *local_proc = MAILBOX_NULL; struct mb_local_work *local_work = MAILBOX_NULL; unsigned long count = sizeof(g_mailbox_local_proc_tbl)/sizeof(struct mb_local_proc); unsigned long proc_id = 0; unsigned long channel_id = 0; unsigned long is_find = MAILBOX_FALSE; unsigned long ret_val = MAILBOX_OK; /*找到传入ID对应的邮箱配置*/ while (MAILBOX_MAILCODE_INVALID != local_cfg->channel_id) { /*处理所有挂接到这个中断号的接收邮箱通道*/ proc_id = local_cfg->property; if ((int_num == local_cfg->int_src) && (MAILBOX_SEND != (MAILBOX_PROC_MASK & local_cfg->property))) { channel_id = local_cfg->channel_id; if (check_himntn(HIMNTN_PRINTK_WHO_WAKEUP_ACPU)) { printk(KERN_INFO "%s:%d:mailbox channel_id:[%ld]", __func__, __LINE__, channel_id); } local_proc = &g_mailbox_local_proc_tbl[0]; count = sizeof(g_mailbox_local_proc_tbl)/sizeof(struct mb_local_proc); while (count) { /*找到此邮箱通道对应的任务信息*/ if (proc_id == local_proc->proc_id) { local_work = local_proc->work_list; is_find = mailbox_ipc_process( local_work, local_proc, channel_id, proc_id); break; } count--; local_proc++; } if (0 == count) { ret_val = mailbox_logerro_p1(MAILBOX_ERR_LINUX_MAIL_TASK_NOT_FIND, channel_id); } } local_cfg++; } if (MAILBOX_TRUE != is_find) { ret_val = mailbox_logerro_p1(MAILBOX_ERR_LINUX_MAIL_INT_NOT_FIND, channel_id); } return ret_val; }
MAILBOX_LOCAL int mailbox_ipc_int_handle(unsigned int int_num) { struct mb_local_cfg *local_cfg = &g_mb_local_cfg_tbl[0]; struct mb_local_proc *local_proc = MAILBOX_NULL; struct mb_local_work *local_work = MAILBOX_NULL; unsigned int count = sizeof(g_mailbox_local_proc_tbl)/sizeof(struct mb_local_proc); unsigned int proc_id = 0; unsigned int channel_id = 0; unsigned int is_find = MAILBOX_FALSE; unsigned int ret_val = MAILBOX_OK; /*找到传入ID对应的邮箱配置*/ while (MAILBOX_MAILCODE_INVALID != local_cfg->channel_id) { /*处理所有挂接到这个中断号的接收邮箱通道*/ proc_id = local_cfg->property; if ((int_num == local_cfg->int_src) && (MAILBOX_SEND != (MAILBOX_PROC_MASK & local_cfg->property))) { channel_id = local_cfg->channel_id; local_proc = &g_mailbox_local_proc_tbl[0]; count = sizeof(g_mailbox_local_proc_tbl)/sizeof(struct mb_local_proc); while (count) { /*找到此邮箱通道对应的任务信息*/ if (proc_id == local_proc->proc_id) { local_work = local_proc->work_list; is_find = mailbox_ipc_process( local_work, local_proc, channel_id, proc_id); break; } count--; local_proc++; } if (0 == count) { ret_val = mailbox_logerro_p1(MAILBOX_ERR_LINUX_MAIL_TASK_NOT_FIND, channel_id); } } local_cfg++; } if (MAILBOX_TRUE != is_find) { ret_val = mailbox_logerro_p1(MAILBOX_ERR_LINUX_MAIL_INT_NOT_FIND, channel_id); } return ret_val; }