| /* |
| * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| /****************************************************************************** |
| * @file drv_errno.h |
| * @brief header file for error num |
| * @version V1.0 |
| * @date 02. June 2017 |
| ******************************************************************************/ |
| |
| /****************************************************************************** |
| * @file |
| * @details Error code field difination |
| * Error number is devided into 4 field: |
| * 0x8******* : 8 : means < 0 |
| * 0x*A****** : A : means type number: bsp(1), driver(2), hal(3), app(4)... |
| * 0x**AB**** : AB : means module number: timer(1), rtc(2), .... |
| * 0x****AB** : AB : means API number: module API's definition |
| * 0x******AB : AB : means sub error number |
| * 0 ~ 0x80 is common error such as EPERM, refer to errno.h |
| * 0x80 ~ 0xFF is specific error, can difine in module |
| * |
| * For example 0x81020113 means: |
| * 1. 0x8*******: value < 0, means error happened |
| * 2. 0x*1******: type number is 1, means bsp error |
| * 3. 0x**02****: module number is 02, means RTC error |
| * 4. 0x****01**: module API is 01, means RTC's init |
| * 5. 0x******13: specific error is 0x13=19=ENODEV, means no such device |
| * |
| * For special bsp module example, you can return: |
| * (BSP_ERRNO_TIMER_BASE | BSP_API_RTC_INIT | EPERM) for rtc init error |
| * (BSP_ERRNO_TIMER_BASE | BSP_API_RTC_SETTIME | ENXIO) for rtc settime error |
| * |
| * Here list the common sub error number (0x******AB) below(0~127 defined in errno.h as standard err code): |
| * Code Hex Deci Meaning |
| * ------------------------------------------------------- |
| * EPERM 0x01 1 Operation not permitted |
| * EIO 0x05 5 I/O error |
| * ENXIO 0x06 6 No such device or address |
| * ENOMEM 0x0C 12 Out of memory |
| * EACCES 0x0D 13 Permission denied |
| * EINVAL 0x16 22 Invalid argument |
| * ... |
| * SPEC_ERR_BASE 0x80 128 module special error number base |
| * ... |
| * ERRNO_MAX 0xFF -- Max sub error number |
| ******************************************************************************/ |
| |
| #ifndef _DRV_ERRNO_H_ |
| #define _DRV_ERRNO_H_ |
| |
| |
| #include <errno.h> |
| |
| #define ERRNO_DRV_START 0X80 |
| |
| /* drvier General return codes */ |
| typedef enum { |
| EDRV = ERRNO_DRV_START, ///< Unspecified error |
| EDRV_BUSY, ///< Driver is busy |
| EDRV_TIMEOUT, ///< Timeout occurred |
| EDRV_UNSUPPORTED, ///< Operation not supported |
| EDRV_PARAMETER, ///< Parameter error |
| EDRV_SPECIFIC ///< Start of driver specific errors |
| } drv_common_err_e; |
| |
| |
| /** Get error type */ |
| #define GET_ERROR_TYPE(errno) \ |
| (error & 0xFF000000 >> 24) |
| /** Get error module */ |
| #define GET_ERROR_MODULE(error) \ |
| (error & 0x00FF0000 >> 16) |
| /** Get error API */ |
| #define GET_ERROR_API(error) \ |
| (error & 0x0000FF00 >> 8) |
| /** Get errno */ |
| #define GET_ERROR_NUM(error) \ |
| (error & 0x000000FF) |
| |
| #ifndef CSI_DRV_ERRNO_BASE |
| /** means bsp errors */ |
| #define CSI_DRV_ERRNO_BASE 0x81000000 |
| #endif |
| |
| /** driver module id definition*/ |
| #define CSI_DRV_ERRNO_GPIO_BASE 0x81010000 |
| #define CSI_DRV_ERRNO_USART_BASE 0x81020000 |
| #define CSI_DRV_ERRNO_SPI_BASE 0x81030000 |
| #define CSI_DRV_ERRNO_I2C_BASE 0x81040000 |
| #define CSI_DRV_ERRNO_FLASH_BASE 0x81050000 |
| #define CSI_DRV_ERRNO_PWM_BASE 0x81060000 |
| #define CSI_DRV_ERRNO_RTC_BASE 0x81070000 |
| #define CSI_DRV_ERRNO_TIMER_BASE 0x81080000 |
| #define CSI_DRV_ERRNO_WDT_BASE 0x81090000 |
| #define CSI_DRV_ERRNO_AES_BASE 0x810A0000 |
| #define CSI_DRV_ERRNO_CRC_BASE 0x810B0000 |
| #define CSI_DRV_ERRNO_RSA_BASE 0x810C0000 |
| #define CSI_DRV_ERRNO_SHA_BASE 0x810D0000 |
| #define CSI_DRV_ERRNO_TRNG_BASE 0x810E0000 |
| #define CSI_DRV_ERRNO_EFLASH_BASE 0x810F0000 |
| #define CSI_DRV_ERRNO_DMA_BASE 0x81100000 |
| #define CSI_DRV_ERRNO_NORFLASH_BASE 0x81110000 |
| #define CSI_DRV_ERRNO_INTC_BASE 0x81120000 |
| #define CSI_DRV_ERRNO_SPU_BASE 0x81110000 |
| #define CSI_DRV_ERRNO_TEE_BASE 0x81130000 |
| #define CSI_DRV_ERRNO_PMU_BASE 0x81140000 |
| |
| #endif /* CSI_DRV_ERRNO_H */ |