void call_almhdr(ALMCB *p_almcb) { PRI saved_ipm; /* * アラームハンドラを停止状態にする. */ p_almcb->almsta = false; /* * アラームハンドラを,CPUロック解除状態で呼び出す. */ saved_ipm = i_get_ipm(); i_unlock_cpu(); LOG_ALM_ENTER(p_almcb); (*((ALMHDR)(p_almcb->p_alminib->almhdr)))(p_almcb->p_alminib->exinf); LOG_ALM_LEAVE(p_almcb); if (!i_sense_lock()) { i_lock_cpu(); } i_set_ipm(saved_ipm); }
void call_almhdr(uint_t almidx) { /* アラームハンドラを停止状態にする */ almcb_almact &= ~ALMACT_BIT(almidx); i_unlock_cpu(); /* アラームハンドラの実行 */ LOG_ALM_ENTER(almidx); (*alminib_almhdr[almidx])(alminib_exinf[almidx]); LOG_ALM_LEAVE(almidx); if (!i_sense_lock()) { i_lock_cpu(); } }
void call_alarm(ALMCB *p_almcb) { /* * アラーム通知を停止状態にする. */ p_almcb->almsta = false; /* * 通知ハンドラを,CPUロック解除状態で呼び出す. */ unlock_cpu(); LOG_ALM_ENTER(p_almcb); (*(p_almcb->p_alminib->nfyhdr))(p_almcb->p_alminib->exinf); LOG_ALM_LEAVE(p_almcb); if (!sense_lock()) { lock_cpu(); } }