2 * Hyper Operating System Application Framework
5 * @brief %jp{システム用API定義}
7 * Copyright (C) 2006 by Project HOS
8 * http://sourceforge.jp/projects/hos/
12 /* ITRONをマイクロカーネルとして、依存性はこのモジュールで極力隠蔽する */
13 /* いわゆるシステムモード(デバドラとか)のみに許すAPIを定義する */
14 /* ユーザーモード用APIは別途作成予定 */
17 #ifndef __HOS__sysapi_h__
18 #define __HOS__sysapi_h__
21 #include "system/type/type.h"
22 #include "library/container/memif/memif.h"
26 #define SYSPRC_HANDLE_NULL (0)
27 typedef void* SYSPRC_HANDLE;
29 /* ミューテックスハンドル(システム用) */
30 #define SYSMTX_HANDLE_NULL (0)
31 typedef void* SYSMTX_HANDLE;
34 #define SYSEVT_HANDLE_NULL (0)
35 typedef void* SYSEVT_HANDLE;
37 /* 割込みサービスルーチンハンドル(システム用) */
38 #define SYSISR_HANDLE_NULL (0)
39 typedef void* SYSISR_HANDLE;
42 #define SYSPRC_ATTR_NORMAL 0x00
45 #define SYSEVT_ATTR_NORMAL 0x00
46 #define SYSEVT_ATTR_AUTOCLEAR 0x01
48 /* ミューテックス属性(システム用) */
49 #define SYSMTX_ATTR_NORMAL 0x00
58 void SysApi_Initialize(void *pMem, MEMSIZE lSize); /**< システムの初期化処理 */
61 int SysCtx_IsIsr(void); /**< ISRコンテキストかどうか調べる(システム用) */
64 void SysLoc_Lock(void); /**< システム全体のロック(システム用) */
65 void SysLok_Unlock(void); /**< システム全体のロック解除(システム用) */
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); /**< メモリインターフェースの取得(システム用) */
75 void SysInt_Enable(int iIntNum); /**< 割込み許可(システム用) */
76 void SysInt_Disable(int iIntNum); /**< 割込み禁止(システム用) */
77 void SysInt_Clear(int iIntNum); /**< 割込み要因クリア(システム用) */
79 /* 割り込みサービスルーチン制御API */
80 SYSISR_HANDLE SysIsr_Create(int iIntNum, void (*pfncIsr)(VPARAM Param), VPARAM Param);
81 void SysIsr_Delete(SYSISR_HANDLE hIsr);
84 SYSPRC_HANDLE SysPrc_Create(void (*pfncEntry)(VPARAM Param), VPARAM Param, MEMSIZE StackSize, int Priority, int iAttr);
86 void SysPrc_Delete(SYSPRC_HANDLE hPrc); /**< プロセス削除(システム用) */
87 VPARAM SysPrc_GetParam(SYSPRC_HANDLE hPrc); /**< プロセスのパラメータ取得(システム用) */
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); /**< 現在のプロセスの取得(システム用) */
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); /**< システム用ミューテックスロック解除(システム用) */
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); /**< システム用イベントクリア(システム用) */
112 void SysTim_Wait(unsigned long ulTime); /**< 時間待ち */
113 TIME SysTim_GetCurrentTime(void); /**< 現在のシステム時刻取得 */
117 #ifdef __HOSAPLFW_IOMAPEDIO
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);
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))