Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:13

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /**
0004  * @file
0005  *
0006  * @ingroup RTEMSScoreStatus
0007  *
0008  * @brief This header file provides the interfaces of the
0009  *   @ref RTEMSScoreStatus.
0010  */
0011 
0012 /*
0013  * Copyright (c) 2016 embedded brains GmbH & Co. KG
0014  *
0015  * Redistribution and use in source and binary forms, with or without
0016  * modification, are permitted provided that the following conditions
0017  * are met:
0018  * 1. Redistributions of source code must retain the above copyright
0019  *    notice, this list of conditions and the following disclaimer.
0020  * 2. Redistributions in binary form must reproduce the above copyright
0021  *    notice, this list of conditions and the following disclaimer in the
0022  *    documentation and/or other materials provided with the distribution.
0023  *
0024  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0025  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0026  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0027  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0028  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0029  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0030  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0031  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0032  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0033  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0034  * POSSIBILITY OF SUCH DAMAGE.
0035  */
0036 
0037 #ifndef _RTEMS_SCORE_STATUS_H
0038 #define _RTEMS_SCORE_STATUS_H
0039 
0040 #include <rtems/score/basedefs.h>
0041 
0042 #include <errno.h>
0043 #include <pthread.h>
0044 
0045 #ifdef __cplusplus
0046 extern "C" {
0047 #endif /* __cplusplus */
0048 
0049 /**
0050  * @defgroup RTEMSScoreStatus Operation Status Support
0051  *
0052  * @ingroup RTEMSScore
0053  *
0054  * @brief This group contains the Operation Status Support implementation.
0055  *
0056  * @{
0057  */
0058 
0059 /**
0060  * @brief Status code parts for the Classic API.
0061  *
0062  * Must be in synchronization with rtems_status_code.
0063  */
0064 typedef enum {
0065   STATUS_CLASSIC_INCORRECT_STATE = 14,
0066   STATUS_CLASSIC_INTERNAL_ERROR = 25,
0067   STATUS_CLASSIC_INVALID_ADDRESS = 9,
0068   STATUS_CLASSIC_INVALID_ID = 4,
0069   STATUS_CLASSIC_INVALID_NAME = 3,
0070   STATUS_CLASSIC_INVALID_NODE = 21,
0071   STATUS_CLASSIC_INVALID_NUMBER = 10,
0072   STATUS_CLASSIC_INVALID_PRIORITY = 19,
0073   STATUS_CLASSIC_INVALID_SIZE = 8,
0074   STATUS_CLASSIC_NO_MEMORY = 26,
0075   STATUS_CLASSIC_NOT_DEFINED = 11,
0076   STATUS_CLASSIC_NOT_OWNER_OF_RESOURCE = 23,
0077   STATUS_CLASSIC_OBJECT_WAS_DELETED = 7,
0078   STATUS_CLASSIC_PROXY_BLOCKING = 29,
0079   STATUS_CLASSIC_RESOURCE_IN_USE = 12,
0080   STATUS_CLASSIC_SUCCESSFUL = 0,
0081   STATUS_CLASSIC_TIMEOUT = 6,
0082   STATUS_CLASSIC_TOO_MANY = 5,
0083   STATUS_CLASSIC_UNSATISFIED = 13
0084 } Status_Classic;
0085 
0086 /**
0087  * @brief Macro to build a status code from Classic and POSIX API parts.
0088  *
0089  * Uses a multiplication to preserve the signedness of the POSIX status.
0090  */
0091 #define STATUS_BUILD( classic_status, posix_status ) \
0092   ( ( ( posix_status ) * 256 ) | ( classic_status ) )
0093 
0094 /**
0095  * @brief Macro to get the Classic API status code.
0096  */
0097 #define STATUS_GET_CLASSIC( status ) \
0098   ( ( status ) & 0xff )
0099 
0100 /**
0101  * @brief Macro to get the POSIX API status code.
0102  *
0103  * Uses a division to preserve the signedness of the POSIX status.
0104  */
0105 #define STATUS_GET_POSIX( status ) \
0106   ( ( status ) / 256 )
0107 
0108 /**
0109  * @brief Status codes.
0110  */
0111 typedef enum {
0112   STATUS_BARRIER_AUTOMATICALLY_RELEASED =
0113     STATUS_BUILD( STATUS_CLASSIC_SUCCESSFUL, PTHREAD_BARRIER_SERIAL_THREAD ),
0114   STATUS_DEADLOCK =
0115     STATUS_BUILD( STATUS_CLASSIC_INCORRECT_STATE, EDEADLK ),
0116   STATUS_FLUSHED =
0117     STATUS_BUILD( STATUS_CLASSIC_UNSATISFIED, EAGAIN ),
0118   STATUS_INCORRECT_STATE =
0119     STATUS_BUILD( STATUS_CLASSIC_INCORRECT_STATE, EINVAL ),
0120   STATUS_INTERRUPTED =
0121     STATUS_BUILD( STATUS_CLASSIC_INTERNAL_ERROR, EINTR ),
0122   STATUS_INTERNAL_ERROR =
0123     STATUS_BUILD( STATUS_CLASSIC_INTERNAL_ERROR, ENOTSUP ),
0124   STATUS_INVALID_ADDRESS =
0125     STATUS_BUILD( STATUS_CLASSIC_INVALID_ADDRESS, EFAULT ),
0126   STATUS_INVALID_ID =
0127     STATUS_BUILD( STATUS_CLASSIC_INVALID_ID, EINVAL ),
0128   STATUS_INVALID_NODE =
0129     STATUS_BUILD( STATUS_CLASSIC_INVALID_NODE, EINVAL ),
0130   STATUS_INVALID_NAME =
0131     STATUS_BUILD( STATUS_CLASSIC_INVALID_NAME, EINVAL ),
0132   STATUS_INVALID_NUMBER =
0133     STATUS_BUILD( STATUS_CLASSIC_INVALID_NUMBER, EINVAL ),
0134   STATUS_INVALID_PRIORITY =
0135     STATUS_BUILD( STATUS_CLASSIC_INVALID_PRIORITY, EINVAL ),
0136   STATUS_INVALID_SIZE =
0137     STATUS_BUILD( STATUS_CLASSIC_INVALID_SIZE, EINVAL ),
0138   STATUS_MAXIMUM_COUNT_EXCEEDED =
0139     STATUS_BUILD( STATUS_CLASSIC_UNSATISFIED, EOVERFLOW ),
0140   STATUS_MESSAGE_INVALID_SIZE =
0141     STATUS_BUILD( STATUS_CLASSIC_INVALID_SIZE, EMSGSIZE ),
0142   STATUS_MESSAGE_QUEUE_INVALID_NUMBER =
0143     STATUS_BUILD( STATUS_CLASSIC_INVALID_NUMBER, ENOSPC ),
0144   STATUS_MESSAGE_QUEUE_INVALID_SIZE =
0145     STATUS_BUILD( STATUS_CLASSIC_INVALID_SIZE, ENOSPC ),
0146   STATUS_MESSAGE_QUEUE_NO_MEMORY =
0147     STATUS_BUILD( STATUS_CLASSIC_UNSATISFIED, ENOSPC ),
0148   STATUS_MESSAGE_QUEUE_WAIT_IN_ISR =
0149     STATUS_BUILD( STATUS_CLASSIC_INTERNAL_ERROR, EAGAIN ),
0150   STATUS_MESSAGE_QUEUE_WAS_DELETED =
0151     STATUS_BUILD( STATUS_CLASSIC_OBJECT_WAS_DELETED, EBADF ),
0152   STATUS_MINUS_ONE =
0153     -1,
0154   STATUS_MUTEX_CEILING_VIOLATED =
0155     STATUS_BUILD( STATUS_CLASSIC_INVALID_PRIORITY, EINVAL ),
0156   STATUS_NESTING_NOT_ALLOWED =
0157     STATUS_BUILD( STATUS_CLASSIC_UNSATISFIED, EDEADLK ),
0158   STATUS_NO_MEMORY =
0159     STATUS_BUILD( STATUS_CLASSIC_NO_MEMORY, EINVAL ),
0160   STATUS_NOT_DEFINED =
0161     STATUS_BUILD( STATUS_CLASSIC_NOT_DEFINED, EINVAL ),
0162   STATUS_NOT_OWNER =
0163     STATUS_BUILD( STATUS_CLASSIC_NOT_OWNER_OF_RESOURCE, EPERM ),
0164   STATUS_OBJECT_WAS_DELETED =
0165     STATUS_BUILD( STATUS_CLASSIC_OBJECT_WAS_DELETED, EINVAL ),
0166   STATUS_PROXY_BLOCKING =
0167     STATUS_BUILD( STATUS_CLASSIC_PROXY_BLOCKING, EINVAL ),
0168   STATUS_RESOURCE_IN_USE =
0169     STATUS_BUILD( STATUS_CLASSIC_RESOURCE_IN_USE, EBUSY ),
0170   STATUS_RESULT_TOO_LARGE =
0171     STATUS_BUILD( STATUS_CLASSIC_UNSATISFIED, ERANGE ),
0172   STATUS_SUCCESSFUL =
0173     STATUS_BUILD( STATUS_CLASSIC_SUCCESSFUL, 0 ),
0174   STATUS_TIMEOUT =
0175     STATUS_BUILD( STATUS_CLASSIC_TIMEOUT, ETIMEDOUT ),
0176   STATUS_TOO_MANY =
0177     STATUS_BUILD( STATUS_CLASSIC_TOO_MANY, EAGAIN ),
0178   STATUS_UNAVAILABLE =
0179     STATUS_BUILD( STATUS_CLASSIC_UNSATISFIED, EBUSY ),
0180   STATUS_UNSATISFIED =
0181     STATUS_BUILD( STATUS_CLASSIC_UNSATISFIED, EAGAIN )
0182 } Status_Control;
0183 
0184 /** @} */
0185 
0186 #ifdef __cplusplus
0187 }
0188 #endif /* __cplusplus */
0189 
0190 #endif /* _RTEMS_SCORE_STATUS_H */