source: atk2-sc3_fl850f1l/arch/v850_gcc/prc_config.h@ 117

Last change on this file since 117 was 117, checked in by ertl-ishikawa, 9 years ago

ATK2-SC3 1.3.2 FL850F1L(RH850F1L)依存部(GCC/GHS/CCRH)を追加

File size: 18.5 KB
RevLine 
[117]1/*
2 * TOPPERS ATK2
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 * Automotive Kernel Version 2
5 *
6 * Copyright (C) 2012-2013 by Center for Embedded Computing Systems
7 * Graduate School of Information Science, Nagoya Univ., JAPAN
8 * Copyright (C) 2012-2013 by FUJISOFT INCORPORATED, JAPAN
9 * Copyright (C) 2012-2013 by FUJITSU VLSI LIMITED, JAPAN
10 * Copyright (C) 2012-2013 by NEC Communication Systems, Ltd., JAPAN
11 * Copyright (C) 2012-2013 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
12 * Copyright (C) 2012-2013 by Renesas Electronics Corporation, JAPAN
13 * Copyright (C) 2012-2013 by Sunny Giken Inc., JAPAN
14 * Copyright (C) 2012-2013 by TOSHIBA CORPORATION, JAPAN
15 * Copyright (C) 2012-2013 by Witz Corporation, JAPAN
16 * Copyright (C) 2013 by Embedded and Real-Time Systems Laboratory
17 * Graduate School of Information Science, Nagoya Univ., JAPAN
18 *
19 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
20 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
21 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
22 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
23 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
24 * スコード中に含まれていること.
25 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
26 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
27 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
28 * の無保証規定を掲載すること.
29 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
30 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
31 * と.
32 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
33 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
34 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
35 * 報告すること.
36 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
37 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
38 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
39 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
40 * 免責すること.
41 *
42 * 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
43 * 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
44 * はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
45 * 用する者に対して,AUTOSARパートナーになることを求めている.
46 *
47 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
48 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
49 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
50 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
51 * の責任を負わない.
52 *
53 * $Id: prc_config.h 189 2015-06-26 01:54:57Z t_ishikawa $
54 */
55
56/*
57 * プロセッサ依存モジュール(V850用)
58 *
59 * このインクルードファイルは,target_config.h(または,そこからインク
60 * ルードされるファイル)のみからインクルードされる.他のファイルから
61 * 直接インクルードしてはならない
62 */
63
64#ifndef TOPPERS_PRC_CONFIG_H
65#define TOPPERS_PRC_CONFIG_H
66
67#include "prc_sil.h"
68#include "target_mpu.h"
69
70/*
71 * エラーチェック方法の指定
72 */
73/* =begin modified for SC3 */
74#ifndef CHECK_SSTKSZ_ALIGN
75#define CHECK_SSTKSZ_ALIGN UINT_C(4) /* システムスタックサイズのアライン単位 */
76#endif /* CHECK_STKSZ_ALIGN */
77
78#ifndef CHECK_USTKSZ_ALIGN
79#define CHECK_USTKSZ_ALIGN UINT_C(16) /* ユーザスタックサイズのアライン単位 */
80#endif /* CHECK_USTKSZ_ALIGN */
81/* =end modified for SC3 */
82
83#ifndef CHECK_FUNC_ALIGN
84#define CHECK_FUNC_ALIGN UINT_C(2) /* 関数のアライン単位 */
85#endif /* CHECK_FUNC_ALIGN */
86
87#define CHECK_FUNC_NONNULL /* 関数の非NULLチェック */
88
89#ifndef CHECK_STACK_ALIGN
90#define CHECK_STACK_ALIGN UINT_C(4) /* スタック領域のアライン単位 */
91#endif /* CHECK_STACK_ALIGN */
92
93#define CHECK_STACK_NONNULL /* スタック領域の非NULLチェック */
94
95/* =begin modified for SC3 */
96/*
97 * ターゲットで追加するシステムサービステーブル定義
98 */
99#ifndef OTHER_PRC_SVC_TABLE
100#ifdef USE_KERNEL_LIBRARY_SYSLOG
101/* シスログ機能有効時 */
102#define PRC_SVC_TABLE (void *) &call_nontrusted_hook_trap_ret, \
103 (void *) &_kernel_KernelLibrarySyslog
104#define PRC_SVC_NUM 2
105#else /* USE_KERNEL_LIBRARY_SYSLOG */
106/* シスログ機能無効時 */
107#define PRC_SVC_TABLE (void *) &call_nontrusted_hook_trap_ret
108#define PRC_SVC_NUM 1
109#endif /* USE_KERNEL_LIBRARY_SYSLOG */
110#else /* OTHER_PRC_SVC_TABLE */
111#define STR(a) STR_(a)
112#define STR_(a) # a
113#include STR(OTHER_PRC_SVC_TABLE)
114#endif /* OTHER_PRC_SVC_TABLE */
115
116#define TFN_HOOK_RETURN (TMAX_SVCID - PRC_SVC_NUM + 1)
117/*
118 * svcで呼び出す処理の種類
119 * システムサービスの入り口
120 * 非信頼フックの出口
121 */
122#define SYSCALL_SIZE 2
123/* =end modified for SC3 */
124
125#define call_errorhook(ercd, svcid) stack_change_and_call_func_2((void *) &internal_call_errorhook, (ercd), (svcid))
126#define call_shutdownhook(ercd) stack_change_and_call_func_1((void *) &internal_call_shtdwnhk, ((uint32) (ercd)))
127
128/*
129 * 割込み番号の範囲の判定
130 */
131#if TMIN_INTNO == 0
132#define VALID_INTNO(intno) ((intno) <= (InterruptNumberType) (TMAX_INTNO))
133#else /* TMIN_INTNO != 0 */
134#define VALID_INTNO(intno) (((InterruptNumberType) (TMIN_INTNO) <= (intno)) && ((intno) <= (InterruptNumberType) (TMAX_INTNO)))
135#endif /* TMIN_INTNO == 0 */
136
137#ifndef TOPPERS_MACRO_ONLY
138
139/*
140 * 非タスクコンテキスト用のスタック開始アドレス設定マクロ
141 */
142#define TOPPERS_OSTKPT(stk, stksz) ((StackType *) ((sint8 *) (stk) + (stksz)))
143
144/*
145 * プロセッサの特殊命令のインライン関数定義
146 */
147#include <prc_insn.h>
148
149/*
150 * TOPPERS標準割込み処理モデルの実現
151 */
152
153/*
154 * 例外(割込み/CPU例外)のネスト回数のカウント
155 *
156 * コンテキスト参照のために使用
157 */
158extern uint32 except_nest_cnt;
159
160/*
161 * カーネル管理内(カテゴリ2)の割込みを禁止するためのPMRの設定値
162 */
163extern const uint16 pmr_isr2_mask;
164
165/*
166 * カーネル管理外(カテゴリ1)の割込みとなる優先度のPMRのビット
167 */
168extern const uint16 pmr_isr1_mask;
169
170/*
171 * 現在の割込み優先度の値(内部表現)
172 */
173extern uint8 current_iintpri;
174
175/*
176 * 割り込み要求マスクテーブル(PMRへの設定値)
177 */
178extern const uint16 pmr_setting_tbl[];
179
180/*
181 * 無限ループ処理
182 */
183extern void infinite_loop(void) NoReturn;
184
185/* =begin modified for SC3 */
186extern char8 call_nontrusted_hook_trap_ret;
187/* =end modified for SC3 */
188
189/*
190 * 割込み優先度の内部表現と外部表現の変更
191 */
192#ifndef TOPPERS_MACRO_ONLY
193#define EXT_IPM(iipm) ((PriorityType) (iipm - (TNUM_INTPRI))) /* 内部表現を外部表現に */
194#define INT_IPM(ipm) ((uint32) (ipm + (TNUM_INTPRI))) /* 外部表現を内部表現に */
195#else /* TOPPERS_MACRO_ONLY */
196#define EXT_IPM(iipm) (iipm - (TNUM_INTPRI)) /* 内部表現を外部表現に */
197#define INT_IPM(ipm) (ipm + (TNUM_INTPRI)) /* 外部表現を内部表現に */
198#endif /* TOPPERS_MACRO_ONLY */
199
200/*
201 * 全割込み禁止状態への移行
202 */
203LOCAL_INLINE void
204x_lock_all_int(void)
205{
206 disable_int();
207}
208
209/*
210 * 全割込み禁止状態の解除
211 */
212LOCAL_INLINE void
213x_unlock_all_int(void)
214{
215 enable_int();
216}
217
218/*
219 * x_nested_lock_os_int()のネスト回数
220 * アクセスの順序が変化しないよう,volatile を指定
221 */
222extern volatile uint8 nested_lock_os_int_cnt;
223
224/*
225 * OS割込み禁止
226 * API実行時に呼び出される
227 * 割込み優先度マスクがISR2の優先度マスクの範囲より高い状態で呼び出される
228 * ことはない(ISR1から呼び出されることはない)
229 */
230LOCAL_INLINE void
231x_nested_lock_os_int(void)
232{
233 /*
234 * 一段目なら割込みの禁止レベルに設定割込み優先度マスクの値を保存
235 */
236 if (nested_lock_os_int_cnt == 0U) {
237 set_pmr(pmr_isr2_mask); /* OS割り込み禁止に設定 */
238 }
239 nested_lock_os_int_cnt++;
240
241 V850_MEMORY_CHANGED
242}
243
244/*
245 * OS割込み解除
246 * API実行時に呼び出される
247 * 割込み優先度マスクがISR2の優先度マスクの範囲より高い状態で呼び出される
248 * ことはない(ISR1から呼び出されることはない)
249 */
250LOCAL_INLINE void
251x_nested_unlock_os_int(void)
252{
253 V850_MEMORY_CHANGED
254 ASSERT(nested_lock_os_int_cnt > 0U);
255 nested_lock_os_int_cnt--;
256
257 /*
258 * 一番外側なら割込み優先度マスクを更新
259 */
260 if (nested_lock_os_int_cnt == 0U) {
261 set_pmr(pmr_setting_tbl[current_iintpri]);
262 }
263}
264
265/*
266 * SuspendOSInterrupts()から呼び出すOS割込み禁止状態への移行
267 * x_nested_lock_os_int()との違いは,ISR1から呼び出される可能性があるため,
268 * 現在のISPRがOS割込み禁止時の値より小さい場合はISR1から呼び出されたとして,
269 * 何もせずリターンする
270 */
271LOCAL_INLINE void
272x_suspend_lock_os_int(void)
273{
274 uint16 ispr;
275
276 ispr = get_ispr();
277
278 if ((ispr & pmr_isr1_mask) == 0U) {
279 /*
280 * カテゴリ1 ISRから呼ばれた場合は何もしない
281 */
282 if (nested_lock_os_int_cnt == 0U) {
283 set_pmr(pmr_isr2_mask); /* OS割り込み禁止に設定 */
284 }
285 nested_lock_os_int_cnt++;
286 V850_MEMORY_CHANGED
287 }
288}
289
290/*
291 * ResumeOSInterrupts()から呼び出すOS割込み禁止状態の解除
292 * x_nested_lock_os_int()との違いは,ISR1から呼び出される可能性があるため,
293 * 現在のISPRがOS割込み禁止時の値より小さい場合はISR1から呼び出されたとして,
294 * 何もせずリターンする
295 */
296LOCAL_INLINE void
297x_resume_unlock_os_int(void)
298{
299 uint16 ispr;
300
301 V850_MEMORY_CHANGED
302 ispr = get_ispr();
303
304 if ((ispr & pmr_isr1_mask) == 0U) {
305 /*
306 * カテゴリ1 ISRから呼ばれた場合は何もしない
307 */
308 ASSERT(nested_lock_os_int_cnt > 0U);
309 nested_lock_os_int_cnt--;
310
311 /*
312 * 一番外側なら割込み優先度マスクを更新
313 */
314 if (nested_lock_os_int_cnt == 0U) {
315 set_pmr(pmr_setting_tbl[current_iintpri]);
316 }
317 }
318}
319
320
321/*
322 * (モデル上の)割込み優先度マスクの設定
323 *
324 * 本OSでは次の二点が成り立つ
325 * * OS割込み禁止状態で呼び出される
326 * * OS割込み禁止時の優先度より高い値は指定されない
327 * OS割込み禁止はPMRで実現されており,ここでPMRを変更すると,OS割込み禁止
328 * が解除される場合があるため,内部変数(current_iintpri) の変更のみを行う.
329 * 優先度マスクの変更は,APIの出口で呼び出される,x_nested_unlock_os_int()
330 * で実施される.
331 */
332LOCAL_INLINE void
333x_set_ipm(PriorityType intpri)
334{
335 ASSERT(nested_lock_os_int_cnt > 0U);
336
337 current_iintpri = INT_IPM(intpri);
338}
339
340/*
341 * (モデル上の)割込み優先度マスクの参照
342 *
343 * 本OSでは次の点が成り立つ
344 * * OS割込み禁止状態で呼び出される
345 */
346LOCAL_INLINE PriorityType
347x_get_ipm(void)
348{
349 ASSERT(nested_lock_os_int_cnt > 0U);
350 return(EXT_IPM(current_iintpri));
351}
352
353/*
354 * 割込み要求禁止フラグのセット
355 *
356 * 割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止
357 * フラグをクリアしようとした場合には,falseを返す.
358 */
359LOCAL_INLINE boolean
360x_disable_int(InterruptNumberType intno)
361{
362 uint32 eic_address = EIC_ADDRESS(intno);
363
364 if (!VALID_INTNO(intno)) {
365 return(FALSE);
366 }
367
368 /* 割込みの禁止(7bit目をセット) */
369 sil_wrh_mem((void *) eic_address,
370 sil_reh_mem((void *) eic_address) | (0x01U << 7));
371
372 return(TRUE);
373}
374/*
375 * 割込み要求禁止フラグの解除
376 *
377 * 割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止
378 * フラグをクリアしようとした場合には,falseを返す.
379 */
380
381LOCAL_INLINE boolean
382x_enable_int(InterruptNumberType intno)
383{
384 uint32 eic_address = EIC_ADDRESS(intno);
385
386 if (!VALID_INTNO(intno)) {
387 return(FALSE);
388 }
389
390 /* 7bit目をクリア */
391 sil_wrh_mem((void *) eic_address,
392 sil_reh_mem((void *) eic_address) & ~(0x01U << 7));
393
394 return(TRUE);
395}
396
397/*
398 * 割込み要求のクリア
399 */
400LOCAL_INLINE boolean
401x_clear_int(InterruptNumberType intno)
402{
403 uint32 eic_address = EIC_ADDRESS(intno);
404
405 if (!VALID_INTNO(intno)) {
406 return(FALSE);
407 }
408
409 /* 割込みのクリア(12bit目をクリア) */
410 sil_wrh_mem((void *) eic_address,
411 sil_reh_mem((void *) eic_address) & ~(0x01U << 12));
412
413 return(TRUE);
414}
415
416/*
417 * 割込み要求のチェック
418 */
419LOCAL_INLINE boolean
420x_probe_int(InterruptNumberType intno)
421{
422 uint32 eic_address = EIC_ADDRESS(intno);
423 uint16 tmp;
424
425 if (!VALID_INTNO(intno)) {
426 return(FALSE);
427 }
428
429 tmp = sil_reh_mem((void *) (eic_address));
430 return((tmp & 0x1000) != 0);
431}
432
433/*
434 * 割込み要求ラインの属性の設定
435 */
436extern void x_config_int(InterruptNumberType intno, AttributeType intatr, PriorityType intpri);
437
438/*
439 * 割込みハンドラの入り口で必要なIRC操作
440 */
441LOCAL_INLINE void
442i_begin_int(InterruptNumberType intno)
443{
444
445}
446
447/*
448 * 割込みハンドラの出口で必要なIRC操作
449 */
450LOCAL_INLINE void
451i_end_int(InterruptNumberType intno)
452{
453
454}
455
456/*
457 * 未定義の割込みが入った場合の処理
458 */
459extern void default_int_handler(void);
460extern void _start(void);
461extern void prc_hardware_initialize(void);
462
463/*
464 * プロセッサ依存の初期化
465 */
466extern void prc_initialize(void);
467
468/*
469 * プロセッサ依存の終了時処理
470 */
471extern void prc_terminate(void);
472
473/*
474 * タスクディスパッチャ
475 */
476
477/*
478 * 最高優先順位タスクへのディスパッチ(prc_support.S)
479 *
480 * dispatch は,タスクコンテキストから呼び出されたサービスコール処理
481 * 内で,OS割込み禁止状態で呼び出さなければならない
482 */
483extern void dispatch(void);
484
485/*
486 * ディスパッチャの動作開始(prc_support.S)
487 *
488 * start_dispatchは,カーネル起動時に呼び出すべきもので,すべての割込
489 * みを禁止した状態(全割込み禁止状態と同等の状態)で呼び出さなければ
490 * ならない
491 */
492extern void start_dispatch(void) NoReturn;
493
494/*
495 * 現在のコンテキストを捨ててディスパッチ(prc_support.S)
496 *
497 * exit_and_dispatch は,OS割込み禁止状態で呼び出さなければならない
498 */
499extern void exit_and_dispatch(void) NoReturn;
500
501/* =begin added for SC3 */
502/*
503 * 現在のコンテキストを捨ててディスパッチ(prc_support.S)
504 * PosttaskHook を呼ばないエントリ
505 *
506 * exit_and_dispatch_nohook は,OS割込み禁止状態で呼び出さなければならない
507 */
508extern void exit_and_dispatch_nohook(void) NoReturn;
509/* =end added for SC3 */
510
511/*
512 * タスクコンテキストブロックの定義
513 */
514typedef struct task_context_block {
515 /* =begin modified for SC3 */
516 void *ssp; /* システムスタックポインタ */
517 void *usp; /* ユーザスタックポインタ */
518 boolean priv_mode; /* 特権モード実行中か */
519 /* =end modified for SC3 */
520 FunctionRefType pc; /* プログラムカウンタ */
521} TSKCTXB;
522
523/* =begin modified for SC3 */
524/*
525 * タスク初期化コンテキストブロック
526 */
527#define USE_TSKINICTXB /* TSKINICTXBを使用する */
528
529typedef struct task_initialization_context_block {
530 MemorySizeType sstksz; /* スタック領域のサイズ(丸めた値) */
531 void *sstk_bottom; /* スタックポインタの初期値(スタックの底の初期値) */
532 MemorySizeType stksz; /* スタック領域のサイズ(丸めた値) */
533 void *stk_bottom; /* スタックポインタの初期値(スタックの底の初期値) */
534} TSKINICTXB;
535
536/*
537 * スタックのMPU情報
538 */
539typedef struct task_stack_mpu_info_block {
540 uint8 *start_ustk_label;
541 uint8 *limit_ustk_label;
542} STKMPUINFOB;
543
544/*
545 * OSアプリケーションのMPU情報
546 */
547
548#if 0
549typedef struct {
550 uint8 *start_text_label;
551 uint8 *limit_text_label;
552 uint8 *start_rosdata_label;
553 uint8 *limit_rosdata_label;
554 uint8 *start_ram_label;
555 uint8 *limit_ram_label;
556 uint8 *start_sram_label;
557 uint8 *limit_sram_label;
558 uint8 *start_srpw_label;
559 uint8 *limit_srpw_label;
560 uint8 *start_ssrpw_label;
561 uint8 *limit_ssrpw_label;
562} OSAPMPUINFOB_INFO;
563
564typedef struct {
565 OSAPMPUINFOB_INFO *p_osap_mpu_info;
566} OSAPMPUINFOB;
567#else
568typedef struct {
569#ifdef __v850e2v3__
570 uint8 *start_text_label;
571 uint8 *limit_text_label;
572 uint8 *start_rosdata_label;
573 uint8 *limit_rosdata_label;
574 uint8 *start_ram_label;
575 uint8 *limit_ram_label;
576 uint8 *start_sram_label;
577 uint8 *limit_sram_label;
578#endif /* __v850e2v3__ */
579 uint8 *start_srpw_label;
580 uint8 *limit_srpw_label;
581 uint8 *start_ssrpw_label;
582 uint8 *limit_ssrpw_label;
583 uint32 mprc;
584} OSAPMPUINFOB;
585#endif
586/* =end modified for SC3 */
587
588/*
589 * タスクコンテキストの初期化
590 *
591 * タスクが休止状態から実行できる状態に移行する時に呼ばれる.この時点
592 * でスタック領域を使ってはならない
593 *
594 * activate_contextを,インライン関数ではなくマクロ定義としているのは,
595 * この時点ではTCBが定義されていないためである
596 */
597/* =begin modified for SC3 */
598extern void start_stask_r(void);
599extern void start_utask_r(void);
600
601#define activate_context(p_tcb) \
602{\
603 (p_tcb)->tskctxb.ssp = (p_tcb)->p_tinib->tskinictxb.sstk_bottom; \
604 (p_tcb)->tskctxb.pc = ((p_tcb)->p_tinib->p_osapcb->p_osapinib->osap_trusted != FALSE) ? (FunctionRefType)start_stask_r: (FunctionRefType)start_utask_r; \
605 (p_tcb)->tskctxb.priv_mode = 0U; \
606}
607
608#define TOPPERS_SSTK_MAGIC_REGION(p_tinib) ((StackType *) ((uint32)(p_tinib)->tskinictxb.sstk_bottom - (uint32)(p_tinib)->tskinictxb.sstksz))
609/* =end modified for SC3 */
610
611/* 引数の型はハードウェアが扱えるサイズ(uint32)と同サイズを使用 */
612extern void stack_change_and_call_func_1(void *func, uint32 arg1);
613extern void stack_change_and_call_func_2(void *func, uint8 arg1, uint8 arg2);
614
615#ifdef ENABLE_RETURN_MAIN
616/*
617 * AKTSP用のmain()へのリターンコード(prc_support.S)
618 */
619extern void return_main(void);
620#endif /* ENABLE_RETURN_MAIN */
621
622/* =begin modified for SC3 */
623#define call_protectionhk_main_stkchg(ercd) stack_change_and_call_func_1((void *) &call_protectionhk_main, ((uint32) (ercd)))
624
625extern AccessType probe_nthkstk(const MemoryStartAddressType start, const MemoryStartAddressType end);
626extern void cancel_nontrusted_hook(void);
627extern void call_nontrusted_hook(void *hook, StatusType arg, uint32 HookType);
628#if 0
629extern void exit_nontrusted_shutdown_hook(void) NoReturn;
630#endif
631extern void exit_nontrusted_hook(void) NoReturn;
632
633extern void call_trusted_hook(void *hook, StatusType arg);
634extern void exit_trusted_shutdown_hook(void) NoReturn;
635extern StatusType trustedfunc_stack_check(MemorySizeType size);
636extern StatusType no_support_service(void);
637
638/*
639 * 非信頼フックルーチンを実行する前のシステムスタックのスタックポインタ
640 */
641extern uint32 hook_savedsp;
642
643extern uint32 shutdown_hook_savedsp;
644
645extern uint32 trusted_hook_savedsp;
646
647/*
648 * OS割込み禁止時のstatus.ILへの設定値
649 */
650extern const uint32 tmin_status_il;
651
652/*
653 * x_nested_lock_os_int()のネスト回数
654 * アクセスの順序が変化しないよう,volatile を指定
655 */
656extern volatile uint8 nested_lock_os_int_cnt;
657
658LOCAL_INLINE void
659x_clear_nested_os_int(void)
660{
661 ASSERT(nested_lock_os_int_cnt > 0U);
662 nested_lock_os_int_cnt = 1U;
663}
664
665/*
666 * 非信頼フックルーチンの実行中か
667 */
668LOCAL_INLINE boolean
669is_running_nontrusted_hook(void)
670{
671 return(hook_savedsp != 0U);
672}
673
674/*
675 * 非信頼シャットダウンフックの実行中か
676 */
677LOCAL_INLINE boolean
678is_running_nontrusted_shtdwnhk(void)
679{
680 return(shutdown_hook_savedsp != 0U);
681}
682
683#define check_address_sstack(base, size, p_tinib) (check_address_stack(base, size, (const MemoryStartAddressType)((uint32)(p_tinib)->tskinictxb.sstk_bottom - (uint32)(p_tinib)->tskinictxb.sstksz), (p_tinib)->tskinictxb.sstksz))
684#define check_address_ustack(base, size, p_tinib) (check_address_stack(base, size, (const MemoryStartAddressType)((uint32)(p_tinib)->tskinictxb.stk_bottom - (uint32)(p_tinib)->tskinictxb.stksz), (p_tinib)->tskinictxb.stksz))
685
686/* =end modified for SC3 */
687
688#endif /* TOPPERS_MACRO_ONLY */
689
690/* =begin modified for SC3 */
691/*
692 * syscallのパラメータ
693 */
694#define NO_SVC 1 /* サービスコール呼び出し時のsvcの引数 */
695#define NO_HOOK_RET 2 /* 非信頼フックからのリターン時のsvcの引数 */
696
697#ifdef USE_KERNEL_LIBRARY_SYSLOG
698#include "prc_syslog.h"
699#endif /* USE_KERNEL_LIBRARY_SYSLOG */
700/* =end modified for SC3 */
701
702#endif /* TOPPERS_PRC_CONFIG_H */
Note: See TracBrowser for help on using the repository browser.