ER ref_mbf(ID mbfid, T_RMBF *pk_rmbf) { MBFCB *p_mbfcb; ER ercd; LOG_REF_MBF_ENTER(mbfid, pk_rmbf); CHECK_TSKCTX_UNL(); CHECK_ID(VALID_MBFID(mbfid)); CHECK_MACV_WRITE(pk_rmbf, T_RMBF); p_mbfcb = get_mbfcb(mbfid); lock_cpu(); if (p_mbfcb->p_mbfinib->mbfatr == TA_NOEXS) { ercd = E_NOEXS; } else if (VIOLATE_ACPTN(p_mbfcb->p_mbfinib->acvct.acptn4)) { ercd = E_OACV; } else { pk_rmbf->stskid = wait_tskid(&(p_mbfcb->swait_queue)); pk_rmbf->rtskid = wait_tskid(&(p_mbfcb->rwait_queue)); pk_rmbf->smbfcnt = p_mbfcb->smbfcnt; pk_rmbf->fmbfsz = p_mbfcb->fmbfsz; ercd = E_OK; } unlock_cpu(); error_exit: LOG_REF_MBF_LEAVE(ercd, pk_rmbf); return(ercd); }
ER ref_pdq(ID pdqid, T_RPDQ *pk_rpdq) { PDQCB *p_pdqcb; ER ercd; LOG_REF_PDQ_ENTER(pdqid, pk_rpdq); CHECK_TSKCTX_UNL(); CHECK_PDQID(pdqid); p_pdqcb = get_pdqcb(pdqid); t_lock_cpu(); if (p_pdqcb->p_pdqinib->pdqatr == TA_NOEXS) { ercd = E_NOEXS; } else { pk_rpdq->stskid = wait_tskid(&(p_pdqcb->swait_queue)); pk_rpdq->rtskid = wait_tskid(&(p_pdqcb->rwait_queue)); pk_rpdq->spdqcnt = p_pdqcb->count; ercd = E_OK; } t_unlock_cpu(); error_exit: LOG_REF_PDQ_LEAVE(ercd, pk_rpdq); return(ercd); }
/* * Refer message buffer state */ SYSCALL ER _td_ref_mbf( ID mbfid, TD_RMBF *pk_rmbf ) { MBFCB *mbfcb; TCB *tcb; ER ercd = E_OK; CHECK_MBFID(mbfid); mbfcb = get_mbfcb(mbfid); BEGIN_DISABLE_INTERRUPT; if ( mbfcb->mbfid == 0 ) { ercd = E_NOEXS; } else { pk_rmbf->exinf = mbfcb->exinf; pk_rmbf->wtsk = wait_tskid(&mbfcb->recv_queue); pk_rmbf->stsk = wait_tskid(&mbfcb->send_queue); if ( !mbf_empty(mbfcb) ) { pk_rmbf->msgsz = *(HEADER*)&mbfcb->buffer[mbfcb->head]; } else { if ( !isQueEmpty(&mbfcb->send_queue) ) { tcb = (TCB*)mbfcb->send_queue.next; pk_rmbf->msgsz = tcb->winfo.smbf.msgsz; } else { pk_rmbf->msgsz = 0; } } pk_rmbf->frbufsz = mbfcb->frbufsz; pk_rmbf->maxmsz = mbfcb->maxmsz; } END_DISABLE_INTERRUPT; return ercd; }
ER ref_flg(ID flgid, T_RFLG *pk_rflg) { FLGCB *p_flgcb; ER ercd; LOG_REF_FLG_ENTER(flgid, pk_rflg); CHECK_TSKCTX_UNL(); CHECK_FLGID(flgid); p_flgcb = get_flgcb(flgid); t_lock_cpu(); if (p_flgcb->p_flginib->flgatr == TA_NOEXS) { ercd = E_NOEXS; } else { pk_rflg->wtskid = wait_tskid(&(p_flgcb->wait_queue)); pk_rflg->flgptn = p_flgcb->flgptn; ercd = E_OK; } t_unlock_cpu(); error_exit: LOG_REF_FLG_LEAVE(ercd, pk_rflg); return(ercd); }
/* * Refer variable size memory pool state */ SYSCALL ER _td_ref_mpl( ID mplid, TD_RMPL *pk_rmpl ) { MPLCB *mplcb; QUEUE *fq, *q; INT frsz, blksz; ER ercd = E_OK; CHECK_MPLID(mplid); mplcb = get_mplcb(mplid); BEGIN_DISABLE_INTERRUPT; if ( mplcb->mplid == 0 ) { ercd = E_NOEXS; } else { pk_rmpl->exinf = mplcb->exinf; pk_rmpl->wtsk = wait_tskid(&mplcb->wait_queue); frsz = 0; for ( fq = mplcb->freeque.next; fq != &mplcb->freeque; fq = fq->next ) { blksz = FreeSize(fq); frsz += blksz; for ( q = (fq+1)->next; q != (fq+1); q = q->next ) { frsz += blksz; } } pk_rmpl->frsz = frsz; pk_rmpl->maxsz = MaxFreeSize(mplcb); } END_DISABLE_INTERRUPT; return ercd; }
ER ref_sem(ID semid, T_RSEM *pk_rsem) { SEMCB *p_semcb; ER ercd; LOG_REF_SEM_ENTER(semid, pk_rsem); CHECK_TSKCTX_UNL(); CHECK_ID(VALID_SEMID(semid)); p_semcb = get_semcb(semid); lock_cpu(); if (p_semcb->p_seminib->sematr == TA_NOEXS) { ercd = E_NOEXS; } else { pk_rsem->wtskid = wait_tskid(&(p_semcb->wait_queue)); pk_rsem->semcnt = p_semcb->semcnt; ercd = E_OK; } unlock_cpu(); error_exit: LOG_REF_SEM_LEAVE(ercd, pk_rsem); return(ercd); }
ER ref_mpf(ID mpfid, T_RMPF *pk_rmpf) { MPFCB *p_mpfcb; ER ercd; LOG_REF_MPF_ENTER(mpfid, pk_rmpf); CHECK_TSKCTX_UNL(); CHECK_ID(VALID_MPFID(mpfid)); p_mpfcb = get_mpfcb(mpfid); lock_cpu(); if (p_mpfcb->p_mpfinib->mpfatr == TA_NOEXS) { ercd = E_NOEXS; } else { pk_rmpf->wtskid = wait_tskid(&(p_mpfcb->wait_queue)); pk_rmpf->fblkcnt = p_mpfcb->fblkcnt; ercd = E_OK; } unlock_cpu(); error_exit: LOG_REF_MPF_LEAVE(ercd, pk_rmpf); return(ercd); }
ER ref_sem(ID semid, T_RSEM *pk_rsem) { SEMCB *p_semcb; ER ercd; LOG_REF_SEM_ENTER(semid, pk_rsem); CHECK_TSKCTX_UNL(); CHECK_SEMID(semid); CHECK_MACV_WRITE(pk_rsem, T_RSEM); p_semcb = get_semcb(semid); t_lock_cpu(); if (p_semcb->p_seminib->sematr == TA_NOEXS) { ercd = E_NOEXS; } else if (VIOLATE_ACPTN(p_semcb->p_seminib->acvct.acptn4)) { ercd = E_OACV; } else { pk_rsem->wtskid = wait_tskid(&(p_semcb->wait_queue)); pk_rsem->semcnt = p_semcb->semcnt; ercd = E_OK; } t_unlock_cpu(); error_exit: LOG_REF_SEM_LEAVE(ercd, pk_rsem); return(ercd); }
ER ref_mtx(ID mtxid, T_RMTX *pk_rmtx) { MTXCB *p_mtxcb; ER ercd; LOG_REF_MTX_ENTER(mtxid, pk_rmtx); CHECK_TSKCTX_UNL(); CHECK_ID(VALID_MTXID(mtxid)); CHECK_MACV_WRITE(pk_rmtx, T_RMTX); p_mtxcb = get_mtxcb(mtxid); lock_cpu(); if (p_mtxcb->p_mtxinib->mtxatr == TA_NOEXS) { ercd = E_NOEXS; } else if (VIOLATE_ACPTN(p_mtxcb->p_mtxinib->acvct.acptn4)) { ercd = E_OACV; } else { pk_rmtx->htskid = (p_mtxcb->p_loctsk != NULL) ? TSKID(p_mtxcb->p_loctsk) : TSK_NONE; pk_rmtx->wtskid = wait_tskid(&(p_mtxcb->wait_queue)); ercd = E_OK; } unlock_cpu(); error_exit: LOG_REF_MTX_LEAVE(ercd, pk_rmtx); return(ercd); }
ER ref_pdq(ID pdqid, T_RPDQ *pk_rpdq) { PDQCB *p_pdqcb; ER ercd; LOG_REF_PDQ_ENTER(pdqid, pk_rpdq); CHECK_TSKCTX_UNL(); CHECK_ID(VALID_PDQID(pdqid)); p_pdqcb = get_pdqcb(pdqid); lock_cpu(); pk_rpdq->stskid = wait_tskid(&(p_pdqcb->swait_queue)); pk_rpdq->rtskid = wait_tskid(&(p_pdqcb->rwait_queue)); pk_rpdq->spdqcnt = p_pdqcb->count; ercd = E_OK; unlock_cpu(); error_exit: LOG_REF_PDQ_LEAVE(ercd, pk_rpdq); return(ercd); }
ER ref_dtq(ID dtqid, T_RDTQ *pk_rdtq) { DTQCB *p_dtqcb; ER ercd; LOG_REF_DTQ_ENTER(dtqid, pk_rdtq); CHECK_TSKCTX_UNL(); CHECK_DTQID(dtqid); p_dtqcb = get_dtqcb(dtqid); t_lock_cpu(); pk_rdtq->stskid = wait_tskid(&(p_dtqcb->swait_queue)); pk_rdtq->rtskid = wait_tskid(&(p_dtqcb->rwait_queue)); pk_rdtq->sdtqcnt = p_dtqcb->count; ercd = E_OK; t_unlock_cpu(); error_exit: LOG_REF_DTQ_LEAVE(ercd, pk_rdtq); return(ercd); }
/* * Refer rendezvous port */ SYSCALL ER _td_ref_por( 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 = wait_tskid(&porcb->call_queue); pk_rpor->atsk = wait_tskid(&porcb->accept_queue); pk_rpor->maxcmsz = porcb->maxcmsz; pk_rpor->maxrmsz = porcb->maxrmsz; } END_DISABLE_INTERRUPT; return ercd; }
/* * Refer rendezvous port */ SYSCALL ER _tk_ref_por( ID porid, T_RPOR *pk_rpor ) { PORCB *porcb; ER ercd = E_OK; CHECK_PORID(porid); porcb = get_porcb(porid); BEGIN_CRITICAL_SECTION; if ( porcb->porid == 0 ) { ercd = E_NOEXS; } else { pk_rpor->exinf = porcb->exinf; pk_rpor->wtsk = wait_tskid(&porcb->call_queue); pk_rpor->atsk = wait_tskid(&porcb->accept_queue); pk_rpor->maxcmsz = porcb->maxcmsz; pk_rpor->maxrmsz = porcb->maxrmsz; } END_CRITICAL_SECTION; return ercd; }
ER ref_mbf(ID mbfid, T_RMBF *pk_rmbf) { MBFCB *p_mbfcb; ER ercd; LOG_REF_MBF_ENTER(mbfid, pk_rmbf); CHECK_TSKCTX_UNL(); CHECK_MBFID(mbfid); p_mbfcb = get_mbfcb(mbfid); t_lock_cpu(); pk_rmbf->stskid = wait_tskid(&(p_mbfcb->swait_queue)); pk_rmbf->rtskid = wait_tskid(&(p_mbfcb->rwait_queue)); pk_rmbf->smbfcnt = p_mbfcb->smbfcnt; pk_rmbf->fmbfsz = p_mbfcb->fmbfsz; ercd = E_OK; t_unlock_cpu(); error_exit: LOG_REF_MBF_LEAVE(ercd, pk_rmbf); return(ercd); }
/* * Refer mailbox state */ SYSCALL ER _td_ref_mbx( ID mbxid, TD_RMBX *pk_rmbx ) { MBXCB *mbxcb; ER ercd = E_OK; CHECK_MBXID(mbxid); mbxcb = get_mbxcb(mbxid); BEGIN_DISABLE_INTERRUPT; if ( mbxcb->mbxid == 0 ) { ercd = E_NOEXS; } else { pk_rmbx->exinf = mbxcb->exinf; pk_rmbx->wtsk = wait_tskid(&mbxcb->wait_queue); pk_rmbx->pk_msg = headmsg(mbxcb); } END_DISABLE_INTERRUPT; return ercd; }
ER ref_mpf(ID mpfid, T_RMPF *pk_rmpf) { MPFCB *p_mpfcb; ER ercd; LOG_REF_MPF_ENTER(mpfid, pk_rmpf); CHECK_TSKCTX_UNL(); CHECK_MPFID(mpfid); p_mpfcb = get_mpfcb(mpfid); t_lock_cpu(); pk_rmpf->wtskid = wait_tskid(&(p_mpfcb->wait_queue)); pk_rmpf->fblkcnt = p_mpfcb->fblkcnt; ercd = E_OK; t_unlock_cpu(); error_exit: LOG_REF_MPF_LEAVE(ercd, pk_rmpf); return(ercd); }
ER ref_mbx(ID mbxid, T_RMBX *pk_rmbx) { MBXCB *p_mbxcb; ER ercd; LOG_REF_MBX_ENTER(mbxid, pk_rmbx); CHECK_TSKCTX_UNL(); CHECK_MBXID(mbxid); p_mbxcb = get_mbxcb(mbxid); t_lock_cpu(); pk_rmbx->wtskid = wait_tskid(&(p_mbxcb->wait_queue)); pk_rmbx->pk_msg = p_mbxcb->pk_head; ercd = E_OK; t_unlock_cpu(); error_exit: LOG_REF_MBX_LEAVE(ercd, pk_rmbx); return(ercd); }
/* * Refer mailbox state */ SYSCALL ER _tk_ref_mbx( ID mbxid, T_RMBX *pk_rmbx ) { MBXCB *mbxcb; ER ercd = E_OK; CHECK_MBXID(mbxid); mbxcb = get_mbxcb(mbxid); BEGIN_CRITICAL_SECTION; if ( mbxcb->mbxid == 0 ) { ercd = E_NOEXS; } else { pk_rmbx->exinf = mbxcb->exinf; pk_rmbx->wtsk = wait_tskid(&mbxcb->wait_queue); pk_rmbx->pk_msg = headmsg(mbxcb); } END_CRITICAL_SECTION; return ercd; }
ER ref_mtx(ID mtxid, T_RMTX *pk_rmtx) { MTXCB *p_mtxcb; ER ercd; LOG_REF_MTX_ENTER(mtxid, pk_rmtx); CHECK_TSKCTX_UNL(); CHECK_MTXID(mtxid); p_mtxcb = get_mtxcb(mtxid); t_lock_cpu(); pk_rmtx->htskid = (p_mtxcb->p_loctsk != NULL) ? TSKID(p_mtxcb->p_loctsk) : TSK_NONE; pk_rmtx->wtskid = wait_tskid(&(p_mtxcb->wait_queue)); ercd = E_OK; t_unlock_cpu(); error_exit: LOG_REF_MTX_LEAVE(ercd, pk_rmtx); return(ercd); }
/* * Refer mutex state */ SYSCALL ER _tk_ref_mtx( ID mtxid, T_RMTX *pk_rmtx ) { MTXCB *mtxcb; ER ercd = E_OK; CHECK_MTXID(mtxid); mtxcb = get_mtxcb(mtxid); BEGIN_CRITICAL_SECTION; 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 = wait_tskid(&mtxcb->wait_queue); } END_CRITICAL_SECTION; return ercd; }
/* * Refer mutex state */ SYSCALL ER _td_ref_mtx( 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 = wait_tskid(&mtxcb->wait_queue); } END_DISABLE_INTERRUPT; return ercd; }
ER ref_flg(ID flgid, T_RFLG *pk_rflg) { FLGCB *p_flgcb; ER ercd; LOG_REF_FLG_ENTER(flgid, pk_rflg); CHECK_TSKCTX_UNL(); CHECK_FLGID(flgid); p_flgcb = get_flgcb(flgid); t_lock_cpu(); t_acquire_obj_lock(&GET_OBJLOCK(p_flgcb)); pk_rflg->wtskid = wait_tskid(&(p_flgcb->wait_queue)); pk_rflg->flgptn = p_flgcb->flgptn; ercd = E_OK; release_obj_lock(&GET_OBJLOCK(p_flgcb)); t_unlock_cpu(); error_exit: LOG_REF_FLG_LEAVE(ercd, pk_rflg); return(ercd); }