diff options
author | Daniel Ramirez <javamonn@gmail.com> | 2013-12-06 12:21:20 -0600 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@oarcorp.com> | 2014-01-08 15:24:09 -0600 |
commit | 35b8f48a4b18a605945f149601a8ff8c9bc11fd6 (patch) | |
tree | 305db372660ba0f2ab7c267ac30143006ec5bc2d /cpukit/rtems | |
parent | powerpc/mvme3100: Improve Doxygen (diff) | |
download | rtems-35b8f48a4b18a605945f149601a8ff8c9bc11fd6.tar.bz2 |
libcsupport: Refactor rtems_deviceio_errno
Renames rtems_deviceio_errno to rtems_status_code_to_errno and
integrates it into the Classic API Status Handler. This function
can now be called by including status.h
Diffstat (limited to 'cpukit/rtems')
-rw-r--r-- | cpukit/rtems/include/rtems/rtems/status.h | 24 | ||||
-rw-r--r-- | cpukit/rtems/src/status.c | 54 |
2 files changed, 76 insertions, 2 deletions
diff --git a/cpukit/rtems/include/rtems/rtems/status.h b/cpukit/rtems/include/rtems/rtems/status.h index 2761791478..89042883fb 100644 --- a/cpukit/rtems/include/rtems/rtems/status.h +++ b/cpukit/rtems/include/rtems/rtems/status.h @@ -217,6 +217,30 @@ RTEMS_INLINE_ROUTINE bool rtems_are_statuses_equal( return (code1 == code2); } +/** + * @brief RTEMS Status Code to Errno Mapping Function + * + * This function recieves an RTEMS status code and returns an + * errno error code. The retval values show the mappings between + * rtems_status_codes and errno error codes. + * + * @retval 0 RTEMS_SUCCESSFUL + * @retval EIO RTEMS_TASK_EXITED, RTEMS_MP_NOT_CONFIGURED, RTEMS_INVALID_ID, + * RTEMS_TOO_MANY, RTEMS_OBJECT_WAS_DELETED, RTEMS_INVALID_SIZE, + * RTEMS_INVALID_ADDRESS, RTEMS_NOT_DEFINED, RTEMS_INCORRECT_STATE, + * RTEMS_ILLEGAL_ON_SELF, RTEMS_ILLEGAL_ON_REMOTE_OBJECT, + * RTEMS_CALLED_FROM_ISR, RTEMS_INVALID_PRIORITY, RTEMS_INTERNAL_ERROR, + * RTEMS_IO_ERROR, RTEMS_PROXY_BLOCKING + * @retval EINVAL RTEMS_INVALID_NAME, RTEMS_INVALID_CLOCK, RTEMS_INVALID_NODE + * @retval ETIMEDOUT RTEMS_TIMEOUT + * @retval EBADF RTEMS_INVALID_NUMBER + * @retval EBUSY RTEMS_RESOURCE_IN_USE + * @retval ENODEV RTEMS_UNSATISFIED + * @retval ENOSYS RTEMS_NOT_IMPLEMENTED, RTEMS_NOT_CONFIGURED + * @retval ENOMEM RTEMS_NO_MEMORY + */ +int rtems_status_code_to_errno(rtems_status_code sc); + /**@}*/ #ifdef __cplusplus diff --git a/cpukit/rtems/src/status.c b/cpukit/rtems/src/status.c index 1d8c4fafcc..33048c01b2 100644 --- a/cpukit/rtems/src/status.c +++ b/cpukit/rtems/src/status.c @@ -1,11 +1,11 @@ /** * @file * - * @brief Status Object Name Errors to Status Array + * @brief Status Mapping Arrays * @ingroup ClassicStatus */ -/* COPYRIGHT (c) 1989-2008. +/* COPYRIGHT (c) 1989-2013. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be @@ -14,6 +14,7 @@ */ #include <rtems/rtems/statusimpl.h> +#include <errno.h> const rtems_status_code _Status_Object_name_errors_to_status[] = { /** This maps OBJECTS_SUCCESSFUL to RTEMS_SUCCESSFUL. */ @@ -27,3 +28,52 @@ const rtems_status_code _Status_Object_name_errors_to_status[] = { /** This maps OBJECTS_INVALID_NODE to RTEMS_INVALID_NODE. */ RTEMS_INVALID_NODE }; + +static const int status_code_to_errno [RTEMS_STATUS_CODES_LAST + 1] = { + [RTEMS_SUCCESSFUL] = 0, + [RTEMS_TASK_EXITTED] = EIO, + [RTEMS_MP_NOT_CONFIGURED] = EIO, + [RTEMS_INVALID_NAME] = EINVAL, + [RTEMS_INVALID_ID] = EIO, + [RTEMS_TOO_MANY] = EIO, + [RTEMS_TIMEOUT] = ETIMEDOUT, + [RTEMS_OBJECT_WAS_DELETED] = EIO, + [RTEMS_INVALID_SIZE] = EIO, + [RTEMS_INVALID_ADDRESS] = EIO, + [RTEMS_INVALID_NUMBER] = EBADF, + [RTEMS_NOT_DEFINED] = EIO, + [RTEMS_RESOURCE_IN_USE] = EBUSY, + [RTEMS_UNSATISFIED] = ENODEV, + [RTEMS_INCORRECT_STATE] = EIO, + [RTEMS_ALREADY_SUSPENDED] = EIO, + [RTEMS_ILLEGAL_ON_SELF] = EIO, + [RTEMS_ILLEGAL_ON_REMOTE_OBJECT] = EIO, + [RTEMS_CALLED_FROM_ISR] = EIO, + [RTEMS_INVALID_PRIORITY] = EIO, + [RTEMS_INVALID_CLOCK] = EINVAL, + [RTEMS_INVALID_NODE] = EINVAL, + [RTEMS_NOT_CONFIGURED] = ENOSYS, + [RTEMS_NOT_OWNER_OF_RESOURCE] = EPERM, + [RTEMS_NOT_IMPLEMENTED] = ENOSYS, + [RTEMS_INTERNAL_ERROR] = EIO, + [RTEMS_NO_MEMORY] = ENOMEM, + [RTEMS_IO_ERROR] = EIO, + [RTEMS_PROXY_BLOCKING] = EIO +}; + +int rtems_status_code_to_errno(rtems_status_code sc) +{ + if (sc == RTEMS_SUCCESSFUL) { + return 0; + } else { + int eno = EINVAL; + + if ((unsigned) sc <= RTEMS_STATUS_CODES_LAST) { + eno = status_code_to_errno [sc]; + } + + errno = eno; + + return -1; + } +} |