1 | /* |
---|
2 | * Copyright (c) 2016 embedded brains GmbH. All rights reserved. |
---|
3 | * |
---|
4 | * embedded brains GmbH |
---|
5 | * Dornierstr. 4 |
---|
6 | * 82178 Puchheim |
---|
7 | * Germany |
---|
8 | * <rtems@embedded-brains.de> |
---|
9 | * |
---|
10 | * The license and distribution terms for this file may be |
---|
11 | * found in the file LICENSE in this distribution or at |
---|
12 | * http://www.rtems.org/license/LICENSE. |
---|
13 | */ |
---|
14 | |
---|
15 | #ifndef _RTEMS_SCORE_STATUS_H |
---|
16 | #define _RTEMS_SCORE_STATUS_H |
---|
17 | |
---|
18 | #include <rtems/score/basedefs.h> |
---|
19 | |
---|
20 | #if defined(RTEMS_POSIX_API) |
---|
21 | #include <errno.h> |
---|
22 | #include <pthread.h> |
---|
23 | #endif |
---|
24 | |
---|
25 | #ifdef __cplusplus |
---|
26 | extern "C" { |
---|
27 | #endif /* __cplusplus */ |
---|
28 | |
---|
29 | /** |
---|
30 | * @brief Status code parts for the Classic API. |
---|
31 | * |
---|
32 | * Must be in synchronization with rtems_status_code. |
---|
33 | */ |
---|
34 | typedef enum { |
---|
35 | STATUS_CLASSIC_INCORRECT_STATE = 14, |
---|
36 | STATUS_CLASSIC_INTERNAL_ERROR = 13, |
---|
37 | STATUS_CLASSIC_INVALID_NUMBER = 10, |
---|
38 | STATUS_CLASSIC_INVALID_PRIORITY = 19, |
---|
39 | STATUS_CLASSIC_INVALID_SIZE = 8, |
---|
40 | STATUS_CLASSIC_NO_MEMORY = 26, |
---|
41 | STATUS_CLASSIC_NOT_DEFINED = 11, |
---|
42 | STATUS_CLASSIC_NOT_OWNER_OF_RESOURCE = 23, |
---|
43 | STATUS_CLASSIC_OBJECT_WAS_DELETED = 7, |
---|
44 | STATUS_CLASSIC_RESOURCE_IN_USE = 12, |
---|
45 | STATUS_CLASSIC_SUCCESSFUL = 0, |
---|
46 | STATUS_CLASSIC_TIMEOUT = 6, |
---|
47 | STATUS_CLASSIC_TOO_MANY = 5, |
---|
48 | STATUS_CLASSIC_UNSATISFIED = 13 |
---|
49 | } Status_Classic; |
---|
50 | |
---|
51 | /** |
---|
52 | * @brief Macro to build a status code from Classic and POSIX API parts. |
---|
53 | */ |
---|
54 | #if defined(RTEMS_POSIX_API) |
---|
55 | #define STATUS_BUILD( classic_status, posix_status ) \ |
---|
56 | ( ( ( (unsigned int) ( posix_status ) ) << 8 ) | ( classic_status ) ) |
---|
57 | #else |
---|
58 | #define STATUS_BUILD( classic_status, posix_status ) \ |
---|
59 | ( classic_status ) |
---|
60 | #endif |
---|
61 | |
---|
62 | /** |
---|
63 | * @brief Macro to get the Classic API status code. |
---|
64 | */ |
---|
65 | #define STATUS_GET_CLASSIC( status ) \ |
---|
66 | ( ( status ) & 0xff ) |
---|
67 | |
---|
68 | /** |
---|
69 | * @brief Macro to get the POSIX API status code. |
---|
70 | * |
---|
71 | * Performs an arithmetic shift to reconstruct a negative POSIX status. |
---|
72 | */ |
---|
73 | #define STATUS_GET_POSIX( status ) \ |
---|
74 | ( ( ( (int) ( status ) ) | 0xff ) >> 8 ) |
---|
75 | |
---|
76 | /** |
---|
77 | * @brief Status codes. |
---|
78 | */ |
---|
79 | typedef enum { |
---|
80 | STATUS_BARRIER_AUTOMATICALLY_RELEASED = |
---|
81 | STATUS_BUILD( STATUS_CLASSIC_SUCCESSFUL, PTHREAD_BARRIER_SERIAL_THREAD ), |
---|
82 | STATUS_DEADLOCK = |
---|
83 | STATUS_BUILD( STATUS_CLASSIC_INCORRECT_STATE, EDEADLK ), |
---|
84 | STATUS_FLUSHED = |
---|
85 | STATUS_BUILD( STATUS_CLASSIC_UNSATISFIED, EAGAIN ), |
---|
86 | STATUS_INCORRECT_STATE = |
---|
87 | STATUS_BUILD( STATUS_CLASSIC_INCORRECT_STATE, EINVAL ), |
---|
88 | STATUS_INTERRUPTED = |
---|
89 | STATUS_BUILD( STATUS_CLASSIC_INTERNAL_ERROR, EINTR ), |
---|
90 | STATUS_INVALID_NUMBER = |
---|
91 | STATUS_BUILD( STATUS_CLASSIC_INVALID_NUMBER, EINVAL ), |
---|
92 | STATUS_INVALID_PRIORITY = |
---|
93 | STATUS_BUILD( STATUS_CLASSIC_INVALID_PRIORITY, EINVAL ), |
---|
94 | STATUS_MAXIMUM_COUNT_EXCEEDED = |
---|
95 | STATUS_BUILD( STATUS_CLASSIC_INTERNAL_ERROR, EOVERFLOW ), |
---|
96 | STATUS_MESSAGE_INVALID_SIZE = |
---|
97 | STATUS_BUILD( STATUS_CLASSIC_INVALID_SIZE, EMSGSIZE ), |
---|
98 | STATUS_MESSAGE_QUEUE_WAIT_IN_ISR = |
---|
99 | STATUS_BUILD( STATUS_CLASSIC_INTERNAL_ERROR, ENOMEM ), |
---|
100 | STATUS_MESSAGE_QUEUE_WAS_DELETED = |
---|
101 | STATUS_BUILD( STATUS_CLASSIC_OBJECT_WAS_DELETED, EBADF ), |
---|
102 | STATUS_MINUS_ONE = |
---|
103 | -1, |
---|
104 | STATUS_MUTEX_CEILING_VIOLATED = |
---|
105 | STATUS_BUILD( STATUS_CLASSIC_INVALID_PRIORITY, EINVAL ), |
---|
106 | STATUS_NESTING_NOT_ALLOWED = |
---|
107 | STATUS_BUILD( STATUS_CLASSIC_UNSATISFIED, EDEADLK ), |
---|
108 | STATUS_NO_MEMORY = |
---|
109 | STATUS_BUILD( STATUS_CLASSIC_NO_MEMORY, EINVAL ), |
---|
110 | STATUS_NOT_DEFINED = |
---|
111 | STATUS_BUILD( STATUS_CLASSIC_NOT_DEFINED, EINVAL ), |
---|
112 | STATUS_NOT_OWNER = |
---|
113 | STATUS_BUILD( STATUS_CLASSIC_NOT_OWNER_OF_RESOURCE, EPERM ), |
---|
114 | STATUS_OBJECT_WAS_DELETED = |
---|
115 | STATUS_BUILD( STATUS_CLASSIC_OBJECT_WAS_DELETED, EINVAL ), |
---|
116 | STATUS_RESOURCE_IN_USE = |
---|
117 | STATUS_BUILD( STATUS_CLASSIC_RESOURCE_IN_USE, EBUSY ), |
---|
118 | STATUS_SUCCESSFUL = |
---|
119 | STATUS_BUILD( STATUS_CLASSIC_SUCCESSFUL, 0 ), |
---|
120 | STATUS_TIMEOUT = |
---|
121 | STATUS_BUILD( STATUS_CLASSIC_TIMEOUT, ETIMEDOUT ), |
---|
122 | STATUS_TOO_MANY = |
---|
123 | STATUS_BUILD( STATUS_CLASSIC_TOO_MANY, EAGAIN ), |
---|
124 | STATUS_UNAVAILABLE = |
---|
125 | STATUS_BUILD( STATUS_CLASSIC_UNSATISFIED, EBUSY ), |
---|
126 | STATUS_UNSATISFIED = |
---|
127 | STATUS_BUILD( STATUS_CLASSIC_UNSATISFIED, EAGAIN ) |
---|
128 | } Status_Control; |
---|
129 | |
---|
130 | #ifdef __cplusplus |
---|
131 | } |
---|
132 | #endif /* __cplusplus */ |
---|
133 | |
---|
134 | #endif /* _RTEMS_SCORE_STATUS_H */ |
---|