source: asp_ewarm/asp-1.7.0/extension/mutex/kernel/mutex.h@ 61

Last change on this file since 61 was 61, checked in by ertl-honda, 11 years ago

ASP for EWARM のコミット.

File size: 5.8 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2005-2010 by Embedded and Real-Time Systems Laboratory
7 * Graduate School of Information Science, Nagoya Univ., JAPAN
8 *
9 * ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
10 * ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
11 * •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
12 * (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
13 * Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
14 * ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
15 * (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
16 * —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ…
17ƒƒ“ƒgi—˜—p
18 * ŽÒƒ}ƒjƒ…
19ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
20 * ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
21 * (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
22 * —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
23 * ‚ƁD
24 * (a) Ä”z•z‚É”º‚¤ƒhƒLƒ…
25ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ…
26ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
27 * ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
28 * (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
29 * •ñ‚·‚邱‚ƁD
30 * (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
31 * ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
32 * ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
33 * —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
34 * –Ɛӂ·‚邱‚ƁD
35 *
36 * –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
37 * ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
38 * ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
39 * ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
40 * ‚̐ӔC‚𕉂í‚È‚¢D
41 *
42 * @(#) $Id: mutex.h 1910 2010-08-25 06:30:21Z ertl-hiro $
43 */
44
45/*
46 * ƒ~ƒ…
47[ƒeƒbƒNƒX‹@”\
48 */
49
50#ifndef TOPPERS_MUTEX_H
51#define TOPPERS_MUTEX_H
52
53#include <queue.h>
54
55/*
56 * ƒ~ƒ…
57[ƒeƒbƒNƒX‰Šú‰»ƒuƒƒbƒN
58 *
59 * ‚±‚̍\‘¢‘̂́C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚̏‰Šú‰»ƒuƒƒbƒN‚Ì‹¤’Ê•”•ª
60 * iWOBJINIBj‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚̂ŁC
61 * Å‰‚̃tƒB[ƒ‹ƒh‚ª‹¤’Ê‚É‚È‚Á‚Ä‚¢‚éD
62 */
63typedef struct mutex_initialization_block {
64 ATR mtxatr; /* ƒ~ƒ…
65[ƒeƒbƒNƒX‘®« */
66 uint_t ceilpri; /* ƒ~ƒ…
67[ƒeƒbƒNƒX‚̏ãŒÀ—Dæ“xi“à•”•\Œ»j*/
68} MTXINIB;
69
70/*
71 * ƒ~ƒ…
72[ƒeƒbƒNƒXŠÇ—ƒuƒƒbƒN
73 *
74 * ‚±‚̍\‘¢‘̂́C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚ÌŠÇ—ƒuƒƒbƒN‚Ì‹¤’Ê•”•ªiWOBJCBj
75 * ‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚̂ŁCÅ‰‚Ì2‚‚Ì
76 * ƒtƒB[ƒ‹ƒh‚ª‹¤’Ê‚É‚È‚Á‚Ä‚¢‚éD
77 */
78typedef struct mutex_control_block {
79 QUEUE wait_queue; /* ƒ~ƒ…
80[ƒeƒbƒNƒX‘Ò‚¿ƒLƒ…
81[ */
82 const MTXINIB *p_mtxinib; /* ‰Šú‰»ƒuƒƒbƒN‚ւ̃|ƒCƒ“ƒ^ */
83 TCB *p_loctsk; /* ƒ~ƒ…
84[ƒeƒbƒNƒX‚ðƒƒbƒN‚µ‚Ä‚¢‚éƒ^ƒXƒN */
85 QUEUE mutex_queue; /* ƒƒbƒN‚µ‚Ä‚¢‚éƒ~ƒ…
86[ƒeƒbƒNƒX‚̃Lƒ…
87[ */
88} MTXCB;
89
90/*
91 * ƒ~ƒ…
92[ƒeƒbƒNƒX‘Ò‚¿î•ñƒuƒƒbƒN‚Ì’è‹`
93 *
94 * ‚±‚̍\‘¢‘̂́C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚Ì‘Ò‚¿î•ñƒuƒƒbƒN‚Ì‹¤’Ê•”•ª
95 * iWINFO_WOBJj‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚̂ŁC
96 * ‚·‚ׂẴtƒB[ƒ‹ƒh‚ª‹¤’Ê‚É‚È‚Á‚Ä‚¢‚éD
97 */
98typedef struct mutex_waiting_information {
99 WINFO winfo; /* •W€‚Ì‘Ò‚¿î•ñƒuƒƒbƒN */
100 MTXCB *p_mtxcb; /* ‘Ò‚Á‚Ä‚¢‚éƒ~ƒ…
101[ƒeƒbƒNƒX‚ÌŠÇ—ƒuƒƒbƒN */
102} WINFO_MTX;
103
104/*
105 * ƒ~ƒ…
106[ƒeƒbƒNƒXID‚̍őå’likernel_cfg.cj
107 */
108extern const ID tmax_mtxid;
109
110/*
111 * ƒ~ƒ…
112[ƒeƒbƒNƒX‰Šú‰»ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
113 */
114extern const MTXINIB mtxinib_table[];
115
116/*
117 * ƒ~ƒ…
118[ƒeƒbƒNƒXŠÇ—ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
119 */
120extern MTXCB mtxcb_table[];
121
122/*
123 * ƒ~ƒ…
124[ƒeƒbƒNƒXŠÇ—ƒuƒƒbƒN‚©‚çƒ~ƒ…
125[ƒeƒbƒNƒXID‚ðŽæ‚èo‚·‚½‚߂̃}ƒNƒ
126 */
127#define MTXID(p_mtxcb) ((ID)(((p_mtxcb) - mtxcb_table) + TMIN_MTXID))
128
129/*
130 * ƒ~ƒ…
131[ƒeƒbƒNƒX‹@”\‚̏‰Šú‰»
132 */
133extern void initialize_mutex(void);
134
135/*
136 * ãŒÀ—Dæ“xˆá”½‚̃`ƒFƒbƒN
137 *
138 * chg_pri‚Ì’†‚ŏãŒÀ—Dæ“xˆá”½‚̃`ƒFƒbƒN‚ðs‚¤‚½‚ß‚É—p‚¢‚éŠÖ”‚Å‚ ‚èC
139 * p_tcb‚ÅŽw’肳‚ê‚éƒ^ƒXƒN‚ªƒƒbƒN‚µ‚Ä‚¢‚é—Dæ“xãŒÀƒ~ƒ…
140[ƒeƒbƒNƒX‚ƁC
141 * ƒƒbƒN‚ð‘Ò‚Á‚Ä‚¢‚é—Dæ“xãŒÀƒ~ƒ…
142[ƒeƒbƒNƒX‚Ì’†‚ŁCãŒÀ—Dæ“x‚ª
143 * bpriority‚æ‚è‚à’á‚¢‚à‚Ì‚ª‚ ‚ê‚Îfalse‚ðC‚»‚¤‚Å‚È‚¯‚ê‚Îtrue‚ð•Ô‚·D
144 */
145extern bool_t (*mtxhook_check_ceilpri)(TCB *p_tcb, uint_t bpriority);
146extern bool_t mutex_check_ceilpri(TCB *p_tcb, uint_t bpriority);
147
148/*
149 * —Dæ“xãŒÀƒ~ƒ…
150[ƒeƒbƒNƒX‚ðƒƒbƒN‚µ‚Ä‚¢‚é‚©‚̃`ƒFƒbƒN
151 *
152 * p_tcb‚ÅŽw’肳‚ê‚éƒ^ƒXƒN‚ª—Dæ“xãŒÀƒ~ƒ…
153[ƒeƒbƒNƒX‚ðƒƒbƒN‚µ‚Ä‚¢‚ê‚Î
154 * trueC‚»‚¤‚Å‚È‚¯‚ê‚Îfalse‚ð•Ô‚·D
155 */
156extern bool_t (*mtxhook_scan_ceilmtx)(TCB *p_tcb);
157extern bool_t mutex_scan_ceilmtx(TCB *p_tcb);
158
159/*
160 * ƒ^ƒXƒN‚ÌŒ»Ý—Dæ“x‚ÌŒvŽZ
161 *
162 * p_tcb‚ÅŽw’肳‚ê‚éƒ^ƒXƒN‚ÌŒ»Ý—Dæ“xi‚ɐݒ肷‚ׂ«’lj‚ðŒvŽZ‚·‚éD
163 */
164extern uint_t mutex_calc_priority(TCB *p_tcb);
165
166/*
167 * ƒ~ƒ…
168[ƒeƒbƒNƒX‚̃ƒbƒN‰ðœ
169 *
170 * p_mtxcb‚ÅŽw’肳‚ê‚éƒ~ƒ…
171[ƒeƒbƒNƒX‚ðƒƒbƒN‰ðœ‚·‚éDƒƒbƒN‰ðœ‚µ‚½
172 * ƒ~ƒ…
173[ƒeƒbƒNƒX‚ɁCƒƒbƒN‘Ò‚¿ó‘Ԃ̃^ƒXƒN‚ª‚ ‚éê‡‚ɂ́C‚»‚̃^ƒXƒN
174 * ‚Ƀ~ƒ…
175[ƒeƒbƒNƒX‚ðƒƒbƒN‚³‚¹‚éD
176 */
177extern bool_t mutex_release(MTXCB *p_mtxcb);
178
179/*
180 * ƒ^ƒXƒN‚ªƒƒbƒN‚µ‚Ä‚¢‚é‚·‚ׂẴ~ƒ…
181[ƒeƒbƒNƒX‚̃ƒbƒN‰ðœ
182 *
183 * p_tcb‚ÅŽw’肳‚ê‚éƒ^ƒXƒN‚ɁC‚»‚ꂪƒƒbƒN‚µ‚Ä‚¢‚é‚·‚ׂẴ~ƒ…
184[ƒeƒbƒN
185 * ƒX‚ðƒƒbƒN‰ðœ‚³‚¹‚éDƒƒbƒN‰ðœ‚µ‚½ƒ~ƒ…
186[ƒeƒbƒNƒX‚ɁCƒƒbƒN‘Ò‚¿ó
187 * ‘Ԃ̃^ƒXƒN‚ª‚ ‚éê‡‚ɂ́C‚»‚̃^ƒXƒN‚Ƀ~ƒ…
188[ƒeƒbƒNƒX‚ðƒƒbƒN‚³‚¹‚éD
189 *
190 * ‚±‚̊֐”‚́Cƒ^ƒXƒN‚̏I—¹Žž‚ÉŽg‚í‚ê‚é‚à‚Ì‚Å‚ ‚邽‚߁Cp_tcb‚ÅŽw’肳‚ê
191 * ‚éƒ^ƒXƒN‚Ì—Dæ“x‚ð•ÏX‚·‚鏈—‚͍s‚í‚È‚¢D‚½‚¾‚µC‚±‚̊֐”‚Ì’†‚Å‘¼
192 * ‚̃^ƒXƒN‚Ì—Dæ“x‚ª•Ï‰»‚µCŽÀs‚·‚ׂ«ƒ^ƒXƒN‚ª•Ï‚í‚邱‚Æ‚ª‚ ‚éD‚»‚Ì
193 * ‚½‚߁C‚±‚̊֐”‚©‚ç–ß‚Á‚½Œã‚ɁCƒfƒBƒXƒpƒbƒ`‚ª•K—v‚©”»•Ê‚µ‚āC•K—v‚È
194 * ê‡‚ɂ̓fƒBƒXƒpƒbƒ`‚ðs‚í‚È‚¯‚ê‚΂Ȃç‚È‚¢D
195 */
196extern bool_t (*mtxhook_release_all)(TCB *p_tcb);
197extern bool_t mutex_release_all(TCB *p_tcb);
198
199#endif /* TOPPERS_MUTEX_H */
Note: See TracBrowser for help on using the repository browser.