157 lines
5.5 KiB
C
157 lines
5.5 KiB
C
/* ------------------------------------------
|
|
* Copyright (c) 2016, Synopsys, Inc. All rights reserved.
|
|
|
|
* Redistribution and use in source and binary forms, with or without modification,
|
|
* are permitted provided that the following conditions are met:
|
|
|
|
* 1) Redistributions of source code must retain the above copyright notice, this
|
|
* list of conditions and the following disclaimer.
|
|
|
|
* 2) Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation and/or
|
|
* other materials provided with the distribution.
|
|
|
|
* 3) Neither the name of the Synopsys, Inc., nor the names of its contributors may
|
|
* be used to endorse or promote products derived from this software without
|
|
* specific prior written permission.
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* \version 2016.05
|
|
* \date 2014-12-25
|
|
* \author Wayne Ren(Wei.Ren@synopsys.com)
|
|
--------------------------------------------- */
|
|
|
|
/**
|
|
* \file
|
|
* \ingroup EMBARC_ERROR
|
|
* \brief header file to define common definitions error management
|
|
*/
|
|
|
|
/**
|
|
* \addtogroup EMBARC_ERROR
|
|
* @{
|
|
*/
|
|
|
|
#ifndef _EMBARC_ERROR_H_
|
|
#define _EMBARC_ERROR_H_
|
|
|
|
#include <stdint.h>
|
|
#include "inc/arc/arc_builtin.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
/**
|
|
* \name Main Error Code Definitions
|
|
* @{
|
|
*/
|
|
#define E_OK (0) /*!< ok */
|
|
#define E_SYS (-5) /*!< system error */
|
|
#define E_NOSPT (-9) /*!< unsupported features */
|
|
#define E_RSFN (-10) /*!< reserved function code */
|
|
#define E_RSATR (-11) /*!< reserved attribute */
|
|
#define E_PAR (-17) /*!< parameter error */
|
|
#define E_ID (-18) /*!< invalid ID number */
|
|
#define E_CTX (-25) /*!< context error */
|
|
#define E_MACV (-26) /*!< memory access violation */
|
|
#define E_OACV (-27) /*!< object access violation */
|
|
#define E_ILUSE (-28) /*!< illegal service call use */
|
|
#define E_NOMEM (-33) /*!< insufficient memory */
|
|
#define E_NOID (-34) /*!< no ID number available */
|
|
#define E_NORES (-35) /*!< no resource available */
|
|
#define E_OBJ (-41) /*!< object state error */
|
|
#define E_NOEXS (-42) /*!< non-existent object */
|
|
#define E_QOVR (-43) /*!< queue overflow */
|
|
#define E_RLWAI (-49) /*!< forced release from waiting */
|
|
#define E_TMOUT (-50) /*!< polling failure or timeout */
|
|
#define E_DLT (-51) /*!< waiting object deleted */
|
|
#define E_CLS (-52) /*!< waiting object state changed */
|
|
#define E_WBLK (-57) /*!< non-blocking accepted */
|
|
#define E_BOVR (-58) /*!< buffer overflow */
|
|
#define E_OPNED (-6) /*!< device is opened */
|
|
#define E_CLSED (-7) /*!< device is closed */
|
|
/** @} end of name */
|
|
|
|
/**
|
|
* \name Generate And Decompose Error Code
|
|
* @{
|
|
*/
|
|
#ifndef ERCD
|
|
/** generate error code using main error code and sub error code */
|
|
#define ERCD(mercd, sercd) \
|
|
((uint32_t)((((uint32_t) sercd) << 8) | (((uint32_t) mercd) & 0xffU)))
|
|
#endif /* ERCD */
|
|
|
|
#ifndef MERCD
|
|
#ifdef INT8_MAX
|
|
/** get main error code from error code */
|
|
#define MERCD(ercd) ((uint32_t)((int8_t)(ercd)))
|
|
#else /* INT8_MAX */
|
|
/** get main error code from error code */
|
|
#define MERCD(ercd) ((uint32_t)(((uint32_t) ercd) | ~0xffU))
|
|
#endif /* INT8_MAX */
|
|
#endif /* MERCD */
|
|
|
|
#ifndef SERCD
|
|
/** get sub error code from error code */
|
|
#define SERCD(ercd) ((uint32_t)((ercd) >> 8))
|
|
#endif /* SERCD */
|
|
/** @} end of name */
|
|
|
|
/**
|
|
* \name Check Error
|
|
* @{
|
|
*/
|
|
/**
|
|
* \brief check an expression to see if it is right, and when error
|
|
* set the ercd, and goto exit_label
|
|
* \param EXPR the expression that need to be checked (==0 failed)
|
|
* \param ERCD MUST pass a variable to here to get the error code
|
|
* \param ERROR_CODE error code that pass to ERCD
|
|
* \param EXIT_LABEL a label to go when error happens
|
|
*/
|
|
#define CHECK_EXP(EXPR, ERCD, ERROR_CODE, EXIT_LABEL) { \
|
|
if (_arc_rarely(!(EXPR))) { \
|
|
ERCD = (ERROR_CODE); \
|
|
goto EXIT_LABEL; \
|
|
} \
|
|
}
|
|
/**
|
|
* \brief check an expression to see if it is right, and when error
|
|
* directly goto exit_label
|
|
* \param EXPR the expression that need to be checked (==0 failed)
|
|
* \param EXIT_LABEL a label to go when error happens
|
|
* \retval
|
|
*/
|
|
#define CHECK_EXP_NOERCD(EXPR, EXIT_LABEL) { \
|
|
if (_arc_rarely(!(EXPR))) { \
|
|
goto EXIT_LABEL; \
|
|
} \
|
|
}
|
|
/** check cnt bytes align, 1 for aligned, 0 for not-aligned */
|
|
#define CHECK_ALIGN_BYTES(pointer, cnt) ((((uint32_t)(pointer)) & (cnt-1)) == 0)
|
|
/** check 2 bytes align, 1 for aligned, 0 for not-aligned */
|
|
#define CHECK_ALIGN_2BYTES(pointer) ((((uint32_t)(pointer)) & 0x1) == 0)
|
|
/** check 4 bytes align, 1 for aligned, 0 for not-aligned */
|
|
#define CHECK_ALIGN_4BYTES(pointer) ((((uint32_t)(pointer)) & 0x3) == 0)
|
|
/** check 8 bytes align, 1 for aligned, 0 for not-aligned */
|
|
#define CHECK_ALIGN_8BYTES(pointer) ((((uint32_t)(pointer)) & 0x7) == 0)
|
|
/** @} end of name */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _EMBARC_ERROR_H_ */
|
|
/** @} end of group EMBARC_ERROR */
|