1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     os_Result.h
4 
5   Copyright (C)2009 Nintendo Co., Ltd.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Rev: 23765 $
14  *---------------------------------------------------------------------------*/
15 /*!
16     @file
17 
18     :include nn/os.h
19  */
20 
21 #ifndef NN_OS_OS_RESULT_H_
22 #define NN_OS_OS_RESULT_H_
23 
24 #ifdef __cplusplus
25 
26 #include <nn/Result.h>
27 
28 namespace nn { namespace os {
29 
30     /*!
31         @enum Description
32 
33         @brief エラーの詳細を示します。
34     */
35     enum Description
36     {
37         DESCRIPTION_FAILED_TO_ALLOCATE_MEMORY           = 1,        //!< 物理メモリの上限に達した
38         DESCRIPTION_FAILED_TO_ALLOCATE_SHARED_MEMORY    = 2,        //!< 共有メモリの上限に達した
39         DESCRIPTION_FAILED_TO_ALLOCATE_THREAD           = 3,        //!< スレッドの上限に達した
40         DESCRIPTION_FAILED_TO_ALLOCATE_MUTEX            = 4,        //!< Mutex の上限に達した
41         DESCRIPTION_FAILED_TO_ALLOCATE_SEMAPHORE        = 5,        //!< セマフォの上限に達した
42         DESCRIPTION_FAILED_TO_ALLOCATE_EVENT            = 6,        //!< イベントの上限に達した
43         DESCRIPTION_FAILED_TO_ALLOCATE_TIMER            = 7,        //!< タイマの上限に達した
44         DESCRIPTION_FAILED_TO_ALLOCATE_PORT             = 8,        //!< ポートの上限に達した
45         DESCRIPTION_FAILED_TO_ALLOCATE_SESSION          = 9,        //!< セッションの上限に達した
46         DESCRIPTION_EXCEED_MEMORY_LIMIT                 = 10,       //!< 物理メモリの割り当て制限に達した
47         DESCRIPTION_EXCEED_SHARED_MEMORY_LIMIT          = 11,       //!< 共有メモリの割り当て制限に達した
48         DESCRIPTION_EXCEED_THREAD_LIMIT                 = 12,       //!< スレッドの割り当て制限に達した
49         DESCRIPTION_EXCEED_MUTEX_LIMIT                  = 13,       //!< Mutex の割り当て制限に達した
50         DESCRIPTION_EXCEED_SEMAPHORE_LIMIT              = 14,       //!< セマフォの割り当て制限に達した
51         DESCRIPTION_EXCEED_EVENT_LIMIT                  = 15,       //!< イベントの割り当て制限に達した
52         DESCRIPTION_EXCEED_TIMER_LIMIT                  = 16,       //!< タイマの割り当て制限に達した
53         DESCRIPTION_EXCEED_PORT_LIMIT                   = 17,       //!< ポートの割り当て制限に達した
54         DESCRIPTION_EXCEED_SESSION_LIMIT                = 18,       //!< セッションの割り当て制限に達した
55         DESCRIPTION_MAX_HANDLE                          = 19,       //!< ハンドルの最大数に達した
56         DESCRIPTION_INACCESSIBLE_PAGE                   = 20,       //!< アクセスできないページが含まれている
57         DESCRIPTION_ABANDONED                           = 21,       //!< オブジェクトが放棄された
58         DESCRIPTION_INVALID_ADDRESS                     = 22,       //!< 不正なアドレス
59         DESCRIPTION_INVALID_HANDLE                      = 23,       //!< 不正なハンドル
60         DESCRIPTION_INVALID_PROCESS_ID                  = 24,       //!< 正しくないプロセス ID
61         DESCRIPTION_INVALID_THREAD_ID                   = 25,       //!< 正しくないスレッド ID
62         DESCRIPTION_SESSION_CLOSED                      = 26,       //!< セッションが閉じられた
63         DESCRIPTION_INVALID_MESSAGE                     = 28,       //!< 正しくないメッセージ
64         DESCRIPTION_MANUAL_RESET_EVENT_REQUIRED         = 29,       //!< 手動リセットイベントが必要
65         DESCRIPTION_TOO_LONG_NAME                       = 30,       //!< 名前が長すぎる
66         DESCRIPTION_NOT_OWNED                           = 31,       //!< 自身が所有していない Mutex
67         DESCRIPTION_PROCESS_TERMINATED                  = 32,       //!< 指定したプロセスは既に終了している
68         DESCRIPTION_INVALID_TLS_INDEX                   = 33,       //!< 確保していない TLS のインデックスが指定された
69         DESCRIPTION_NO_RUNNABLE_PROCESSOR               = 34,       //!< アフィニティマスクが全てのプロセッサでの動作を禁止している。
70         DESCRIPTION_NO_SESSION                          = 35,       //!< 新たに接続したセッションではない。
71         DESCRIPTION_USING_REGION                        = 36,       //!< 利用中の領域
72         DESCRIPTION_ALREADY_RECEIVED                    = 37,       //!< 既に受信している
73         DESCRIPTION_CANCEL_REQUESTD                     = 38,       //
74         DESCRIPTION_NOT_RECEIVED                        = 39,       //
75         DESCRIPTION_NO_DATA                             = 40,       //
76         DESCRIPTION_DELIVER_ARG_NOT_READY               = 41,       //
77         DESCRIPTION_DELIVER_ARG_OVER_SIZE               = 42,       //
78         DESCRIPTION_INVALID_DELIVER_ARG                 = 43,       //
79         DESCRIPTION_I_AM_OWNER                          = 44,       //
80         DESCRIPTION_EXCEEDS_SHARED_LIMIT                = 45,
81         DESCRIPTION_UNEXPECTED_PERMISSION               = 46,
82 
83         DESCRIPTION_OBSOLETE_RESULT                     = 1023      //!< Obsolete できるだけ早く他のエラーに修正すべき。
84     };
85 
86     NN_DEFINE_RESULT_FUNC_LM(
87         MakePermanentResult,
88         Result::LEVEL_PERMANENT, Result::MODULE_NN_FND
89     );
90 
91     NN_DEFINE_RESULT_CONST(
92         ResultNoRunnableProcessor,
93         Result::LEVEL_USAGE, Result::SUMMARY_INVALID_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_NO_RUNNABLE_PROCESSOR
94     );
95 
96     NN_DEFINE_RESULT_CONST(
97         ResultNoSession,
98         Result::LEVEL_PERMANENT, Result::SUMMARY_WOULD_BLOCK, Result::MODULE_NN_OS, DESCRIPTION_NO_SESSION
99     );
100 
101     NN_DEFINE_RESULT_CONST(
102         ResultAlreadyInitialized,
103         Result::LEVEL_INFO, Result::SUMMARY_INVALID_STATE, Result::MODULE_NN_OS, nn::Result::DESCRIPTION_ALREADY_INITIALIZED
104     );
105 
106     NN_DEFINE_RESULT_CONST_LM(
107         ResultInvalidTLSIndex,
108         MakePermanentResult, Result::SUMMARY_INVALID_ARGUMENT, DESCRIPTION_INVALID_TLS_INDEX
109     );
110 
111     NN_DEFINE_RESULT_CONST_LM(
112         ResultOutOfMemory,
113         MakePermanentResult, Result::SUMMARY_OUT_OF_RESOURCE, nn::Result::DESCRIPTION_OUT_OF_MEMORY
114     );
115 
116     NN_DEFINE_RESULT_FUNC_LSM(
117         MakeResultInvalidArgument,
118         Result::LEVEL_PERMANENT, Result::SUMMARY_INVALID_ARGUMENT, Result::MODULE_NN_OS
119     );
120 
121     NN_DEFINE_RESULT_FUNC_LSM(
122         MakeResultWrongArgument,
123         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS
124     );
125 
126     NN_DEFINE_RESULT_CONST(
127         ResultNotImplemented,
128         Result::LEVEL_USAGE, Result::SUMMARY_NOT_SUPPORTED, Result::MODULE_NN_OS, nn::Result::DESCRIPTION_NOT_IMPLEMENTED
129     );
130 
131     NN_DEFINE_RESULT_CONST_LM(
132         ResultResourceLimitAlreadyAttached,
133         MakePermanentResult, Result::SUMMARY_INVALID_STATE, nn::Result::DESCRIPTION_ALREADY_INITIALIZED
134     );
135 
136     NN_DEFINE_RESULT_CONST_LM(
137         ResultMaxHandle,
138         MakePermanentResult, Result::SUMMARY_OUT_OF_RESOURCE, DESCRIPTION_MAX_HANDLE
139     );
140 
141     NN_DEFINE_RESULT_CONST_LM(
142         ResultResourceLimitNotAttached,
143         MakePermanentResult, Result::SUMMARY_INVALID_STATE, nn::Result::DESCRIPTION_NOT_INITIALIZED
144     );
145 
146     NN_DEFINE_RESULT_CONST(
147         ResultMisalignedAddress,
148         Result::LEVEL_USAGE, Result::SUMMARY_INVALID_ARGUMENT, Result::MODULE_NN_OS, nn::Result::DESCRIPTION_MISALIGNED_ADDRESS
149     );
150 
151     NN_DEFINE_RESULT_CONST(
152         ResultMisalignedSize,
153         Result::LEVEL_USAGE, Result::SUMMARY_INVALID_ARGUMENT, Result::MODULE_NN_OS, nn::Result::DESCRIPTION_MISALIGNED_SIZE
154     );
155 
156     NN_DEFINE_RESULT_CONST(
157         ResultFailedToAllocateMemory,
158         Result::LEVEL_PERMANENT, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_FAILED_TO_ALLOCATE_MEMORY
159     );
160 
161     NN_DEFINE_RESULT_CONST(
162         ResultExceedMemoryLimit,
163         Result::LEVEL_PERMANENT, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_EXCEED_MEMORY_LIMIT
164     );
165 
166     NN_DEFINE_RESULT_CONST(
167         ResultExceedSharedMemoryLimit,
168         Result::LEVEL_PERMANENT, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_EXCEED_SHARED_MEMORY_LIMIT
169     );
170 
171     NN_DEFINE_RESULT_CONST(
172         ResultExceedThreadLimit,
173         Result::LEVEL_PERMANENT, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_EXCEED_THREAD_LIMIT
174     );
175 
176     NN_DEFINE_RESULT_CONST(
177         ResultFailedToAllocateThread,
178         Result::LEVEL_PERMANENT, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_FAILED_TO_ALLOCATE_THREAD
179     );
180 
181     NN_DEFINE_RESULT_CONST(
182         ResultFailedToAllocateSession,
183         Result::LEVEL_PERMANENT, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_FAILED_TO_ALLOCATE_SESSION
184     );
185 
186     NN_DEFINE_RESULT_CONST(
187         ResultInvalidAddress,
188         Result::LEVEL_USAGE, Result::SUMMARY_INVALID_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_INVALID_ADDRESS
189     );
190 
191     NN_DEFINE_RESULT_CONST(
192         ResultInvalidCombination,
193         Result::LEVEL_USAGE, Result::SUMMARY_INVALID_ARGUMENT, Result::MODULE_NN_OS, nn::Result::DESCRIPTION_INVALID_COMBINATION
194     );
195 
196     NN_DEFINE_RESULT_CONST(
197         ResultBusy,
198         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, nn::Result::DESCRIPTION_BUSY
199     );
200 
201     NN_DEFINE_RESULT_CONST(
202         ResultTooLongName,
203         Result::LEVEL_USAGE, Result::SUMMARY_INVALID_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_TOO_LONG_NAME
204     );
205 
206     NN_DEFINE_RESULT_CONST(
207         ResultInaccessiblePage,
208         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_INACCESSIBLE_PAGE
209     );
210 
211     NN_DEFINE_RESULT_CONST(
212         ResultNotFound,
213         Result::LEVEL_PERMANENT, Result::SUMMARY_NOT_FOUND, Result::MODULE_NN_OS, nn::Result::DESCRIPTION_NOT_FOUND
214     );
215 
216     NN_DEFINE_RESULT_CONST(
217         ResultInvalidHandle,
218         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_INVALID_HANDLE
219     );
220 
221     NN_DEFINE_RESULT_CONST(
222         ResultInvalidThreadId,
223         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_INVALID_THREAD_ID
224     );
225 
226     NN_DEFINE_RESULT_CONST(
227         ResultNoData,
228         Result::LEVEL_PERMANENT, Result::SUMMARY_INVALID_STATE, Result::MODULE_NN_OS, DESCRIPTION_NO_DATA
229     );
230 
231     NN_DEFINE_RESULT_CONST(
232         ResultOutOfRange,
233         Result::LEVEL_USAGE, Result::SUMMARY_INVALID_ARGUMENT, Result::MODULE_NN_OS, nn::Result::DESCRIPTION_OUT_OF_RANGE
234     );
235 
236     NN_DEFINE_RESULT_CONST(
237         ResultInvalidProcessId,
238         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_INVALID_PROCESS_ID
239     );
240 
241     NN_DEFINE_RESULT_CONST(
242         ResultAlreadyExists,
243         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, nn::Result::DESCRIPTION_ALREADY_EXISTS
244     );
245 
246     NN_DEFINE_RESULT_CONST(
247         ResultSessionClosed,
248         Result::LEVEL_STATUS, Result::SUMMARY_CANCELLED, Result::MODULE_NN_OS, DESCRIPTION_SESSION_CLOSED
249     );
250 
251     NN_DEFINE_RESULT_CONST(
252         ResultNotAuthorized,
253         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, nn::Result::DESCRIPTION_NOT_AUTHORIZED
254     );
255 
256     NN_DEFINE_RESULT_CONST(
257         ResultDeliverArgNotReady,
258         Result::LEVEL_USAGE, Result::SUMMARY_INVALID_STATE, Result::MODULE_NN_OS, DESCRIPTION_DELIVER_ARG_NOT_READY
259     );
260 
261     NN_DEFINE_RESULT_CONST(
262         ResultDeliverArgOverSize,
263         Result::LEVEL_USAGE, Result::SUMMARY_INVALID_STATE, Result::MODULE_NN_OS, DESCRIPTION_DELIVER_ARG_OVER_SIZE
264     );
265 
266     NN_DEFINE_RESULT_CONST(
267         ResultInvalidDeliverArg,
268         Result::LEVEL_PERMANENT, Result::SUMMARY_INVALID_STATE, Result::MODULE_NN_OS, DESCRIPTION_INVALID_DELIVER_ARG
269     );
270 
271     NN_DEFINE_RESULT_CONST(
272         ResultIAmOwner,
273         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_I_AM_OWNER
274     );
275 
276     NN_DEFINE_RESULT_CONST(
277         ResultExceedsSharedLimit,
278         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_EXCEEDS_SHARED_LIMIT
279     );
280 
281     NN_DEFINE_RESULT_CONST(
282         ResultUnexpectedPermission,
283         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_UNEXPECTED_PERMISSION
284     );
285 }}
286 
287 #endif // __cplusplus
288 
289 #endif /* NN_OS_OS_RESULT_H_ */
290