MAILBOX_LOCAL long mailbox_ipc_process(
                struct mb_local_work  *local_work,
                struct mb_local_proc  *local_proc,
                unsigned long channel_id,
                unsigned long proc_id)
{
    unsigned long is_find = MAILBOX_TRUE;

    while (local_work) {
        /*从邮箱工作队列中找到对应的邮箱,设置标志位并释放信号量通知处理任务*/
        if (channel_id  == local_work->channel_id) {
            /*设置任务邮箱工作队列链表中此邮箱的数据标志位*/
            local_work->data_flag = MAILBOX_TRUE;
            
#ifdef MAILBOX_OPEN_MNTN              
            mailbox_record_sche_send(local_work->mb_priv);
#endif             
            wake_lock(&mb_lpwr_lock);

            if ((proc_id > MAILBOX_RECV_TASK_START)
                && (proc_id < MAILBOX_RECV_TASK_END)) {
             
                /*释放信号量,通知任务*/
                local_proc->incoming = MAILBOX_TRUE;
                wake_up(&local_proc->wait);

            } else if(MAILBOX_RECV_TASKLET_HI == proc_id) {
                 /*tasklet处理方式,在tasklet中处理邮箱数据*/
                tasklet_hi_schedule(&local_proc->tasklet);
                 
            } else if(MAILBOX_RECV_TASKLET == proc_id) {
                 /*tasklet处理方式,在tasklet中处理邮箱数据*/
                tasklet_schedule(&local_proc->tasklet);
                 
            } else if(MAILBOX_RECV_INT_IRQ == proc_id) {
                /*中断处理方式,在中断中直接处理邮箱数据*/
                mailbox_receive_process((unsigned long)local_proc);
                
            } else {
                is_find = MAILBOX_FALSE;
            }

        }

        local_work = local_work->next;
    }

    return is_find;
}
MAILBOX_LOCAL int mailbox_ipc_process(
                struct mb_vx_work  *work,
                struct mb_vx_proc  *proc,
                unsigned int channel_id,
                unsigned int proc_id)
{
    unsigned int is_find = MAILBOX_FALSE;

    while (work) {
        /*从邮箱工作队列中找到对应的邮箱,设置标志位并释放信号量通知处理任务*/
        if (channel_id  == work->channel_id) {
            if ((proc_id > MAILBOX_VXWORKS_PROC_STYLE_TASK_RESERVED) && (proc_id < MAILBOX_VXWORKS_PROC_STYLE_TASK_BUTT)) {
                is_find = MAILBOX_TRUE;

                /*设置任务邮箱工作队列链表中此邮箱的数据标志位*/
                work->data_flag = MAILBOX_TRUE;
 #ifdef MAILBOX_OPEN_MNTN
                mailbox_record_sche_send(work->mb_priv);
 #endif
                /*释放信号量,通知任务*/
                osl_sem_up(&proc->sema);
            } else if (MAILBOX_VXWORKS_PROC_STYLE_INT_NORMAL == proc_id) {
                 /*中断处理方式,在中断中直接处理邮箱数据*/
                if (work->cb) {
                    is_find = MAILBOX_TRUE;

                    if (MAILBOX_OK !=  work->cb(work->channel_id)) {
                         (void)mailbox_logerro_p1(MAILBOX_ERR_VXWORKS_CALLBACK_ERRO, work->channel_id);
                    }
                } else {
                     (void)mailbox_logerro_p1(MAILBOX_ERR_VXWORKS_CALLBACK_NOT_FIND, work->channel_id);
                }
            } else {
                is_find = MAILBOX_FALSE;
            }

        }
        work = work->next;
    }

    return (int)is_find;
}