ER ini_mbf(ID mbfid) { MBFCB *p_mbfcb; bool_t dspreq; ER ercd; LOG_INI_MBF_ENTER(mbfid); CHECK_TSKCTX_UNL(); CHECK_MBFID(mbfid); p_mbfcb = get_mbfcb(mbfid); t_lock_cpu(); dspreq = init_wait_queue(&(p_mbfcb->swait_queue)); if (init_wait_queue(&(p_mbfcb->rwait_queue))) { dspreq = true; } p_mbfcb->fmbfsz = p_mbfcb->p_mbfinib->mbfsz; p_mbfcb->head = 0U; p_mbfcb->tail = 0U; p_mbfcb->smbfcnt = 0U; if (dspreq) { dispatch(); } ercd = E_OK; t_unlock_cpu(); error_exit: LOG_INI_MBF_LEAVE(ercd); return(ercd); }
ER ini_dtq(ID dtqid) { DTQCB *p_dtqcb; bool_t dspreq; ER ercd; LOG_INI_DTQ_ENTER(dtqid); CHECK_TSKCTX_UNL(); CHECK_DTQID(dtqid); p_dtqcb = get_dtqcb(dtqid); t_lock_cpu(); dspreq = init_wait_queue(&(p_dtqcb->swait_queue)); if (init_wait_queue(&(p_dtqcb->rwait_queue))) { dspreq = true; }; p_dtqcb->count = 0U; p_dtqcb->head = 0U; p_dtqcb->tail = 0U; if (dspreq) { dispatch(); } ercd = E_OK; t_unlock_cpu(); error_exit: LOG_INI_DTQ_LEAVE(ercd); return(ercd); }
ER ini_pdq(ID pdqid) { PDQCB *p_pdqcb; ER ercd; LOG_INI_PDQ_ENTER(pdqid); CHECK_TSKCTX_UNL(); CHECK_ID(VALID_PDQID(pdqid)); p_pdqcb = get_pdqcb(pdqid); lock_cpu(); init_wait_queue(&(p_pdqcb->swait_queue)); init_wait_queue(&(p_pdqcb->rwait_queue)); p_pdqcb->count = 0U; p_pdqcb->p_head = NULL; p_pdqcb->unused = 0U; p_pdqcb->p_freelist = NULL; if (p_runtsk != p_schedtsk) { dispatch(); } ercd = E_OK; unlock_cpu(); error_exit: LOG_INI_PDQ_LEAVE(ercd); return(ercd); }
ER ini_flg(ID flgid) { FLGCB *p_flgcb; ER ercd; bool_t dspreq; LOG_INI_FLG_ENTER(flgid); CHECK_TSKCTX_UNL(); CHECK_FLGID(flgid); p_flgcb = get_flgcb(flgid); t_lock_cpu(); t_acquire_obj_lock(&GET_OBJLOCK(p_flgcb)); dspreq = init_wait_queue(&(p_flgcb->wait_queue)); p_flgcb->flgptn = p_flgcb->p_flginib->iflgptn; ercd = E_OK; release_obj_lock(&GET_OBJLOCK(p_flgcb)); if (dspreq) { dispatch(); } t_unlock_cpu(); error_exit: LOG_INI_FLG_LEAVE(ercd); return(ercd); }
ER ini_sem(ID semid) { SEMCB *p_semcb; ER ercd; LOG_INI_SEM_ENTER(semid); 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 { init_wait_queue(&(p_semcb->wait_queue)); p_semcb->semcnt = p_semcb->p_seminib->isemcnt; if (p_runtsk != p_schedtsk) { dispatch(); } ercd = E_OK; } unlock_cpu(); error_exit: LOG_INI_SEM_LEAVE(ercd); return(ercd); }
ER del_sem(ID semid) { SEMCB *p_semcb; SEMINIB *p_seminib; ER ercd; LOG_DEL_SEM_ENTER(semid); 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 if (semid <= tmax_ssemid) { ercd = E_OBJ; } else { init_wait_queue(&(p_semcb->wait_queue)); p_seminib = (SEMINIB *)(p_semcb->p_seminib); p_seminib->sematr = TA_NOEXS; queue_insert_prev(&free_semcb, &(p_semcb->wait_queue)); if (p_runtsk != p_schedtsk) { dispatch(); } ercd = E_OK; } unlock_cpu(); error_exit: LOG_DEL_SEM_LEAVE(ercd); return(ercd); }
ER ini_mpf(ID mpfid) { MPFCB *p_mpfcb; ER ercd; LOG_INI_MPF_ENTER(mpfid); 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 { init_wait_queue(&(p_mpfcb->wait_queue)); p_mpfcb->fblkcnt = p_mpfcb->p_mpfinib->blkcnt; p_mpfcb->unused = 0U; p_mpfcb->freelist = INDEX_NULL; if (p_runtsk != p_schedtsk) { dispatch(); } ercd = E_OK; } unlock_cpu(); error_exit: LOG_INI_MPF_LEAVE(ercd); return(ercd); }
ER ini_mbx(ID mbxid) { MBXCB *p_mbxcb; bool_t dspreq; ER ercd; LOG_INI_MBX_ENTER(mbxid); CHECK_TSKCTX_UNL(); CHECK_MBXID(mbxid); p_mbxcb = get_mbxcb(mbxid); t_lock_cpu(); dspreq = init_wait_queue(&(p_mbxcb->wait_queue)); p_mbxcb->pk_head = NULL; if (dspreq) { dispatch(); } ercd = E_OK; t_unlock_cpu(); error_exit: LOG_INI_MBX_LEAVE(ercd); return(ercd); }
ER ini_sem(ID semid) { SEMCB *p_semcb; bool_t dspreq; ER ercd; LOG_INI_SEM_ENTER(semid); CHECK_TSKCTX_UNL(); CHECK_SEMID(semid); 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.acptn3)) { ercd = E_OACV; } else { dspreq = init_wait_queue(&(p_semcb->wait_queue)); p_semcb->semcnt = p_semcb->p_seminib->isemcnt; if (dspreq) { dispatch(); } ercd = E_OK; } t_unlock_cpu(); error_exit: LOG_INI_SEM_LEAVE(ercd); return(ercd); }
ER ini_mpf(ID mpfid) { MPFCB *p_mpfcb; bool_t dspreq; ER ercd; LOG_INI_MPF_ENTER(mpfid); CHECK_TSKCTX_UNL(); CHECK_MPFID(mpfid); p_mpfcb = get_mpfcb(mpfid); t_lock_cpu(); dspreq = init_wait_queue(&(p_mpfcb->wait_queue)); p_mpfcb->fblkcnt = p_mpfcb->p_mpfinib->blkcnt; p_mpfcb->unused = 0U; p_mpfcb->freelist = INDEX_NULL; if (dspreq) { dispatch(); } ercd = E_OK; t_unlock_cpu(); error_exit: LOG_INI_MPF_LEAVE(ercd); return(ercd); }
ER ini_mtx(ID mtxid) { MTXCB *p_mtxcb; TCB *p_loctsk; bool_t dspreq; ER ercd; LOG_INI_MTX_ENTER(mtxid); CHECK_TSKCTX_UNL(); CHECK_MTXID(mtxid); p_mtxcb = get_mtxcb(mtxid); t_lock_cpu(); dspreq = init_wait_queue(&(p_mtxcb->wait_queue)); p_loctsk = p_mtxcb->p_loctsk; if (p_loctsk != NULL) { queue_delete(&(p_mtxcb->mutex_queue)); p_mtxcb->p_loctsk = NULL; if (MTX_CEILING(p_mtxcb)) { if (mutex_drop_priority(p_loctsk, p_mtxcb->p_mtxinib->ceilpri)) { dspreq = true; } } } if (dspreq) { dispatch(); } ercd = E_OK; t_unlock_cpu(); error_exit: LOG_INI_MTX_LEAVE(ercd); return(ercd); }
ER ini_flg(ID flgid) { FLGCB *p_flgcb; bool_t dspreq; ER ercd; LOG_INI_FLG_ENTER(flgid); 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 { dspreq = init_wait_queue(&(p_flgcb->wait_queue)); p_flgcb->flgptn = p_flgcb->p_flginib->iflgptn; if (dspreq) { dispatch(); } ercd = E_OK; } t_unlock_cpu(); error_exit: LOG_INI_FLG_LEAVE(ercd); return(ercd); }
ER del_mbf(ID mbfid) { MBFCB *p_mbfcb; MBFINIB *p_mbfinib; const DOMINIB *p_dominib; ER ercd; LOG_DEL_MBF_ENTER(mbfid); CHECK_TSKCTX_UNL(); CHECK_ID(VALID_MBFID(mbfid)); 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.acptn3)) { ercd = E_OACV; } else if (MBFID(p_mbfcb) <= tmax_smbfid) { ercd = E_OBJ; } else { init_wait_queue(&(p_mbfcb->swait_queue)); init_wait_queue(&(p_mbfcb->rwait_queue)); p_mbfinib = (MBFINIB *)(p_mbfcb->p_mbfinib); p_dominib = get_atrdominib(p_mbfinib->mbfatr); if ((p_mbfinib->mbfatr & TA_MBALLOC) != 0U) { free_mpk(p_mbfinib->mbfmb, p_dominib); } p_mbfinib->mbfatr = TA_NOEXS; queue_insert_prev(&(p_dominib->p_domcb->free_mbfcb), &(p_mbfcb->swait_queue)); if (p_runtsk != p_schedtsk) { dispatch(); } ercd = E_OK; } unlock_cpu(); error_exit: LOG_DEL_MBF_LEAVE(ercd); return(ercd); }
ER del_pdq(ID pdqid) { PDQCB *p_pdqcb; PDQINIB *p_pdqinib; bool_t dspreq; ER ercd; LOG_DEL_PDQ_ENTER(pdqid); 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 if (VIOLATE_ACPTN(p_pdqcb->p_pdqinib->acvct.acptn3)) { ercd = E_OACV; } else if (PDQID(p_pdqcb) > tmax_spdqid) { dspreq = init_wait_queue(&(p_pdqcb->swait_queue)); if (init_wait_queue(&(p_pdqcb->rwait_queue))) { dspreq = true; } p_pdqinib = (PDQINIB *)(p_pdqcb->p_pdqinib); if ((p_pdqinib->pdqatr & TA_MBALLOC) != 0U) { kernel_free(p_pdqinib->p_pdqmb); } p_pdqinib->pdqatr = TA_NOEXS; queue_insert_prev(&free_pdqcb, &(p_pdqcb->swait_queue)); if (dspreq) { dispatch(); } ercd = E_OK; } else { ercd = E_OBJ; } t_unlock_cpu(); error_exit: LOG_DEL_PDQ_LEAVE(ercd); return(ercd); }
ER del_dtq(ID dtqid) { DTQCB *p_dtqcb; DTQINIB *p_dtqinib; bool_t dspreq; ER ercd; LOG_DEL_DTQ_ENTER(dtqid); CHECK_TSKCTX_UNL(); CHECK_DTQID(dtqid); p_dtqcb = get_dtqcb(dtqid); t_lock_cpu(); if (p_dtqcb->p_dtqinib->dtqatr == TA_NOEXS) { ercd = E_NOEXS; } else if (DTQID(p_dtqcb) > tmax_sdtqid) { dspreq = init_wait_queue(&(p_dtqcb->swait_queue)); if (init_wait_queue(&(p_dtqcb->rwait_queue))) { dspreq = true; } p_dtqinib = (DTQINIB *)(p_dtqcb->p_dtqinib); if ((p_dtqinib->dtqatr & TA_MBALLOC) != 0U) { kernel_free(p_dtqinib->p_dtqmb); } p_dtqinib->dtqatr = TA_NOEXS; queue_insert_prev(&free_dtqcb, &(p_dtqcb->swait_queue)); if (dspreq) { dispatch(); } ercd = E_OK; } else { ercd = E_OBJ; } t_unlock_cpu(); error_exit: LOG_DEL_DTQ_LEAVE(ercd); return(ercd); }
ER ini_pdq(ID pdqid) { PDQCB *p_pdqcb; bool_t dspreq; ER ercd; LOG_INI_PDQ_ENTER(pdqid); 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 if (VIOLATE_ACPTN(p_pdqcb->p_pdqinib->acvct.acptn3)) { ercd = E_OACV; } else { dspreq = init_wait_queue(&(p_pdqcb->swait_queue)); if (init_wait_queue(&(p_pdqcb->rwait_queue))) { dspreq = true; } p_pdqcb->count = 0U; p_pdqcb->p_head = NULL; p_pdqcb->unused = 0U; p_pdqcb->p_freelist = NULL; if (dspreq) { dispatch(); } ercd = E_OK; } t_unlock_cpu(); error_exit: LOG_INI_PDQ_LEAVE(ercd); return(ercd); }
ER ini_mbf(ID mbfid) { MBFCB *p_mbfcb; ER ercd; LOG_INI_MBF_ENTER(mbfid); CHECK_TSKCTX_UNL(); CHECK_ID(VALID_MBFID(mbfid)); 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.acptn3)) { ercd = E_OACV; } else { init_wait_queue(&(p_mbfcb->swait_queue)); init_wait_queue(&(p_mbfcb->rwait_queue)); p_mbfcb->fmbfsz = p_mbfcb->p_mbfinib->mbfsz; p_mbfcb->head = 0U; p_mbfcb->tail = 0U; p_mbfcb->smbfcnt = 0U; if (p_runtsk != p_schedtsk) { dispatch(); } ercd = E_OK; } unlock_cpu(); error_exit: LOG_INI_MBF_LEAVE(ercd); return(ercd); }
ER ini_mtx(ID mtxid) { MTXCB *p_mtxcb, **pp_prevmtx; TCB *p_loctsk; ER ercd; LOG_INI_MTX_ENTER(mtxid); CHECK_TSKCTX_UNL(); CHECK_ID(VALID_MTXID(mtxid)); 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.acptn3)) { ercd = E_OACV; } else { init_wait_queue(&(p_mtxcb->wait_queue)); p_loctsk = p_mtxcb->p_loctsk; if (p_loctsk != NULL) { p_mtxcb->p_loctsk = NULL; pp_prevmtx = &(p_loctsk->p_lastmtx); while (*pp_prevmtx != NULL) { if (*pp_prevmtx == p_mtxcb) { *pp_prevmtx = p_mtxcb->p_prevmtx; break; } pp_prevmtx = &((*pp_prevmtx)->p_prevmtx); } mutex_drop_priority(p_loctsk, p_mtxcb); } if (p_runtsk != p_schedtsk) { dispatch(); } ercd = E_OK; } unlock_cpu(); error_exit: LOG_INI_MTX_LEAVE(ercd); return(ercd); }
ER del_mpf(ID mpfid) { MPFCB *p_mpfcb; MPFINIB *p_mpfinib; ER ercd; LOG_DEL_MPF_ENTER(mpfid); 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 if (mpfid <= tmax_smpfid) { ercd = E_OBJ; } else { init_wait_queue(&(p_mpfcb->wait_queue)); p_mpfinib = (MPFINIB *)(p_mpfcb->p_mpfinib); if ((p_mpfinib->mpfatr & TA_MEMALLOC) != 0U) { kernel_free(p_mpfinib->mpf); } if ((p_mpfinib->mpfatr & TA_MBALLOC) != 0U) { kernel_free(p_mpfinib->p_mpfmb); } p_mpfinib->mpfatr = TA_NOEXS; queue_insert_prev(&free_mpfcb, &(p_mpfcb->wait_queue)); if (p_runtsk != p_schedtsk) { dispatch(); } ercd = E_OK; } unlock_cpu(); error_exit: LOG_DEL_MPF_LEAVE(ercd); return(ercd); }
ER del_mtx(ID mtxid) { MTXCB *p_mtxcb; MTXINIB *p_mtxinib; const DOMINIB *p_dominib; ER ercd; LOG_DEL_MTX_ENTER(mtxid); CHECK_TSKCTX_UNL(); CHECK_ID(VALID_MTXID(mtxid)); 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.acptn3)) { ercd = E_OACV; } else if (MTXID(p_mtxcb) <= tmax_smtxid) { ercd = E_OBJ; } else { init_wait_queue(&(p_mtxcb->wait_queue)); p_mtxinib = (MTXINIB *)(p_mtxcb->p_mtxinib); p_dominib = get_atrdominib(p_mtxinib->mtxatr); p_mtxinib->mtxatr = TA_NOEXS; queue_insert_prev(&(p_dominib->p_domcb->free_mtxcb), &(p_mtxcb->wait_queue)); if (p_runtsk != p_schedtsk) { dispatch(); } ercd = E_OK; } unlock_cpu(); error_exit: LOG_DEL_MTX_LEAVE(ercd); return(ercd); }
ER del_flg(ID flgid) { FLGCB *p_flgcb; FLGINIB *p_flginib; bool_t dspreq; ER ercd; LOG_DEL_FLG_ENTER(flgid); 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 if (VIOLATE_ACPTN(p_flgcb->p_flginib->acvct.acptn3)) { ercd = E_OACV; } else if (FLGID(p_flgcb) > tmax_sflgid) { dspreq = init_wait_queue(&(p_flgcb->wait_queue)); p_flginib = (FLGINIB *)(p_flgcb->p_flginib); p_flginib->flgatr = TA_NOEXS; queue_insert_prev(&free_flgcb, &(p_flgcb->wait_queue)); if (dspreq) { dispatch(); } ercd = E_OK; } else { ercd = E_OBJ; } t_unlock_cpu(); error_exit: LOG_DEL_FLG_LEAVE(ercd); return(ercd); }
ER del_sem(ID semid) { SEMCB *p_semcb; SEMINIB *p_seminib; bool_t dspreq; ER ercd; LOG_DEL_SEM_ENTER(semid); CHECK_TSKCTX_UNL(); CHECK_SEMID(semid); 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.acptn3)) { ercd = E_OACV; } else if (SEMID(p_semcb) > tmax_ssemid) { dspreq = init_wait_queue(&(p_semcb->wait_queue)); p_seminib = (SEMINIB *)(p_semcb->p_seminib); p_seminib->sematr = TA_NOEXS; queue_insert_prev(&free_semcb, &(p_semcb->wait_queue)); if (dspreq) { dispatch(); } ercd = E_OK; } else { ercd = E_OBJ; } t_unlock_cpu(); error_exit: LOG_DEL_SEM_LEAVE(ercd); return(ercd); }