/* * Refer rendezvous port */ SYSCALL ER td_ref_por_impl( ID porid, TD_RPOR *pk_rpor ) { PORCB *porcb; ER ercd = E_OK; CHECK_PORID(porid); porcb = get_porcb(porid); BEGIN_DISABLE_INTERRUPT; if ( porcb->porid == 0 ) { ercd = E_NOEXS; } else { pk_rpor->exinf = porcb->exinf; pk_rpor->wtsk = knl_wait_tskid(&porcb->call_queue); pk_rpor->atsk = knl_wait_tskid(&porcb->accept_queue); pk_rpor->maxcmsz = porcb->maxcmsz; pk_rpor->maxrmsz = porcb->maxrmsz; } END_DISABLE_INTERRUPT; return ercd; }
/* * Refer semaphore state */ SYSCALL ER tk_ref_sem_impl( ID semid, T_RSEM *pk_rsem ) { SEMCB *semcb; ER ercd = E_OK; CHECK_SEMID(semid); semcb = get_semcb(semid); BEGIN_CRITICAL_SECTION; if ( semcb->semid == 0 ) { ercd = E_NOEXS; } else { pk_rsem->exinf = semcb->exinf; pk_rsem->wtsk = knl_wait_tskid(&semcb->wait_queue); pk_rsem->semcnt = semcb->semcnt; } END_CRITICAL_SECTION; return ercd; }
/* * Refer object state */ SYSCALL ER td_ref_sem_impl( ID semid, TD_RSEM *pk_rsem ) { SEMCB *semcb; ER ercd = E_OK; CHECK_SEMID(semid); semcb = get_semcb(semid); BEGIN_DISABLE_INTERRUPT; if ( semcb->semid == 0 ) { ercd = E_NOEXS; } else { pk_rsem->exinf = semcb->exinf; pk_rsem->wtsk = knl_wait_tskid(&semcb->wait_queue); pk_rsem->semcnt = semcb->semcnt; } END_DISABLE_INTERRUPT; return ercd; }
/* * Refer event flag state */ SYSCALL ER td_ref_flg_impl( ID flgid, TD_RFLG *pk_rflg ) { FLGCB *flgcb; ER ercd = E_OK; CHECK_FLGID(flgid); flgcb = get_flgcb(flgid); BEGIN_DISABLE_INTERRUPT; if ( flgcb->flgid == 0 ) { ercd = E_NOEXS; } else { pk_rflg->exinf = flgcb->exinf; pk_rflg->wtsk = knl_wait_tskid(&flgcb->wait_queue); pk_rflg->flgptn = flgcb->flgptn; } END_DISABLE_INTERRUPT; return ercd; }
/* * Check event flag state */ SYSCALL ER tk_ref_flg_impl( ID flgid, T_RFLG *pk_rflg ) { FLGCB *flgcb; ER ercd = E_OK; CHECK_FLGID(flgid); flgcb = get_flgcb(flgid); BEGIN_CRITICAL_SECTION; if ( flgcb->flgid == 0 ) { ercd = E_NOEXS; } else { pk_rflg->exinf = flgcb->exinf; pk_rflg->wtsk = knl_wait_tskid(&flgcb->wait_queue); pk_rflg->flgptn = flgcb->flgptn; } END_CRITICAL_SECTION; return ercd; }
/* * Refer mutex state */ SYSCALL ER td_ref_mtx_impl( ID mtxid, TD_RMTX *pk_rmtx ) { MTXCB *mtxcb; ER ercd = E_OK; CHECK_MTXID(mtxid); mtxcb = get_mtxcb(mtxid); BEGIN_DISABLE_INTERRUPT; if ( mtxcb->mtxid == 0 ) { ercd = E_NOEXS; } else { pk_rmtx->exinf = mtxcb->exinf; pk_rmtx->htsk = ( mtxcb->mtxtsk != NULL )? mtxcb->mtxtsk->tskid: 0; pk_rmtx->wtsk = knl_wait_tskid(&mtxcb->wait_queue); } END_DISABLE_INTERRUPT; return ercd; }
/* * Refer fixed size memory pool state */ SYSCALL ER td_ref_mpf_impl( ID mpfid, TD_RMPF *pk_rmpf ) { MPFCB *mpfcb; ER ercd = E_OK; CHECK_MPFID(mpfid); mpfcb = get_mpfcb(mpfid); BEGIN_DISABLE_INTERRUPT; if ( mpfcb->mpfid == 0 ) { ercd = E_NOEXS; } else if ( knl_isLockedOBJ(&mpfcb->lock) ) { ercd = E_CTX; } else { pk_rmpf->wtsk = knl_wait_tskid(&mpfcb->wait_queue); pk_rmpf->exinf = mpfcb->exinf; pk_rmpf->frbcnt = mpfcb->frbcnt; } END_DISABLE_INTERRUPT; return ercd; }
/* * Check fixed size pool state */ SYSCALL ER tk_ref_mpf_impl( ID mpfid, T_RMPF *pk_rmpf ) { MPFCB *mpfcb; ER ercd = E_OK; CHECK_MPFID(mpfid); CHECK_DISPATCH(); mpfcb = get_mpfcb(mpfid); knl_LockOBJ(&mpfcb->lock); if ( mpfcb->mpfid == 0 ) { ercd = E_NOEXS; } else { DISABLE_INTERRUPT; pk_rmpf->wtsk = knl_wait_tskid(&mpfcb->wait_queue); ENABLE_INTERRUPT; pk_rmpf->exinf = mpfcb->exinf; pk_rmpf->frbcnt = mpfcb->frbcnt; } knl_UnlockOBJ(&mpfcb->lock); return ercd; }