OSDN Git Service

(none)
[hos/hos-v4a.git] / aplfw / system / sysapi / sysapi.h
1 /** 
2  *  Hyper Operating System  Application Framework
3  *
4  * @file  system.h
5  * @brief %jp{システム用API定義}
6  *
7  * Copyright (C) 2006 by Project HOS
8  * http://sourceforge.jp/projects/hos/
9  */
10
11
12 /* ITRONをマイクロカーネルとして、依存性はこのモジュールで極力隠蔽する */
13 /* いわゆるシステムモード(デバドラとか)のみに許すAPIを定義する */
14 /* ユーザーモード用APIは別途作成予定 */
15
16
17 #ifndef __HOS__sysapi_h__
18 #define __HOS__sysapi_h__
19
20
21 #include "system/type/type.h"
22 #include "library/container/memif/memif.h"
23
24
25 /* プロセスハンドル(システム用) */
26 #define SYSPRC_HANDLE_NULL                      (0)
27 typedef void* SYSPRC_HANDLE;
28
29 /* ミューテックスハンドル(システム用) */
30 #define SYSMTX_HANDLE_NULL                      (0)
31 typedef void* SYSMTX_HANDLE;
32
33 /* イベントハンドル(システム用) */
34 #define SYSEVT_HANDLE_NULL                      (0)
35 typedef void* SYSEVT_HANDLE;
36
37 /* 割込みサービスルーチンハンドル(システム用) */
38 #define SYSISR_HANDLE_NULL                      (0)
39 typedef void* SYSISR_HANDLE;
40
41 /* プロセス属性(システム用) */
42 #define SYSPRC_ATTR_NORMAL                      0x00
43
44 /* イベント属性(システム用) */
45 #define SYSEVT_ATTR_NORMAL                      0x00
46 #define SYSEVT_ATTR_AUTOCLEAR           0x01
47
48 /* ミューテックス属性(システム用) */
49 #define SYSMTX_ATTR_NORMAL                      0x00
50
51
52
53 #ifdef __cplusplus
54 extern "C" {
55 #endif
56
57 /* 初期化 */
58 void           SysApi_Initialize(void *pMem, MEMSIZE lSize);            /**< システムの初期化処理 */
59
60 /* システム状態取得 */
61 int            SysCtx_IsIsr(void);                                                                      /**< ISRコンテキストかどうか調べる(システム用) */
62
63 /* システムロック */
64 void           SysLoc_Lock(void);                                                                       /**< システム全体のロック(システム用) */
65 void           SysLok_Unlock(void);                                                                     /**< システム全体のロック解除(システム用) */
66
67 /* システム用メモリ制御API */
68 void          *SysMem_Alloc(MEMSIZE Size);                                                      /**< メモリの割り当て(システム用) */
69 void          *SysMem_ReAlloc(void *pMem, MEMSIZE Size);                        /**< メモリの再割り当て(システム用) */
70 void           SysMem_Free(void *pMem);                                                         /**< メモリの返却(システム用) */
71 MEMSIZE        SysMem_GetSize(void *pMem);                                                      /**< メモリのサイズ取得(システム用) */
72 C_MEMIF       *SysMem_GetMemIf(void);                                                           /**< メモリインターフェースの取得(システム用) */
73
74 /* システム用割り込み制御API */
75 void           SysInt_Enable(int iIntNum);                                                      /**< 割込み許可(システム用) */
76 void           SysInt_Disable(int iIntNum);                                                     /**< 割込み禁止(システム用) */
77 void           SysInt_Clear(int iIntNum);                                                       /**< 割込み要因クリア(システム用) */
78
79 /* 割り込みサービスルーチン制御API */
80 SYSISR_HANDLE  SysIsr_Create(int iIntNum, void (*pfncIsr)(VPARAM Param), VPARAM Param);
81 void           SysIsr_Delete(SYSISR_HANDLE hIsr);
82
83 /* システム用プロセス制御API */
84 SYSPRC_HANDLE  SysPrc_Create(void (*pfncEntry)(VPARAM Param), VPARAM Param, MEMSIZE StackSize, int Priority, int iAttr);
85                                                                                                                                         /**< プロセス生成(システム用) */
86 void           SysPrc_Delete(SYSPRC_HANDLE hPrc);                                       /**< プロセス削除(システム用) */
87 VPARAM         SysPrc_GetParam(SYSPRC_HANDLE hPrc);                                     /**< プロセスのパラメータ取得(システム用) */
88
89 void           SysPrc_Terminate(SYSPRC_HANDLE hPrc);                            /**< プロセス終了(システム用) */
90 void           SysPrc_Suspend(SYSPRC_HANDLE hPrc);                                      /**< プロセス強制停止(システム用) */                       
91 void           SysPrc_Resume(SYSPRC_HANDLE hPrc);                                       /**< プロセス強制停止解除(システム用) */ 
92 void           SysPrc_Signal(SYSPRC_HANDLE hPrc, VPARAM Signal);                /**< プロセスへのシグナル送信(システム用) */
93 void           SysPrc_SetSignalHandler(SYSPRC_HANDLE hPrc, void (*pfncHanler)(VPARAM Signal));
94                                                                                                                                         /**< プロセスへのシグナルハンドラ登録(システム用) */
95 SYSPRC_HANDLE  SysPrc_GetCurrentHandle(void);                                           /**< 現在のプロセスの取得(システム用) */
96
97
98 /* システム用ミューテックス制御API */
99 SYSMTX_HANDLE  SysMtx_Create(int iAttr);                                                        /**< システム用ミューテックス生成(システム用) */
100 void           SysMtx_Delete(SYSMTX_HANDLE hMtx);                                       /**< システム用ミューテックス削除(システム用) */
101 void           SysMtx_Lock(SYSMTX_HANDLE hMtx);                                         /**< システム用ミューテックスロック(システム用) */
102 void           SysMtx_Unlock(SYSMTX_HANDLE hMtx);                                       /**< システム用ミューテックスロック解除(システム用) */
103
104 /* システム用イベント制御API */
105 SYSEVT_HANDLE  SysEvt_Create(int iAttr);                                                        /**< システム用イベント生成(システム用) */
106 void           SysEvt_Delete(SYSEVT_HANDLE hEvt);                                       /**< システム用イベント削除(システム用) */
107 void           SysEvt_Wait(SYSEVT_HANDLE hEvt);                                         /**< システム用イベント待ち(システム用) */
108 void           SysEvt_Set(SYSEVT_HANDLE hEvt);                                          /**< システム用イベントセット(システム用) */
109 void           SysEvt_Clear(SYSEVT_HANDLE hEvt);                                        /**< システム用イベントクリア(システム用) */
110
111 /* 時間管理 */
112 void           SysTim_Wait(unsigned long ulTime);                                       /**< 時間待ち */
113 TIME           SysTim_GetCurrentTime(void);                                                     /**< 現在のシステム時刻取得 */
114
115
116 /* I/Oアクセス */
117 #ifdef __HOSAPLFW_IOMAPEDIO
118 /* I/OマップドI/O  */
119 unsigned char  SysIo_OutPortB(unsigned int Port, unsigned char Data);
120 unsigned short SysIo_OutPortH(unsigned int Port, unsigned short Data);
121 unsigned long  SysIo_OutPortW(unsigned int Port, unsigned long Data);
122 unsigned char  SysIo_InPortB(unsigned int Port);
123 unsigned short SysIo_InPortH(unsigned int Port);
124 unsigned long  SysIo_InPortW(unsigned int Port);
125 #else
126 /* メモリマップドI/O */
127 #define        SysIo_OutPortB(Port, Data)       (*(unsigned char *)(Port) = (unsigned char)(Data))
128 #define        SysIo_OutPortH(Port, Data)       (*(unsigned short *)(Port) = (unsigned short)(Data))
129 #define        SysIo_OutPortW(Port, Data)       (*(unsigned long *)(Port) = (unsigned long)(Data))
130 #define        SysIo_InPortB(Port)                      (*(unsigned char *)(Port))
131 #define        SysIo_InPortH(Port)                      (*(unsigned short *)(Port))
132 #define        SysIo_InPortW(Port)                      (*(unsigned long *)(Port))
133 #endif
134
135
136 #ifdef __cplusplus
137 }
138 #endif
139
140
141 #endif
142