/*****************************************************************************
  3 函数定义
*****************************************************************************/
MAILBOX_LOCAL void mailbox_receive_process(unsigned long data)
{
    struct mb_local_proc *proc = (struct mb_local_proc *)data;
    struct mb_local_work *work = proc->work_list;

    
    while (MAILBOX_NULL != work) {
        /*遍历标志位,如果有置位,调用对应的邮箱ID号的回调函数*/
        if (MAILBOX_TRUE == work->data_flag) {
            work->data_flag = MAILBOX_FALSE;
#ifdef MAILBOX_OPEN_MNTN                              
            mailbox_record_sche_recv(work->mb_priv);
#endif               
            if (MAILBOX_NULL != work->cb) {
                if (MAILBOX_OK !=  work->cb(work->channel_id))
                {
                     mailbox_logerro_p1(MAILBOX_ERR_LINUX_CALLBACK_ERRO, work->channel_id);
                }
            } else {
                mailbox_logerro_p1(MAILBOX_ERR_LINUX_CALLBACK_NOT_FIND, work->channel_id);
                #ifdef _DRV_LLT_
                goto process_exit;
                #endif
            }
        }
        work = work->next;
    }
#ifdef _DRV_LLT_
process_exit:
#endif
    wake_unlock(&mb_lpwr_lock);
}
MAILBOX_LOCAL void mailbox_receive_task(
                osl_sem_id         *sema,
                struct mb_vx_work  **work_list )
{
    struct mb_vx_work    *work   =   MAILBOX_NULL;

    /* coverity[no_escape] */
    while (1) { /*lint !e716*/
        if (MAILBOX_OK == osl_sem_downtimeout(sema, WAIT_FOREVER)) {
            work = *work_list;
            while (MAILBOX_NULL != work) {
                /*遍历标志位,如果有置位,调用对应的邮箱ID号的回调函数*/
                if (MAILBOX_TRUE == work->data_flag) {
                    work->data_flag = MAILBOX_FALSE;
 #ifdef MAILBOX_OPEN_MNTN
                mailbox_record_sche_recv(work->mb_priv);
 #endif
                    if (work->cb) {
                        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);
                        #ifdef _DRV_LLT_
                        /*PC UT 用例保证能够跳出*/
                        return MAILBOX_ERR_VXWORKS_CALLBACK_NOT_FIND;
                        #endif
                    }
                }
                work = work->next;
            }
        }
    }
}