/***************************************************************************** 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; } } } }