source: mypx/arch/m68k_gcc/prc_config.h @ 7

このファイルの 7 以降における最終更新内容7 で kominami が 2015/09/12 9:22:12 に更新しました

TOPPERS/ASP 1.9.1

ファイルサイズ: 17.1 KB
Rev 
[7]1/*
2 *  TOPPERS/ASP Kernel
3 *      Toyohashi Open Platform for Embedded Real-Time Systems/
4 *      Advanced Standard Profile Kernel
5 *
6 *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 *                              Toyohashi Univ. of Technology, JAPAN
8 *  Copyright (C) 2005-2010 by Embedded and Real-Time Systems Laboratory
9 *              Graduate School of Information Science, Nagoya Univ., JAPAN
10 *
11 *  Ÿåµ­Ãøºîž¢ŒÔ€Ï¡€°Ê²Œ€Î(1)¡Á(4)€ÎŸò·ï€òËþ€¿€¹Ÿì¹ç€ËžÂ€ê¡€ËÜ¥œ¥Õ¥È¥Š¥§
12 *  ¥¢¡ÊËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò²þÊÑ€·€¿€â€Î€òŽÞ€à¡¥°Ê²ŒÆ±€ž¡Ë€ò»ÈÍÑ¡ŠÊ£Àœ¡Š²þ
13 *  ÊÑ¡ŠºÆÇÛÉۡʰʲŒ¡€ÍøÍрȞƀ֡ˀ¹€ë€³€È€ò̵œþ€ÇµöÂú€¹€ë¡¥
14 *  (1) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¥œ¡Œ¥¹¥³¡Œ¥É€Î·Á€ÇÍøÍÑ€¹€ëŸì¹ç€Ë€Ï¡€Ÿåµ­€ÎÃøºî
15 *      ž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äꀬ¡€€œ€Î€Þ€Þ€Î·Á€Ç¥œ¡Œ
16 *      ¥¹¥³¡Œ¥ÉÃæ€ËŽÞ€Þ€ì€Æ€€€ë€³€È¡¥
17 *  (2) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€¥é¥€¥Ö¥é¥ê·ÁŒ°€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
18 *      Íрǀ­€ë·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍÑ
19 *      ŒÔ¥Þ¥Ë¥å¥¢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃøºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­
20 *      €Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
21 *  (3) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€µ¡Žï€ËÁȀ߹þ€à€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
22 *      Íрǀ­€Ê€€·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€Œ¡€Î€€€º€ì€«€ÎŸò·ï€òËþ€¿€¹€³
23 *      €È¡¥
24 *    (a) ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍьԥޥ˥奢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃø
25 *        ºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
26 *    (b) ºÆÇÛÉۀηÁÂÖ€ò¡€ÊÌ€ËÄê€á€ëÊýË¡€Ë€è€Ã€Æ¡€TOPPERS¥×¥í¥ž¥§¥¯¥È€Ë
27 *        Êó¹ð€¹€ë€³€È¡¥
28 *  (4) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€ë€€€«€Ê€ë»
29 *      ³²€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€òÌÈÀÕ€¹€ë€³€È¡¥
30 *      €Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Î¥æ¡Œ¥¶€Þ€¿€Ï¥š¥ó¥É¥æ¡Œ¥¶€«€é€Î€€€«€Ê€ëÍý
31 *      ͳ€ËŽð€Å€¯ÀÁµá€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€ò
32 *      ÌÈÀÕ€¹€ë€³€È¡¥
33 *
34 *  ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Ï¡€ÌµÊÝŸÚ€ÇÄó¶¡€µ€ì€Æ€€€ë€â€Î€Ç€¢€ë¡¥Ÿåµ­Ãøºîž¢ŒÔ€ª
35 *  €è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€Ï¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ËŽØ€·€Æ¡€ÆÃÄê€Î»ÈÍÑÌÜŪ
36 *  €ËÂЀ¹€ëŬ¹çÀ­€âŽÞ€á€Æ¡€€€€«€Ê€ëÊÝŸÚ€â¹Ô€ï€Ê€€¡¥€Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§
37 *  ¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€¿€€€«€Ê€ë»³²€ËŽØ€·€Æ€â¡€€œ
38 *  €ÎÀÕÇ€€òÉé€ï€Ê€€¡¥
39 *
40 *  $Id$
41 */
42
43/*
44 *              ¥×¥í¥»¥Ã¥µ°Íž¥â¥ž¥å¡Œ¥ë¡ÊM68040ÍÑ¡Ë
45 *
46 *  €³€Î¥€¥ó¥¯¥ë¡Œ¥É¥Õ¥¡¥€¥ë€Ï¡€target_config.h¡Ê€Þ€¿€Ï¡€€œ€³€«€é¥€¥ó¥¯
47 *  ¥ë¡Œ¥É€µ€ì€ë¥Õ¥¡¥€¥ë¡Ë€Î€ß€«€é¥€¥ó¥¯¥ë¡Œ¥É€µ€ì€ë¡¥ÂŸ€Î¥Õ¥¡¥€¥ë€«€é
48 *  ÄŸÀÜ¥€¥ó¥¯¥ë¡Œ¥É€·€Æ€Ï€Ê€é€Ê€€¡¥
49 */
50
51#ifndef TOPPERS_PRC_CONFIG_H
52#define TOPPERS_PRC_CONFIG_H
53
54#ifndef TOPPERS_MACRO_ONLY
55
56/*
57 *  ¥×¥í¥»¥Ã¥µ€ÎÆÃŒìÌ¿Îá€Î¥€¥ó¥é¥€¥óŽØ¿ôÄêµÁ
58 */
59#include "prc_insn.h"
60
61/*
62 *  ¥¿¥¹¥¯¥³¥ó¥Æ¥­¥¹¥È¥Ö¥í¥Ã¥¯€ÎÄêµÁ
63 */
64typedef struct task_context_block {
65        void    *msp;           /* ¥¹¥¿¥Ã¥¯¥Ý¥€¥ó¥¿ */
66        FP              pc;                     /* ¥×¥í¥°¥é¥à¥«¥Š¥ó¥¿ */
67} TSKCTXB;
68
69#endif /* TOPPERS_MACRO_ONLY */
70
71/*
72 *  ³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯Áàºî¥é¥€¥Ö¥é¥ê
73 *
74 *  M68040€Ç€Ï¡€¥¹¥Æ¡Œ¥¿¥¹¥ì¥ž¥¹¥¿¡ÊSR¡Ë€Î²Œ€«€é8¡Á10¥Ó¥Ã¥È€á€Î3¥Ó¥Ã¥È
75 *  €Ë³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯¡Ê¥Ï¡Œ¥É¥Š¥§¥¢€Î³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯¡€IPM¡Ë€¬ÃÖ€«
76 *  €ì€Æ€€€ë¡¥IPM€òÊÝž€·€Æ€ª€¯€¿€á€Ë¡€³ä¹þ€ßÍ¥ÀèÅـγ°ÉôÉœžœ¡Ê-1€«€éÏ¢
77 *  ³€·€¿Éé€ÎÃ͡ˀò»È€Š€³€È€â²ÄÇœ€Ç€¢€ë€¬¡€ÍŸ·×€Êºž±Š¥Ó¥Ã¥È¥·¥Õ¥È€ÈÉä
78 *  ¹æÈ¿ÅŸ€¬É¬Í׀ˀʀ롥€³€ì€òÈò€±€ë€¿€á€Ë¡€IPM€òÊÝž€¹€ëŸì¹ç€Ë€Ï¡€SR€Î
79 *  8¡Á10¥Ó¥Ã¥È€á€òŒè€êœÐ€·€¿ÃÍ€ò»È€Š€³€È€Ë€¹€ë¡¥€³€ÎÃÍ€ò³ä¹þ€ßÍ¥ÀèÅÙ¥Þ
80 *  ¥¹¥¯€ÎÆâÉôÉœžœ€ÈžÆ€Ó¡€IIPM€Èœñ€¯€³€È€Ë€¹€ë¡¥
81 */
82
83/*
84 *  ³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯€Î³°ÉôÉœžœ€ÈÆâÉôÉœžœ€ÎÊÑŽ¹
85 */
86#define EXT_IPM(iipm)   (-CAST(PRI, (iipm) >> 8))               /* ³°ÉôÉœžœ€ËÊÑŽ¹ */
87#define INT_IPM(ipm)    (CAST(uint16_t, -(ipm)) << 8)   /* ÆâÉôÉœžœ€ËÊÑŽ¹ */
88
89#ifndef TOPPERS_MACRO_ONLY
90
91/*
92 *  IPM¡Ê¥Ï¡Œ¥É¥Š¥§¥¢€Î³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯¡€ÆâÉôÉœžœ¡Ë€ÎžœºßÃÍ€ÎÆÉœÐ€·
93 */
94Inline uint16_t
95current_iipm(void)
96{
97        return(current_sr() & 0x0700U);
98}
99
100/*
101 *  IPM¡Ê¥Ï¡Œ¥É¥Š¥§¥¢€Î³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯¡€ÆâÉôÉœžœ¡Ë€ÎžœºßÃÍ€ÎÀßÄê
102 */
103Inline void
104set_iipm(uint16_t iipm)
105{
106        set_sr((current_sr() & ~0x0700U) | iipm);
107}
108
109/*
110 *  TOPPERSÉžœà³ä¹þ€ßœèÍý¥â¥Ç¥ë€ÎŒÂžœ
111 *
112 *  M68040€Ï¡€¥¹¥Æ¡Œ¥¿¥¹¥ì¥ž¥¹¥¿¡ÊSR¡ËÃæ€Ë³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯¡Ê¥Ï¡Œ¥É¥Š¥§
113 *  ¥¢€Î³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯¡€IPM¡Ë€ò»ý€Ã€Æ€€€ë€¬¡€CPU¥í¥Ã¥¯¥Õ¥é¥°€ËÁêÅö
114 *  €¹€ëµ¡Çœ€ò»ý€¿€Ê€€¡¥€œ€Î€¿€á¡€CPU¥í¥Ã¥¯¥Õ¥é¥°€Îµ¡Çœ€ò¡€IPM€Ë€è€Ã€Æ
115 *  ŒÂžœ€¹€ë¡¥
116 *
117 *  €Þ€ºCPU¥í¥Ã¥¯¥Õ¥é¥°€ÎÃ͡ʀ¹€Ê€ï€Á¡€CPU¥í¥Ã¥¯ŸõÂÖ€«CPU¥í¥Ã¥¯²òœüŸõÂÖ
118 *  €«¡Ë€Ï¡€€œ€Î€¿€á€ÎÊÑ¿ô¡Êlock_flag¡Ë€òÍѰՀ·€ÆÊÝ»ý€¹€ë¡¥
119 *
120 *  CPU¥í¥Ã¥¯¥Õ¥é¥°€¬¥¯¥ê¥¢€µ€ì€Æ€€€ëŽÖ¡Ê€¹€Ê€ï€Á¡€CPU¥í¥Ã¥¯²òœüŸõÂÖ€Î
121 *  ŽÖ¡Ë€Ï¡€IPM¡Ê¥Ï¡Œ¥É¥Š¥§¥¢€Î³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯¡Ë€ò¡€¥â¥Ç¥ëŸå€Î³ä¹þ€ß
122 *  Í¥ÀèÅÙ¥Þ¥¹¥¯€ÎÃÍ€ËÀßÄꀹ€ë¡¥€³€ÎŽÖ€Ï¡€¥â¥Ç¥ëŸå€Î³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯
123 *  €Ï¡€IPM€òÍÑ€€€ÆÊÝ»ý€¹€ë¡¥
124 *
125 *  €œ€ì€ËÂЀ·€ÆCPU¥í¥Ã¥¯¥Õ¥é¥°€¬¥»¥Ã¥È€µ€ì€Æ€€€ëŽÖ¡Ê€¹€Ê€ï€Á¡€CPU¥í¥Ã
126 *  ¥¯ŸõÂրΎ֡ˀϡ€IPM¡Ê¥Ï¡Œ¥É¥Š¥§¥¢€Î³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯¡Ë€ò¡€¥«¡Œ¥Í¥ë
127 *  ŽÉÍý€Î³ä¹þ€ß€ò€¹€Ù€Æ¥Þ¥¹¥¯€¹€ëÃÍ¡ÊTIPM_LOCK¡Ë€È¡€¥â¥Ç¥ëŸå€Î³ä¹þ€ßÍ¥
128 *  ÀèÅÙ¥Þ¥¹¥¯€È€Î¹â€€Êý€ËÀßÄꀹ€ë¡¥€³€ÎŽÖ€Î¥â¥Ç¥ëŸå€Î³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹
129 *  ¥¯€Ï¡€€œ€Î€¿€á€ÎÊÑ¿ô¡Êsaved_iipm¡€ÆâÉôÉœžœ€ÇÊÝ»ý¡Ë€òÍѰՀ·€ÆÊÝ»ý€¹
130 *  €ë¡¥
131 */
132
133/*
134 *  ¥³¥ó¥Æ¥­¥¹¥È€Î»²ŸÈ
135 *
136 *  M68040€Ç€Ï¡€¥¿¥¹¥¯¥³¥ó¥Æ¥­¥¹¥È€ò¥Þ¥¹¥¿¥â¡Œ¥É€Ç¡€È󥿥¹¥¯¥³¥ó¥Æ¥­¥¹
137 *  ¥È€ò³ä¹þ€ß¥â¡Œ¥É€ÇŒÂ¹Ô€¹€ë¡¥¥Þ¥¹¥¿¥â¡Œ¥É€«³ä¹þ€ß¥â¡Œ¥É€«€Ï¡€¥¹¥Æ¡Œ
138 *  ¥¿¥¹¥ì¥ž¥¹¥¿¡ÊSR¡ËÃæ€Î³ä¹þ€ß¥â¡Œ¥É¥Ó¥Ã¥È€Ë€è€êÈœỀǀ­€ë¡¥
139 */
140Inline bool_t
141sense_context(void)
142{
143        return((current_sr() & 0x1000U) == 0U);
144}
145
146#endif /* TOPPERS_MACRO_ONLY */
147
148/*
149 *  CPU¥í¥Ã¥¯ŸõÂրǀγä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯
150 *
151 *  TIPM_LOCK€Ï¡€¥«¡Œ¥Í¥ëŽÉÍý€Î³ä¹þ€ß€ò€¹€Ù€Æ¥Þ¥¹¥¯€¹€ëÃÍ€ËÄêµÁ€¹€ë¡¥
152 *
153 *  TIPM_LOCK€Ï¡€ŽðËÜŪ€Ë€ÏTMIN_INTPRI€Ë°ìÃ×€µ€»€ì€Ð€è€€€¬¡€M68040€Ç€Ï¡€
154 *  IPM¡Ê¥Ï¡Œ¥É¥Š¥§¥¢€Î³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯¡Ë€¬-6€ÎŸì¹ç€È-7€ÎŸì¹ç€Î¿¶Éñ€€
155 *  €¬Æ±€ž€Ç¡€IPM€Ë-7€òÀßÄꀹ€ë€³€È€ÏžúΚŪ€Ë¹Ô€š€ë€³€È€«€é¡€
156 *  TMIN_INTPRI€¬-6€Î»þ€ÏTIPM_LOCK€ò-7€Ë€·€Æ€€€ë¡¥
157 */
158#if TMIN_INTPRI == -6           /* NMI°Ê³°€Ë¥«¡Œ¥Í¥ëŽÉÍý³°€Î³ä¹þ€ß€òÀ߀±€Ê€€ */
159#define TIPM_LOCK               (-7)
160#else /* TMIN_INTPRI == -6 */
161#if (-1 >= TMIN_INTPRI) && (TMIN_INTPRI > -6)
162#define TIPM_LOCK               TMIN_INTPRI
163#else /* (-1 >= TMIN_INTPRI) && (TMIN_INTPRI > -6) */
164#error TMIN_INTPRI out of range.
165#endif /* (-1 >= TMIN_INTPRI) && (TMIN_INTPRI > -6) */
166#endif /* TMIN_INTPRI == -6 */
167
168/*
169 *  CPU¥í¥Ã¥¯ŸõÂրǀγä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯€ÎÆâÉôÉœžœ
170 */
171#define IIPM_LOCK               INT_IPM(TIPM_LOCK)
172
173/*
174 *  TIPM_ENAALL¡Ê³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯Á޲òœü¡Ë€ÎÆâÉôÉœžœ
175 */
176#define IIPM_ENAALL             INT_IPM(TIPM_ENAALL)
177
178#ifndef TOPPERS_MACRO_ONLY
179
180/*
181 *  CPU¥í¥Ã¥¯¥Õ¥é¥°ŒÂžœ€Î€¿€á€ÎÊÑ¿ô
182 *
183 *  €³€ì€é€ÎÊÑ¿ô€Ï¡€CPU¥í¥Ã¥¯ŸõÂրλþ€Î€ßœñ€­Ž¹€š€Æ€è€€€â€Î€È€¹€ë¡¥
184 */
185extern volatile bool_t          lock_flag;      /* CPU¥í¥Ã¥¯¥Õ¥é¥°€ÎÃÍ€òÊÝ»ý€¹€ëÊÑ¿ô */
186extern volatile uint16_t        saved_iipm;     /* ³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯€òÊÝž€¹€ëÊÑ¿ô */
187
188/*
189 *  CPU¥í¥Ã¥¯ŸõÂր؀ΰܹÔ
190 *
191 *  IPM¡Ê¥Ï¡Œ¥É¥Š¥§¥¢€Î³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯¡Ë€ò¡€saved_iipm€ËÊÝž€·¡€¥«¡Œ
192 *  ¥Í¥ëŽÉÍý€Î³ä¹þ€ß€ò€¹€Ù€Æ¥Þ¥¹¥¯€¹€ëÃÍ¡ÊTIPM_LOCK¡Ë€ËÀßÄꀹ€ë¡¥€Þ€¿¡€
193 *  lock_flag€òtrue€Ë€¹€ë¡¥
194 *
195 *  IPM€¬¡€ºÇœé€«€éTIPM_LOCK€ÈƱ€ž€«€œ€ì€è€ê¹â€€Ÿì¹ç€Ë€Ï¡€€œ€ì€ò
196 *  saved_iipm€ËÊÝž€¹€ë€Î€ß€Ç¡€TIPM_LOCK€Ë€ÏÀßÄꀷ€Ê€€¡¥€³€ì€Ï¡€¥â¥Ç¥ë
197 *  Ÿå€Î³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯€¬¡€TIPM_LOCK€ÈƱ€ž€«€œ€ì€è€ê¹â€€¥ì¥Ù¥ë€ËÀßÄê
198 *  €µ€ì€Æ€€€ëŸõÂրˀ¢€¿€ë¡¥
199 *
200 *  €³€ÎŽØ¿ô€Ï¡€CPU¥í¥Ã¥¯ŸõÂÖ¡Êlock_flag€¬true€ÎŸõÂ֡ˀǞƀЀì€ë€³€È€Ï
201 *  €Ê€€€â€Î€ÈÁÛÄꀷ€Æ€€€ë¡¥
202 */
203Inline void
204x_lock_cpu(void)
205{
206        uint16_t        iipm;
207
208        /*
209         *  current_iipm()€ÎÊÖ€êÃÍ€òÄŸÀÜsaved_iipm€ËÊÝž€»€º¡€°ì»þÊÑ¿ôiipm
210         *  €òÍÑ€€€Æ€€€ë€Î€Ï¡€current_iipm()€òžÆ€ó€ÀÄŸžå€Ë³ä¹þ€ß€¬È¯Àž€·¡€
211         *  µ¯Æ°€µ€ì€¿³ä¹þ€ßœèÍý€Çsaved_iipm€¬Êѹ¹€µ€ì€ë²ÄÇœÀ­€¬€¢€ë€¿€á€Ç
212         *  €¢€ë¡¥
213         */
214        iipm = current_iipm();
215#if TIPM_LOCK == -7
216        disint();
217#else /* TIPM_LOCK == -7 */
218        if (IIPM_LOCK > iipm) {
219                set_iipm(IIPM_LOCK);
220        }
221#endif /* TIPM_LOCK == -7 */
222        saved_iipm = iipm;
223        lock_flag = true;
224        Asm("":::"memory");
225}
226
227#define t_lock_cpu()    x_lock_cpu()
228#define i_lock_cpu()    x_lock_cpu()
229
230/*
231 *  CPU¥í¥Ã¥¯ŸõÂրβòœü
232 *
233 *  lock_flag€òfalse€Ë€·¡€IPM¡Ê¥Ï¡Œ¥É¥Š¥§¥¢€Î³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯¡Ë€ò¡€
234 *  saved_iipm€ËÊÝž€·€¿ÃÍ€ËÌ္¡¥
235 *
236 *  €³€ÎŽØ¿ô€Ï¡€CPU¥í¥Ã¥¯ŸõÂÖ¡Êlock_flag€¬true€ÎŸõÂ֡ˀǀ΀ߞƀЀì€ë€â
237 *  €Î€ÈÁÛÄꀷ€Æ€€€ë¡¥
238 */
239Inline void
240x_unlock_cpu(void)
241{
242        Asm("":::"memory");
243        lock_flag = false;
244        set_iipm(saved_iipm);
245}
246
247#define t_unlock_cpu()  x_unlock_cpu()
248#define i_unlock_cpu()  x_unlock_cpu()
249
250/*
251 *  CPU¥í¥Ã¥¯ŸõÂրλ²ŸÈ
252 */
253Inline bool_t
254x_sense_lock(void)
255{
256        return(lock_flag);
257}
258
259#define t_sense_lock()  x_sense_lock()
260#define i_sense_lock()  x_sense_lock()
261
262/*
263 *  chg_ipm€ÇÍ­žú€Ê³ä¹þ€ßÍ¥ÀèÅÙ€ÎÈϰπÎÈœÄê
264 *
265 *  TMIN_INTPRI€ÎÃ̀ˀè€é€º¡€chg_ipm€Ç€Ï¡€-6¡ÁTIPM_ENAALL¡Ê¡á0¡Ë€ÎÈϰÏ
266 *  €ËÀßÄê€Ç€­€ë€³€È€È€¹€ë¡Ê¥¿¡Œ¥²¥Ã¥ÈÄêµÁ€Î³ÈÄ¥¡Ë¡¥
267 */
268#define VALID_INTPRI_CHGIPM(intpri) \
269                                (-6 <= (intpri) && (intpri) <= TIPM_ENAALL)
270
271/*
272 * ¡Ê¥â¥Ç¥ëŸå€Î¡Ë³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯€ÎÀßÄê
273 *
274 *  CPU¥í¥Ã¥¯¥Õ¥é¥°€¬¥¯¥ê¥¢€µ€ì€Æ€€€ë»þ€Ï¡€¥Ï¡Œ¥É¥Š¥§¥¢€Î³ä¹þ€ßÍ¥ÀèÅÙ¥Þ
275 *  ¥¹¥¯€òÀßÄꀹ€ë¡¥CPU¥í¥Ã¥¯¥Õ¥é¥°€¬¥»¥Ã¥È€µ€ì€Æ€€€ë»þ€Ï¡€saved_iipm
276 *  €òÀßÄꀷ¡€€µ€é€Ë¡€¥Ï¡Œ¥É¥Š¥§¥¢€Î³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯€ò¡€ÀßÄꀷ€è€Š€È
277 *  €·€¿¡Ê¥â¥Ç¥ëŸå€Î¡Ë³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯€ÈTIPM_LOCK€Î¹â€€Êý€ËÀßÄꀹ€ë¡¥
278 */
279Inline void
280x_set_ipm(PRI intpri)
281{
282        uint16_t        iipm = INT_IPM(intpri);
283
284        if (!lock_flag) {
285                set_iipm(iipm);
286        }
287        else {
288                saved_iipm = iipm;
289#if TIPM_LOCK == -7
290                /*
291                 *  TIPM_LOCK€¬-7€ÎŸì¹ç€Ë€Ï¡€€³€Î»þÅÀ€Ç¥Ï¡Œ¥É¥Š¥§¥¢€Î³ä¹þ€ßÍ¥Àè
292                 *  ÅÙ¥Þ¥¹¥¯€¬É¬€º7€ËÀßÄꀵ€ì€Æ€€€ë€¿€á¡€ÀßÄꀷ€Ê€ª€¹É¬Í×€¬€Ê€€¡¥
293                 */
294#else /* TIPM_LOCK == -7 */
295                set_iipm(iipm > IIPM_LOCK ? iipm : IIPM_LOCK);
296#endif /* TIPM_LOCK == -7 */
297        }
298}
299
300#define t_set_ipm(intpri)       x_set_ipm(intpri)
301#define i_set_ipm(intpri)       x_set_ipm(intpri)
302
303/*
304 * ¡Ê¥â¥Ç¥ëŸå€Î¡Ë³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯€Î»²ŸÈ
305 *
306 *  CPU¥í¥Ã¥¯¥Õ¥é¥°€¬¥¯¥ê¥¢€µ€ì€Æ€€€ë»þ€Ï¥Ï¡Œ¥É¥Š¥§¥¢€Î³ä¹þ€ßÍ¥ÀèÅÙ¥Þ
307 *  ¥¹¥¯€ò¡€¥»¥Ã¥È€µ€ì€Æ€€€ë»þ€Ïsaved_iipm€ò»²ŸÈ€¹€ë¡¥
308 */
309Inline PRI
310x_get_ipm(void)
311{
312        uint16_t        iipm;
313
314        if (!lock_flag) {
315                iipm = current_iipm();
316        }
317        else {
318                iipm = saved_iipm;
319        }
320        return(EXT_IPM(iipm));
321}
322
323#define t_get_ipm()             x_get_ipm()
324#define i_get_ipm()             x_get_ipm()
325
326/*
327 *  ºÇ¹âÍ¥Àèœç°Ì¥¿¥¹¥¯€Ø€Î¥Ç¥£¥¹¥Ñ¥Ã¥Á¡Êprc_support.S¡Ë
328 *
329 *  dispatch€Ï¡€¥¿¥¹¥¯¥³¥ó¥Æ¥­¥¹¥È€«€éžÆ€ÓœÐ€µ€ì€¿¥µ¡Œ¥Ó¥¹¥³¡Œ¥ëœèÍý€«
330 *  €éžÆ€ÓœÐ€¹€Ù€­€â€Î€Ç¡€¥¿¥¹¥¯¥³¥ó¥Æ¥­¥¹¥È¡ŠCPU¥í¥Ã¥¯ŸõÂÖ¡Š¥Ç¥£¥¹¥Ñ¥Ã
331 *  ¥Áµö²ÄŸõÂÖ¡Š¡Ê¥â¥Ç¥ëŸå€Î¡Ë³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯Á޲òœüŸõÂրǞƀӜЀµ€Ê
332 *  €±€ì€Ð€Ê€é€Ê€€¡¥
333 */
334extern void     dispatch(void);
335
336/*
337 *  ¥Ç¥£¥¹¥Ñ¥Ã¥Á¥ã€Îưºî³«»Ï¡Êprc_support.S¡Ë
338 *
339 *  start_dispatch€Ï¡€¥«¡Œ¥Í¥ëµ¯Æ°»þ€ËžÆ€ÓœÐ€¹€Ù€­€â€Î€Ç¡€€¹€Ù€Æ€Î³ä¹þ
340 *  €ß€ò¶Ø»ß€·€¿ŸõÂ֡ʳä¹þ€ß¥í¥Ã¥¯ŸõÂÖ€ÈÆ±Åù€ÎŸõÂ֡ˀǞƀӜЀµ€Ê€±€ì€Ð
341 *  €Ê€é€Ê€€¡¥
342 */
343extern void     start_dispatch(void) NoReturn;
344
345/*
346 *  žœºß€Î¥³¥ó¥Æ¥­¥¹¥È€òŒÎ€Æ€Æ¥Ç¥£¥¹¥Ñ¥Ã¥Á¡Êprc_support.S¡Ë
347 *
348 *  exit_and_dispatch€Ï¡€ext_tsk€«€éžÆ€ÓœÐ€¹€Ù€­€â€Î€Ç¡€¥¿¥¹¥¯¥³¥ó¥Æ¥­
349 *  ¥¹¥È¡ŠCPU¥í¥Ã¥¯ŸõÂÖ¡Š¥Ç¥£¥¹¥Ñ¥Ã¥Áµö²ÄŸõÂÖ¡Š¡Ê¥â¥Ç¥ëŸå€Î¡Ë³ä¹þ€ßÍ¥Àè
350 *  ÅÙ¥Þ¥¹¥¯Á޲òœüŸõÂրǞƀӜЀµ€Ê€±€ì€Ð€Ê€é€Ê€€¡¥
351 */
352extern void     exit_and_dispatch(void) NoReturn;
353
354/*
355 *  ¥«¡Œ¥Í¥ë€ÎœªÎ»œèÍý€ÎžÆœÐ€·¡Êprc_support.S¡Ë
356 *
357 *  call_exit_kernel€Ï¡€¥«¡Œ¥Í¥ë€ÎœªÎ»»þ€ËžÆ€ÓœÐ€¹€Ù€­€â€Î€Ç¡€È󥿥¹¥¯
358 *  ¥³¥ó¥Æ¥­¥¹¥È€ËÀڀꎹ€š€Æ¡€¥«¡Œ¥Í¥ë€ÎœªÎ»œèÍý¡Êexit_kernel¡Ë€òžÆ€ÓœÐ
359 *  €¹¡¥
360 */
361extern void call_exit_kernel(void) NoReturn;
362
363/*
364 *  ¥¿¥¹¥¯¥³¥ó¥Æ¥­¥¹¥È€ÎœéŽü²œ
365 *
366 *  ¥¿¥¹¥¯€¬µÙ»ßŸõÂÖ€«€éŒÂ¹Ô€Ç€­€ëŸõÂր˰ܹԀ¹€ë»þ€ËžÆ€Ð€ì€ë¡¥€³€Î»þÅÀ
367 *  €Ç¥¹¥¿¥Ã¥¯Îΰè€ò»È€Ã€Æ€Ï€Ê€é€Ê€€¡¥
368 *
369 *  activate_context€ò¡€¥€¥ó¥é¥€¥óŽØ¿ô€Ç€Ï€Ê€¯¥Þ¥¯¥íÄêµÁ€È€·€Æ€€€ë€Î€Ï¡€
370 *  €³€Î»þÅÀ€Ç€ÏTCB€¬ÄêµÁ€µ€ì€Æ€€€Ê€€€¿€á€Ç€¢€ë¡¥
371 */
372extern void     start_r(void);
373
374#define activate_context(p_tcb)                                                                                 \
375{                                                                                                                                               \
376        (p_tcb)->tskctxb.msp = (void *)((char *)((p_tcb)->p_tinib->stk)         \
377                                                                                + (p_tcb)->p_tinib->stksz);             \
378        (p_tcb)->tskctxb.pc = (void *) start_r;                                                         \
379}
380
381/*
382 *  calltex€Ï»ÈÍÑ€·€Ê€€
383 */
384#define OMIT_CALLTEX
385
386/*
387 *  Îã³°¥Ù¥¯¥¿¥Æ¡Œ¥Ö¥ë€Î¹œÂ€€ÎÄêµÁ
388 */
389typedef struct exc_vector_entry {
390        FP              exc_handler;            /* Îã³°¥Ï¥ó¥É¥é€Îµ¯Æ°ÈÖÃÏ */
391} EXCVE;
392
393/*
394 *  ³ä¹þ€ß¥Ï¥ó¥É¥éÈÖ¹æ€ÈCPUÎã³°¥Ï¥ó¥É¥éÈÖ¹æ€ÎÈϰπÎÈœÄê
395 */
396#define VALID_INHNO_DEFINH(inhno)       ((0x10U <= (inhno) && (inhno) <= 0x1fU) \
397                                                                        || (0x40U <= (inhno) && (inhno) <= 0xffU))
398#define VALID_EXCNO_DEFEXC(excno)       ((0x02U <= (excno) && (excno) <= 0x0fU) \
399                                                                        || (0x20U <= (excno) && (excno) <= 0x3fU))
400
401/*
402 *  ³ä¹þ€ß¥Ï¥ó¥É¥é€ÎÀßÄê
403 *
404 *  ¥Ù¥¯¥È¥ëÈÖ¹æinhno€Î³ä¹þ€ß¥Ï¥ó¥É¥é€ÎœÐÆþžýœèÍý€ÎÈÖÃÏ€òint_entry€ËÀß
405 *  Äꀹ€ë¡¥
406 */
407Inline void
408x_define_inh(INHNO inhno, FP int_entry)
409{
410        EXCVE   *excvt;
411
412        assert(VALID_INHNO_DEFINH(inhno));
413
414#ifdef EXCVT_KERNEL
415        /*
416         *  EXCVT_KERNEL€¬ÄêµÁ€µ€ì€Æ€€€ë»þ€Ï¡€œéŽü²œœèÍý€ÎÃæ€ÇVBR€ò
417         *  EXCVT_KERNEL€ËÀßÄꀹ€ë€Î€Ç¡€EXCVT_KERNEL€ò»È€Š¡¥
418         */
419        excvt = (EXCVE *) EXCVT_KERNEL;
420#else /* EXCVT_KERNEL */
421        excvt = (EXCVE *) current_vbr();
422#endif /* EXCVT_KERNEL */
423        excvt[inhno].exc_handler = int_entry;
424}
425
426/*
427 *  CPUÎã³°¥Ï¥ó¥É¥é€ÎÀßÄê
428 *
429 *  ¥Ù¥¯¥È¥ëÈÖ¹æexcno€ÎCPUÎã³°¥Ï¥ó¥É¥é€ÎœÐÆþžýœèÍý€ÎÈÖÃÏ€òexc_entry€ËÀß
430 *  Äꀹ€ë¡¥
431 */
432Inline void
433x_define_exc(EXCNO excno, FP exc_entry)
434{
435        EXCVE   *excvt;
436
437        assert(VALID_EXCNO_DEFEXC(excno));
438
439#ifdef EXCVT_KERNEL
440        /*
441         *  EXCVT_KERNEL€¬ÄêµÁ€µ€ì€Æ€€€ë»þ€Ï¡€œéŽü²œœèÍý€ÎÃæ€ÇVBR€ò
442         *  EXCVT_KERNEL€ËÀßÄꀹ€ë€Î€Ç¡€EXCVT_KERNEL€ò»È€Š¡¥
443         */
444        excvt = (EXCVE *) EXCVT_KERNEL;
445#else /* EXCVT_KERNEL */
446        excvt = (EXCVE *) current_vbr();
447#endif /* EXCVT_KERNEL */
448        excvt[excno].exc_handler = exc_entry;
449}
450
451/*
452 *  ³ä¹þ€ß¥Ï¥ó¥É¥é€ÎœÐÆþžýœèÍý€ÎÀžÀ®
453 */
454
455/*
456 *  ³ä¹þ€ß¥Ï¥ó¥É¥é€ÎœÐÆþžýœèÍý€Î¥é¥Ù¥ë€òºî€ë¥Þ¥¯¥í
457 */
458#define INT_ENTRY(inhno, inthdr)        _kernel_##inthdr##_##inhno
459
460/*
461 *  LOG_INH_ENTER€¬¥Þ¥¯¥íÄêµÁ€µ€ì€Æ€€€ëŸì¹ç€Ë¡€CALL_LOG_INH_ENTER€ò¡€
462 *  inhno_num€ò¥Ñ¥é¥á¡Œ¥¿€È€·€Ælog_inh_enter€òžÆ€ÓœÐ€¹¥¢¥»¥ó¥Ö¥êžÀžì¥³¡Œ
463 *  ¥É€Ë¥Þ¥¯¥íÄêµÁ€¹€ë¡¥
464 */
465#ifdef LOG_INH_ENTER
466
467#define CALL_LOG_INH_ENTER(inhno_num) \
468"       move.l #" #inhno_num ", -(%sp)  \n"  /* inhno_num€ò¥Ñ¥é¥á¡Œ¥¿€Ë */ \
469"       jsr _kernel_log_inh_enter               \n"  /* log_inh_enter€òžÆ€ÓœÐ€¹ */ \
470"       addq.l #4, %sp                                  \n"
471
472#else /* LOG_INH_ENTER */
473#define CALL_LOG_INH_ENTER(inhno_num)
474#endif /* LOG_INH_ENTER */
475
476#ifdef LOG_INH_LEAVE
477
478/*
479 *  CALL_LOG_INH_LEAVE€ò¡€inhno_num€ò¥Ñ¥é¥á¡Œ¥¿€È€·€Ælog_inh_leave€òžÆ
480 *  €ÓœÐ€¹¥¢¥»¥ó¥Ö¥êžÀžì¥³¡Œ¥É€Ë¥Þ¥¯¥íÄêµÁ€¹€ë¡¥
481 */
482#define CALL_LOG_INH_LEAVE(inhno_num) \
483"       move.l #" #inhno_num ", -(%sp)  \n"  /* inhno_num€ò¥Ñ¥é¥á¡Œ¥¿€Ë */ \
484"       jsr _kernel_log_inh_leave               \n"  /* log_inh_leave€òžÆ€ÓœÐ€¹ */ \
485"       addq.l #4, %sp                                  \n"
486
487/*
488 *  LOG_INH_LEAVE€¬¥Þ¥¯¥íÄêµÁ€µ€ì€Æ€€€ëŸì¹ç€Î³ä¹þ€ß¥Ï¥ó¥É¥é€ÎœÐÆþžýœèÍý¡¥
489 *  ³ä¹þ€ß¥Ï¥ó¥É¥é€ò¥µ¥Ö¥ë¡Œ¥Á¥ó¥³¡Œ¥ë€·¡€Ìá€Ã€Æ€­€¿€é¡€¥È¥ì¡Œ¥¹¥í¥°€Î
490 *  ŒèÆÀžå¡€ret_int€ËʬŽô€¹€ë¡¥
491 */
492#define INTHDR_ENTRY(inhno, inhno_num, inthdr) \
493extern void _kernel_##inthdr##_##inhno(void); \
494asm(".text                                                      \n" \
495"_kernel_" #inthdr "_" #inhno ":        \n" \
496"       movem.l %d0-%d1/%a0-%a1, -(%sp) \n"  /* ¥¹¥¯¥é¥Ã¥Á¥ì¥ž¥¹¥¿€òÊÝž */ \
497        CALL_LOG_INH_ENTER(inhno_num) \
498"       jsr " #inthdr "                                 \n"  /* ³ä¹þ€ß¥Ï¥ó¥É¥é€òžÆ€ÓœÐ€¹ */ \
499        CALL_LOG_INH_LEAVE(inhno_num) \
500"       jmp _kernel_ret_int                             \n");/* ret_int€ØÊ¬Žô */
501
502#else /* LOG_INH_LEAVE */
503
504/*
505 *  LOG_INH_LEAVE€¬¥Þ¥¯¥íÄêµÁ€µ€ì€Æ€€€Ê€€Ÿì¹ç€Î³ä¹þ€ß¥Ï¥ó¥É¥é€ÎœÐÆþžýœè
506 *  Íý¡¥Ìá€êÈÖÃπȀ·€Æret_int€ò¥¹¥¿¥Ã¥¯€ËÀÑ€ó€Àžå¡€³ä¹þ€ß¥Ï¥ó¥É¥é€Îµ¯Æ°
507 *  ÈÖÃÏ€ËʬŽô€¹€ë¡¥³ä¹þ€ß¥Ï¥ó¥É¥é€«€é€Î¥ê¥¿¡Œ¥ó€Ë€è€ê¡€ret_int€ØÊ¬Žô€¹
508 *  €ë¡¥
509 */
510#define INTHDR_ENTRY(inhno, inhno_num, inthdr) \
511extern void _kernel_##inthdr##_##inhno(void); \
512asm(".text                                                      \n" \
513"_kernel_" #inthdr "_" #inhno ":        \n" \
514"       movem.l %d0-%d1/%a0-%a1, -(%sp) \n"  /* ¥¹¥¯¥é¥Ã¥Á¥ì¥ž¥¹¥¿€òÊÝž */ \
515        CALL_LOG_INH_ENTER(inhno_num) \
516"       move.l #_kernel_ret_int, -(%sp) \n"  /* Ìá€êÈÖÃÏ€ò¥¹¥¿¥Ã¥¯€ËÀÑ€à */ \
517"       jmp " #inthdr "                                 \n");/* ³ä¹þ€ß¥Ï¥ó¥É¥é€ØÊ¬Žô */
518
519#endif /* LOG_INH_LEAVE */
520
521/*
522 *  CPUÎã³°¥Ï¥ó¥É¥é€ÎœÐÆþžýœèÍý€ÎÀžÀ®
523 *
524 *  CPUÎã³°¥Ï¥ó¥É¥é€ÎÈÖÃÏ€òA1€Ë¡€CPUÎã³°¥Ï¥ó¥É¥éÈÖ¹æ€òD1€ËÆþ€ì€Æ¡€
525 *  exchdr_entry€ËʬŽô€¹€ë¡¥³ä¹þ€ß¥Ï¥ó¥É¥é€ÎœÐÆþžýœèÍý€ÈƱÍ̀ˡ€CPUÎã³°
526 *  ¥Ï¥ó¥É¥éËè€ËCPUÎã³°¥Ï¥ó¥É¥é€òžÆ€ÓœÐ€¹œèÍý€òÅž³«€¹€ëÊýË¡€â€¢€ë€¬¡€Åž
527 *  ³«€¹€ëœèÍýÆâÍÆ€¬Ê£»š€Ç€¢€ë€¿€á¡€ºÎÍÑ€·€Æ€€€Ê€€¡¥
528 */
529
530/*
531 *  CPUÎã³°¥Ï¥ó¥É¥é€ÎœÐÆþžýœèÍý€Î¥é¥Ù¥ë€òºî€ë¥Þ¥¯¥í
532 */
533#define EXC_ENTRY(excno, exchdr)        _kernel_##exchdr##_##excno
534
535/*
536 *  CPUÎã³°¥Ï¥ó¥É¥é€ÎœÐÆþžýœèÍý
537 */
538#define EXCHDR_ENTRY(excno, excno_num, exchdr) \
539extern void _kernel_##exchdr##_##excno(void *sp); \
540asm(".text                                                      \n" \
541"_kernel_" #exchdr "_" #excno ":        \n" \
542"       movem.l %d0-%d1/%a0-%a1, -(%sp) \n"  /* ¥¹¥¯¥é¥Ã¥Á¥ì¥ž¥¹¥¿€òÊÝž */ \
543"       lea.l " #exchdr ", %a1                  \n"  /* CPUÎã³°¥Ï¥ó¥É¥é€ÎÈÖÃÏ€òA1€Ë */ \
544"       move.l #" #excno_num ", %d1             \n"  /* excno_num€òD1€Ë */ \
545"       jmp _kernel_exchdr_entry                \n");/* exchdr_entry€ËʬŽô */
546
547/*
548 *  CPUÎã³°€ÎȯÀž€·€¿»þ€Î¥³¥ó¥Æ¥­¥¹¥È€Î»²ŸÈ
549 *
550 *  CPUÎã³°€ÎȯÀž€·€¿»þ€Î¥³¥ó¥Æ¥­¥¹¥È€¬¡€¥¿¥¹¥¯¥³¥ó¥Æ¥­¥¹¥È€Î»þ€Ëfalse¡€
551 *  €œ€Š€Ç€Ê€€»þ€Ëtrue€òÊÖ€¹¡¥
552 */
553Inline bool_t
554exc_sense_context(void *p_excinf)
555{
556        return((*((uint16_t *) p_excinf) & 0x1000U) == 0U);
557}
558
559/*
560 *  CPUÎã³°€ÎȯÀž€·€¿»þ€ÎIPM¡Ê¥Ï¡Œ¥É¥Š¥§¥¢€Î³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯¡€ÆâÉôÉœ
561 *  žœ¡Ë€Î»²ŸÈ
562 */
563Inline uint16_t
564exc_get_iipm(void *p_excinf)
565{
566        return(*((uint16_t *) p_excinf) & 0x0700U);
567}
568
569/*
570 *  CPUÎã³°€ÎȯÀž€·€¿»þ€Î¥³¥ó¥Æ¥­¥¹¥È€È³ä¹þ€ß€Î¥Þ¥¹¥¯ŸõÂրλ²ŸÈ
571 *
572 *  CPUÎã³°€ÎȯÀž€·€¿»þ€Î¥·¥¹¥Æ¥àŸõÂÖ€¬¡€¥«¡Œ¥Í¥ëŒÂ¹ÔÃæ€Ç€Ê€¯¡€¥¿¥¹¥¯¥³
573 *  ¥ó¥Æ¥­¥¹¥È€Ç€¢€ê¡€Á޳ä¹þ€ß¥í¥Ã¥¯ŸõÂրǀʀ¯¡€CPU¥í¥Ã¥¯ŸõÂրǀʀ¯¡€³ä
574 *  ¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯Á޲òœüŸõÂրǀ¢€ë»þ€Ëtrue¡€€œ€Š€Ç€Ê€€»þ€Ëfalse€òÊÖ€¹
575 *  ¡ÊCPUÎã³°€¬¥«¡Œ¥Í¥ëŽÉÍý³°€Î³ä¹þ€ßœèÍýÃæ€ÇȯÀž€·€¿Ÿì¹ç€Ë€âfalse€òÊÖ
576 *  €¹¡Ë¡¥
577 *
578 *  M68040€Ç€Ï¡€CPUÎã³°€ÎȯÀž€·€¿»þ€ÎIPM¡Ê¥Ï¡Œ¥É¥Š¥§¥¢€Î³ä¹þ€ßÍ¥ÀèÅÙ¥Þ
579 *  ¥¹¥¯¡Ë€¬€¹€Ù€Æ€Î³ä¹þ€ß€òµö²Ä€¹€ëŸõÂրǀ¢€ë€³€È€ò¥Á¥§¥Ã¥¯€¹€ë€³€È€Ç¡€
580 *  ¥«¡Œ¥Í¥ëŒÂ¹ÔÃæ€Ç€Ê€€€³€È¡€Á޳ä¹þ€ß¥í¥Ã¥¯ŸõÂրǀʀ€€³€È¡€CPU¥í¥Ã¥¯Ÿõ
581 *  Âրǀʀ€€³€È¡€³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯Á޲òœüŸõÂրǀ¢€ë€³€È€Î4€Ä€ÎŸò·ï€ò
582 *  ¥Á¥§¥Ã¥¯€¹€ë€³€È€¬€Ç€­€ë¡ÊCPUÎã³°€¬È¯Àž€·€¿»þ€Îlock_flag€ò»²ŸÈ€¹€ë
583 *  ɬÍ׀πʀ€¡Ë¡¥
584 */
585Inline bool_t
586exc_sense_intmask(void *p_excinf)
587{
588        return(!exc_sense_context(p_excinf)
589                                        && exc_get_iipm(p_excinf) == IIPM_ENAALL);
590}
591
592/*
593 *  ¥×¥í¥»¥Ã¥µ°Íž€ÎœéŽü²œ
594 */
595extern void     prc_initialize(void);
596
597/*
598 *  ¥×¥í¥»¥Ã¥µ°Íž€ÎœªÎ»»þœèÍý
599 */
600extern void     prc_terminate(void);
601
602#endif /* TOPPERS_MACRO_ONLY */
603#endif /* TOPPERS_PRC_CONFIG_H */
詳しい使い方は TracBrowser を参照してください。