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