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: 29160 $
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         DESCRIPTION_INVALID_TAG                         = 47,
83         DESCRIPTION_INVALID_FORMAT                      = 48,
84         DESCRIPTION_OTHER_HANDLE                        = 49,
85         DESCRIPTION_FAILED_TO_ALLOCATE_ADDRESS_ARBITER  = 50,
86         DESCRIPTION_EXCEED_ADDRESS_ARBITER_LIMIT        = 51,
87 
88         DESCRIPTION_OBSOLETE_RESULT                     = 1023      //!< Obsolete できるだけ早く他のエラーに修正すべき。
89     };
90 
91     NN_DEFINE_RESULT_FUNC_LM(
92         MakePermanentResult,
93         Result::LEVEL_PERMANENT, Result::MODULE_NN_FND
94     );
95 
96     NN_DEFINE_RESULT_CONST(
97         ResultNoRunnableProcessor,
98         Result::LEVEL_USAGE, Result::SUMMARY_INVALID_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_NO_RUNNABLE_PROCESSOR
99     );
100 
101     NN_DEFINE_RESULT_CONST(
102         ResultNoSession,
103         Result::LEVEL_PERMANENT, Result::SUMMARY_WOULD_BLOCK, Result::MODULE_NN_OS, DESCRIPTION_NO_SESSION
104     );
105 
106     NN_DEFINE_RESULT_CONST(
107         ResultAlreadyInitialized,
108         Result::LEVEL_INFO, Result::SUMMARY_INVALID_STATE, Result::MODULE_NN_OS, nn::Result::DESCRIPTION_ALREADY_INITIALIZED
109     );
110 
111     NN_DEFINE_RESULT_CONST_LM(
112         ResultInvalidTLSIndex,
113         MakePermanentResult, Result::SUMMARY_INVALID_ARGUMENT, DESCRIPTION_INVALID_TLS_INDEX
114     );
115 
116     NN_DEFINE_RESULT_CONST_LM(
117         ResultOutOfMemory,
118         MakePermanentResult, Result::SUMMARY_OUT_OF_RESOURCE, nn::Result::DESCRIPTION_OUT_OF_MEMORY
119     );
120 
121     NN_DEFINE_RESULT_FUNC_LSM(
122         MakeResultInvalidArgument,
123         Result::LEVEL_PERMANENT, Result::SUMMARY_INVALID_ARGUMENT, Result::MODULE_NN_OS
124     );
125 
126     NN_DEFINE_RESULT_FUNC_LSM(
127         MakeResultWrongArgument,
128         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS
129     );
130 
131     NN_DEFINE_RESULT_CONST(
132         ResultNotImplemented,
133         Result::LEVEL_USAGE, Result::SUMMARY_NOT_SUPPORTED, Result::MODULE_NN_OS, nn::Result::DESCRIPTION_NOT_IMPLEMENTED
134     );
135 
136     NN_DEFINE_RESULT_CONST_LM(
137         ResultResourceLimitAlreadyAttached,
138         MakePermanentResult, Result::SUMMARY_INVALID_STATE, nn::Result::DESCRIPTION_ALREADY_INITIALIZED
139     );
140 
141     NN_DEFINE_RESULT_CONST_LM(
142         ResultMaxHandle,
143         MakePermanentResult, Result::SUMMARY_OUT_OF_RESOURCE, DESCRIPTION_MAX_HANDLE
144     );
145 
146     NN_DEFINE_RESULT_CONST_LM(
147         ResultResourceLimitNotAttached,
148         MakePermanentResult, Result::SUMMARY_INVALID_STATE, nn::Result::DESCRIPTION_NOT_INITIALIZED
149     );
150 
151     NN_DEFINE_RESULT_CONST(
152         ResultMisalignedAddress,
153         Result::LEVEL_USAGE, Result::SUMMARY_INVALID_ARGUMENT, Result::MODULE_NN_OS, nn::Result::DESCRIPTION_MISALIGNED_ADDRESS
154     );
155 
156     NN_DEFINE_RESULT_CONST(
157         ResultMisalignedSize,
158         Result::LEVEL_USAGE, Result::SUMMARY_INVALID_ARGUMENT, Result::MODULE_NN_OS, nn::Result::DESCRIPTION_MISALIGNED_SIZE
159     );
160 
161     NN_DEFINE_RESULT_CONST(
162         ResultInvalidAddress,
163         Result::LEVEL_USAGE, Result::SUMMARY_INVALID_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_INVALID_ADDRESS
164     );
165 
166     NN_DEFINE_RESULT_CONST(
167         ResultInvalidCombination,
168         Result::LEVEL_USAGE, Result::SUMMARY_INVALID_ARGUMENT, Result::MODULE_NN_OS, nn::Result::DESCRIPTION_INVALID_COMBINATION
169     );
170 
171     NN_DEFINE_RESULT_CONST(
172         ResultBusy,
173         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, nn::Result::DESCRIPTION_BUSY
174     );
175 
176     NN_DEFINE_RESULT_CONST(
177         ResultTooLongName,
178         Result::LEVEL_USAGE, Result::SUMMARY_INVALID_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_TOO_LONG_NAME
179     );
180 
181     NN_DEFINE_RESULT_CONST(
182         ResultInaccessiblePage,
183         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_INACCESSIBLE_PAGE
184     );
185 
186     NN_DEFINE_RESULT_CONST(
187         ResultNotFound,
188         Result::LEVEL_PERMANENT, Result::SUMMARY_NOT_FOUND, Result::MODULE_NN_OS, nn::Result::DESCRIPTION_NOT_FOUND
189     );
190 
191     NN_DEFINE_RESULT_CONST(
192         ResultInvalidHandle,
193         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_INVALID_HANDLE
194     );
195 
196     NN_DEFINE_RESULT_CONST(
197         ResultInvalidThreadId,
198         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_INVALID_THREAD_ID
199     );
200 
201     NN_DEFINE_RESULT_CONST(
202         ResultNoData,
203         Result::LEVEL_PERMANENT, Result::SUMMARY_INVALID_STATE, Result::MODULE_NN_OS, DESCRIPTION_NO_DATA
204     );
205 
206     NN_DEFINE_RESULT_CONST(
207         ResultOutOfRange,
208         Result::LEVEL_USAGE, Result::SUMMARY_INVALID_ARGUMENT, Result::MODULE_NN_OS, nn::Result::DESCRIPTION_OUT_OF_RANGE
209     );
210 
211     NN_DEFINE_RESULT_CONST(
212         ResultInvalidProcessId,
213         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_INVALID_PROCESS_ID
214     );
215 
216     NN_DEFINE_RESULT_CONST(
217         ResultAlreadyExists,
218         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, nn::Result::DESCRIPTION_ALREADY_EXISTS
219     );
220 
221     NN_DEFINE_RESULT_CONST(
222         ResultSessionClosed,
223         Result::LEVEL_STATUS, Result::SUMMARY_CANCELLED, Result::MODULE_NN_OS, DESCRIPTION_SESSION_CLOSED
224     );
225 
226     NN_DEFINE_RESULT_CONST(
227         ResultNotAuthorized,
228         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, nn::Result::DESCRIPTION_NOT_AUTHORIZED
229     );
230 
231     NN_DEFINE_RESULT_CONST(
232         ResultDeliverArgNotReady,
233         Result::LEVEL_USAGE, Result::SUMMARY_INVALID_STATE, Result::MODULE_NN_OS, DESCRIPTION_DELIVER_ARG_NOT_READY
234     );
235 
236     NN_DEFINE_RESULT_CONST(
237         ResultDeliverArgOverSize,
238         Result::LEVEL_USAGE, Result::SUMMARY_INVALID_STATE, Result::MODULE_NN_OS, DESCRIPTION_DELIVER_ARG_OVER_SIZE
239     );
240 
241     NN_DEFINE_RESULT_CONST(
242         ResultInvalidDeliverArg,
243         Result::LEVEL_PERMANENT, Result::SUMMARY_INVALID_STATE, Result::MODULE_NN_OS, DESCRIPTION_INVALID_DELIVER_ARG
244     );
245 
246     NN_DEFINE_RESULT_CONST(
247         ResultIAmOwner,
248         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_I_AM_OWNER
249     );
250 
251     NN_DEFINE_RESULT_CONST(
252         ResultExceedsSharedLimit,
253         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_EXCEEDS_SHARED_LIMIT
254     );
255 
256     NN_DEFINE_RESULT_CONST(
257         ResultUnexpectedPermission,
258         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_UNEXPECTED_PERMISSION
259     );
260 
261     NN_DEFINE_RESULT_CONST(
262         ResultInvalidTag,
263         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_INVALID_TAG
264     );
265 
266     NN_DEFINE_RESULT_CONST(
267         ResultInvalidFormat,
268         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_INVALID_FORMAT
269     );
270 
271     NN_DEFINE_RESULT_CONST(
272         ResultOtherHandle,
273         Result::LEVEL_PERMANENT, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_OS, DESCRIPTION_OTHER_HANDLE
274     );
275 
276 
277 
278 
279     NN_DEFINE_RESULT_CONST(
280         ResultFailedToAllocateMemory,
281         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_FAILED_TO_ALLOCATE_MEMORY
282     );
283 
284     NN_DEFINE_RESULT_CONST(
285         ResultFailedToAllocateSharedMemory,
286         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_FAILED_TO_ALLOCATE_SHARED_MEMORY
287     );
288 
289     NN_DEFINE_RESULT_CONST(
290         ResultFailedToAllocateThread,
291         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_FAILED_TO_ALLOCATE_THREAD
292     );
293 
294     NN_DEFINE_RESULT_CONST(
295         ResultFailedToAllocateMutex,
296         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_FAILED_TO_ALLOCATE_MUTEX
297     );
298 
299     NN_DEFINE_RESULT_CONST(
300         ResultFailedToAllocateSemaphore,
301         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_FAILED_TO_ALLOCATE_SEMAPHORE
302     );
303 
304     NN_DEFINE_RESULT_CONST(
305         ResultFailedToAllocateEvent,
306         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_FAILED_TO_ALLOCATE_EVENT
307     );
308 
309     NN_DEFINE_RESULT_CONST(
310         ResultFailedToAllocateTimer,
311         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_FAILED_TO_ALLOCATE_TIMER
312     );
313 
314     NN_DEFINE_RESULT_CONST(
315         ResultFailedToAllocatePort,
316         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_FAILED_TO_ALLOCATE_PORT
317     );
318 
319     NN_DEFINE_RESULT_CONST(
320         ResultFailedToAllocateSession,
321         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_FAILED_TO_ALLOCATE_SESSION
322     );
323 
324     NN_DEFINE_RESULT_CONST(
325         ResultExceedMemoryLimit,
326         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_EXCEED_MEMORY_LIMIT
327     );
328 
329     NN_DEFINE_RESULT_CONST(
330         ResultExceedSharedMemoryLimit,
331         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_EXCEED_SHARED_MEMORY_LIMIT
332     );
333 
334     NN_DEFINE_RESULT_CONST(
335         ResultExceedThreadLimit,
336         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_EXCEED_THREAD_LIMIT
337     );
338 
339     NN_DEFINE_RESULT_CONST(
340         ResultExceedMutexLimit,
341         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_EXCEED_MUTEX_LIMIT
342     );
343 
344     NN_DEFINE_RESULT_CONST(
345         ResultExceedSemaphoreLimit,
346         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_EXCEED_SEMAPHORE_LIMIT
347     );
348 
349     NN_DEFINE_RESULT_CONST(
350         ResultExceedEventLimit,
351         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_EXCEED_EVENT_LIMIT
352     );
353 
354     NN_DEFINE_RESULT_CONST(
355         ResultExceedTimerLimit,
356         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_EXCEED_TIMER_LIMIT
357     );
358 
359     NN_DEFINE_RESULT_CONST(
360         ResultExceedPortLimit,
361         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_EXCEED_PORT_LIMIT
362     );
363 
364     NN_DEFINE_RESULT_CONST(
365         ResultExceedSessionLimit,
366         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_EXCEED_SESSION_LIMIT
367     );
368 
369     NN_DEFINE_RESULT_CONST(
370         ResultFailedToAllocateAddressArbiter,
371         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_FAILED_TO_ALLOCATE_ADDRESS_ARBITER
372     );
373 
374     NN_DEFINE_RESULT_CONST(
375         ResultExceedAddressArbiterLimit,
376         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_OS, DESCRIPTION_EXCEED_ADDRESS_ARBITER_LIMIT
377     );
378 }}
379 
380 #endif // __cplusplus
381 
382 #endif /* NN_OS_OS_RESULT_H_ */
383