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/memheap/memheap.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 typedef _HOS_UINT64                                     SYSTIM_SYSTIME;
53 typedef _HOS_UINT64                                     SYSTIM_CPUTIME;
54
55
56 #ifdef __cplusplus
57 extern "C" {
58 #endif
59
60 /* 初期化 */
61 void           SysApi_Initialize(void *pMem, MEMSIZE MemSize, MEMSIZE MemAlign, void *pIoMem, MEMSIZE IoMemSize, MEMSIZE IoMemAlign);
62                                                                                                                                                         /**< システムの初期化処理 */
63
64 /* システム状態取得 */
65 int            SysCtx_IsIsr(void);                                                                                      /**< ISRコンテキストかどうか調べる(システム用) */
66
67 /* システムロック */
68 void           SysLoc_Lock(void);                                                                                       /**< システム全体のロック(システム用) */
69 void           SysLok_Unlock(void);                                                                                     /**< システム全体のロック解除(システム用) */
70
71 /* システム用メモリ制御API */
72 void          *SysMem_Alloc(MEMSIZE Size);                                                                      /**< メモリの割り当て(システム用) */
73 void          *SysMem_ReAlloc(void *pMem, MEMSIZE Size);                                        /**< メモリの再割り当て(システム用) */
74 void           SysMem_Free(void *pMem);                                                                         /**< メモリの返却(システム用) */
75 MEMSIZE        SysMem_GetSize(void *pMem);                                                                      /**< メモリのサイズ取得(システム用) */
76 C_MEMHEAP      *SysMem_GetMemHeap(void);                                                                        /**< メモリインターフェースの取得(システム用) */
77
78
79 /* システム用割り込み制御API */
80 void           SysInt_Enable(int iIntNum);                                                                      /**< 割込み許可(システム用) */
81 void           SysInt_Disable(int iIntNum);                                                                     /**< 割込み禁止(システム用) */
82 void           SysInt_Clear(int iIntNum);                                                                       /**< 割込み要因クリア(システム用) */
83 void           SysInt_SetIntTime(int iIntNum, SYSTIM_CPUTIME Time);                     /**< 割込み計測タイマを初期化 */
84 SYSTIM_CPUTIME SysInt_GetIntTime(int iIntNum);                                                          /**< 割込み計測タイマを取得 */
85
86 /* 割り込みサービスルーチン制御API */
87 SYSISR_HANDLE  SysIsr_Create(int iIntNum, void (*pfncIsr)(VPARAM Param), VPARAM Param);
88 void           SysIsr_Delete(SYSISR_HANDLE hIsr);
89
90 /* システム用プロセス制御API */
91 SYSPRC_HANDLE  SysPrc_Create(void (*pfncEntry)(void), VPARAM Param, void *pStack, MEMSIZE StackSize, int Priority, int iAttr);
92                                                                                                                                                         /**< プロセス生成(システム用) */
93 void           SysPrc_Delete(SYSPRC_HANDLE hPrc);                                                       /**< プロセス削除(システム用) */
94 VPARAM         SysPrc_GetParam(SYSPRC_HANDLE hPrc);                                                     /**< プロセスのパラメータ取得(システム用) */
95
96 void           SysPrc_Terminate(SYSPRC_HANDLE hPrc);                                            /**< プロセス終了(システム用) */
97 void           SysPrc_Suspend(SYSPRC_HANDLE hPrc);                                                      /**< プロセス強制停止(システム用) */                       
98 void           SysPrc_Resume(SYSPRC_HANDLE hPrc);                                                       /**< プロセス強制停止解除(システム用) */ 
99 void           SysPrc_Signal(SYSPRC_HANDLE hPrc, VPARAM Signal);                        /**< プロセスへのシグナル送信(システム用) */
100 void           SysPrc_SetSignalHandler(SYSPRC_HANDLE hPrc, void (*pfncHanler)(VPARAM Signal));
101                                                                                                                                                         /**< プロセスへのシグナルハンドラ登録(システム用) */
102 SYSPRC_HANDLE  SysPrc_GetCurrentHandle(void);                                                           /**< 現在のプロセスの取得(システム用) */
103 void           SysPrc_SetExecTime(SYSPRC_HANDLE hPrc, SYSTIM_CPUTIME Time);     /**< プロセス実行時間計測タイマを初期化 */
104 SYSTIM_CPUTIME SysPrc_GetExecTime(SYSPRC_HANDLE hPrc);                                          /**< プロセス実行時間計測タイマを取得 */
105
106 /* システム用ミューテックス制御API */
107 SYSMTX_HANDLE  SysMtx_Create(int iAttr);                                                                        /**< ミューテックス生成(システム用) */
108 void           SysMtx_Delete(SYSMTX_HANDLE hMtx);                                                       /**< ミューテックス削除(システム用) */
109 int            SysMtx_PolingLock(SYSMTX_HANDLE hMtx);                                           /**< ミューテックスポーリングロック(システム用) */
110 void           SysMtx_Lock(SYSMTX_HANDLE hMtx);                                                         /**< ミューテックスロック(システム用) */
111 void           SysMtx_Unlock(SYSMTX_HANDLE hMtx);                                                       /**< ミューテックスロック解除(システム用) */
112 int            SysMtx_RefStatus(SYSMTX_HANDLE hMtx);                                            /**< ミューテックスの状態を取得(システム用) */
113
114 /* システム用イベント制御API */
115 SYSEVT_HANDLE  SysEvt_Create(int iAttr);                                                                        /**< イベント生成(システム用) */
116 void           SysEvt_Delete(SYSEVT_HANDLE hEvt);                                                       /**< イベント削除(システム用) */
117 void           SysEvt_Wait(SYSEVT_HANDLE hEvt);                                                         /**< イベント待ち(システム用) */
118 void           SysEvt_Set(SYSEVT_HANDLE hEvt);                                                          /**< イベントセット(システム用) */
119 void           SysEvt_Clear(SYSEVT_HANDLE hEvt);                                                        /**< イベントクリア(システム用) */
120 int            SysEvt_RefStatus(SYSEVT_HANDLE hEvt);                                            /**< イベントの状態を取得(システム用) */
121
122 /* 時間管理 */
123 void           SysTim_Signal(unsigned long ulTic);                                                      /**< タイムティックを与える(システム用) */
124 void           SysTim_Wait(unsigned long ulTime);                                                       /**< 時間待ち(システム用) */
125 TIME           SysTim_GetCurrentTime(void);                                                                     /**< 現在の時刻取得(システム用) */
126 SYSTIM_SYSTIME SysTim_GetSystemTime(void);                                                                      /**< 現在のシステム時刻取得(システム用) */
127 SYSTIM_CPUTIME SysTim_GetCpuTime(void);                                                                         /**< 現在のCPU時刻取得(システム用) */
128 unsigned long  SysTim_CpuTimeToSecond(SYSTIM_CPUTIME CpuTime);                          /**< CPU時刻を秒に換算(システム用) */
129 unsigned long  SysTim_CpuTimeToNanosecond(SYSTIM_CPUTIME CpuTime);                      /**< CPU時刻をナノ秒に換算(システム用) */
130
131
132 /* I/Oアクセス */
133 #ifdef __HOSAPLFW_IOMAPEDIO
134 /* I/OマップドI/O  */
135 unsigned char  SysIo_InPortB(void *Port);                                                                       /**< I/Oポートからバイト(8bit)入力 */
136 unsigned short SysIo_InPortH(void *Port);                                                                       /**< I/Oポートからハーフワード(16bit)入力 */
137 unsigned long  SysIo_InPortW(void *Port);                                                                       /**< I/Oポートからワード(32bit)入力 */
138 unsigned char  SysIo_OutPortB(void *Port, unsigned char Data);                          /**< I/Oポートへバイト(8bit)出力 */
139 unsigned short SysIo_OutPortH(void *Port, unsigned short Data);                         /**< I/Oポートへハーフワード(16bit)出力 */
140 unsigned long  SysIo_OutPortW(void *Port, unsigned long Data);                          /**< I/Oポートへワード(32bit)出力 */
141 unsigned char  SysIo_AndPortB(void *Port, unsigned char Data);                          /**< I/Oポートをバイト(8bit)単位で論理積 */
142 unsigned short SysIo_AndPortH(void *Port, unsigned short Data);                         /**< I/Oポートをハーフワード(16bit)単位で論理積 */
143 unsigned long  SysIo_AndPortW(void *Port, unsigned long Data);                          /**< I/Oポートをワード(32bit)単位で論理積 */
144 unsigned char  SysIo_OrPortB(void *Port, unsigned char Data);                           /**< I/Oポートをバイト(8bit)単位で論理和 */
145 unsigned short SysIo_OrPortH(void *Port, unsigned short Data);                          /**< I/Oポートをハーフワード(16bit)単位で論理和 */
146 unsigned long  SysIo_OrPortW(void *Port, unsigned long Data);                           /**< I/Oポートをワード(32bit)単位で論理和 */
147 unsigned char  SysIo_XorPortB(void *Port, unsigned char Data);                          /**< I/Oポートをバイト(8bit)単位で排他的論理和 */
148 unsigned short SysIo_XorPortH(void *Port, unsigned short Data);                         /**< I/Oポートをハーフワード(16bit)単位で排他的論理和 */
149 unsigned long  SysIo_XorPortW(void *Port, unsigned long Data);                          /**< I/Oポートをワード(32bit)単位で排他的論理和 */
150 #else
151 /* メモリマップドI/O */
152 #define        SysIo_InPortB(Port)                      (*(volatile unsigned char *)(Port))
153 #define        SysIo_InPortH(Port)                      (*(volatile unsigned short *)(Port))
154 #define        SysIo_InPortW(Port)                      (*(volatile unsigned long *)(Port))
155 #define        SysIo_OutPortB(Port, Data)       (*(volatile unsigned char *)(Port) = (unsigned char)(Data))
156 #define        SysIo_OutPortH(Port, Data)       (*(volatile unsigned short *)(Port) = (unsigned short)(Data))
157 #define        SysIo_OutPortW(Port, Data)       (*(volatile unsigned long *)(Port) = (unsigned long)(Data))
158 #define        SysIo_AndPortB(Port, Data)       (*(volatile unsigned char *)(Port) &= (unsigned char)(Data))
159 #define        SysIo_AndPortH(Port, Data)       (*(volatile unsigned short *)(Port) &= (unsigned short)(Data))
160 #define        SysIo_AndPortW(Port, Data)       (*(volatile unsigned long *)(Port) &= (unsigned long)(Data))
161 #define        SysIo_OrPortB(Port, Data)        (*(volatile unsigned char *)(Port) |= (unsigned char)(Data))
162 #define        SysIo_OrPortH(Port, Data)        (*(volatile unsigned short *)(Port) |= (unsigned short)(Data))
163 #define        SysIo_OrPortW(Port, Data)        (*(volatile unsigned long *)(Port) |= (unsigned long)(Data))
164 #define        SysIo_XorPortB(Port, Data)       (*(volatile unsigned char *)(Port) ^= (unsigned char)(Data))
165 #define        SysIo_XorPortH(Port, Data)       (*(volatile unsigned short *)(Port) ^= (unsigned short)(Data))
166 #define        SysIo_XorPortW(Port, Data)       (*(volatile unsigned long *)(Port) ^= (unsigned long)(Data))
167 #endif
168
169 /* システムによっては特定アドレス範囲にしかDMAが使えなかったり、非キャッシュ領域が必要なので別途設ける */
170 void          *SysIo_AllocIoMem(MEMSIZE Size);                                                          /**< I/O操作に適したメモリの割り当て(システム用) */
171 void           SysIo_FreeIoMem(void *pMem);                                                                     /**< I/O操作に適したメモリの返却(システム用) */
172
173
174 #ifdef __cplusplus
175 }
176 #endif
177
178
179 #endif
180