3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2005-2009 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
11 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
13 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
25 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
30 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
31 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
40 * @(#) $Id: interrupt.c 1646 2009-10-01 05:19:30Z ertl-hiro $
47 #include "kernel_impl.h"
50 #include "interrupt.h"
55 #ifndef LOG_DIS_INT_ENTER
56 #define LOG_DIS_INT_ENTER(intno)
57 #endif /* LOG_DIS_INT_ENTER */
59 #ifndef LOG_DIS_INT_LEAVE
60 #define LOG_DIS_INT_LEAVE(ercd)
61 #endif /* LOG_DIS_INT_LEAVE */
63 #ifndef LOG_ENA_INT_ENTER
64 #define LOG_ENA_INT_ENTER(intno)
65 #endif /* LOG_ENA_INT_ENTER */
67 #ifndef LOG_ENA_INT_LEAVE
68 #define LOG_ENA_INT_LEAVE(ercd)
69 #endif /* LOG_ENA_INT_LEAVE */
71 #ifndef LOG_CHG_IPM_ENTER
72 #define LOG_CHG_IPM_ENTER(intpri)
73 #endif /* LOG_CHG_IPM_ENTER */
75 #ifndef LOG_CHG_IPM_LEAVE
76 #define LOG_CHG_IPM_LEAVE(ercd)
77 #endif /* LOG_CHG_IPM_LEAVE */
79 #ifndef LOG_GET_IPM_ENTER
80 #define LOG_GET_IPM_ENTER(p_intpri)
81 #endif /* LOG_GET_IPM_ENTER */
83 #ifndef LOG_GET_IPM_LEAVE
84 #define LOG_GET_IPM_LEAVE(ercd, intpri)
85 #endif /* LOG_GET_IPM_LEAVE */
91 #ifndef OMIT_INITIALIZE_INTERRUPT
94 initialize_interrupt(void)
97 const INHINIB *p_inhinib;
98 const INTINIB *p_intinib;
100 for (p_inhinib = inhinib_table, i = 0; i < tnum_inhno; p_inhinib++, i++) {
101 x_define_inh(p_inhinib->inhno, p_inhinib->int_entry);
103 for (p_intinib = intinib_table, i = 0; i < tnum_intno; p_intinib++, i++) {
104 x_config_int(p_intinib->intno, p_intinib->intatr, p_intinib->intpri);
108 #endif /* OMIT_INITIALIZE_INTERRUPT */
109 #endif /* TOPPERS_intini */
114 #ifdef TOPPERS_dis_int
115 #ifdef TOPPERS_SUPPORT_DIS_INT
123 LOG_DIS_INT_ENTER(intno);
125 CHECK_INTNO_DISINT(intno);
127 locked = t_sense_lock();
131 if (t_disable_int(intno)) {
142 LOG_DIS_INT_LEAVE(ercd);
146 #endif /* TOPPERS_SUPPORT_DIS_INT */
147 #endif /* TOPPERS_dis_int */
152 #ifdef TOPPERS_ena_int
153 #ifdef TOPPERS_SUPPORT_ENA_INT
161 LOG_ENA_INT_ENTER(intno);
163 CHECK_INTNO_DISINT(intno);
165 locked = t_sense_lock();
169 if (t_enable_int(intno)) {
180 LOG_ENA_INT_LEAVE(ercd);
184 #endif /* TOPPERS_SUPPORT_ENA_INT */
185 #endif /* TOPPERS_ena_int */
190 #ifdef TOPPERS_chg_ipm
197 LOG_CHG_IPM_ENTER(intpri);
199 CHECK_INTPRI_CHGIPM(intpri);
203 if (intpri != TIPM_ENAALL) {
208 if (p_runtsk != p_schedtsk) {
216 LOG_CHG_IPM_LEAVE(ercd);
220 #endif /* TOPPERS_chg_ipm */
225 #ifdef TOPPERS_get_ipm
228 get_ipm(PRI *p_intpri)
232 LOG_GET_IPM_ENTER(p_intpri);
236 *p_intpri = t_get_ipm();
241 LOG_GET_IPM_LEAVE(ercd, *p_intpri);
245 #endif /* TOPPERS_get_ipm */