1 /*
2  * @ : Copyright (c) 2021 Phytium Information Technology, Inc.
3  *
4  * SPDX-License-Identifier: Apache-2.0.
5  *
6  * @Date: 2021-04-07 09:53:30
7  * @LastEditTime: 2021-05-24 10:12:07
8  * @Description:  This files is for error code functions
9  *
10  * @Modify History:
11  *  Ver   Who        Date         Changes
12  * ----- ------     --------    --------------------------------------
13  */
14 
15 #ifndef _FT_ERROR_CODE_H
16 #define _FT_ERROR_CODE_H
17 
18 #include "ft_status.h"
19 #include "ft_types.h"
20 
21 typedef ft_base_t ft_error_t;
22 
23 /* 系统错误码模块定义 */
24 typedef enum _ft_errcode_module_mask
25 {
26     errModGeneral = 0,
27     errModBsp,
28     ERR_MODE_UART,
29     errModeI2c,
30     errModeGmac,
31     errModeSdCtrl,
32     errCan,
33     errGicV3,
34     errQspi,
35     ERR_MODE_SD_MMC,
36     ERR_MODE_SPI,
37 
38     errModMaxMask = 255,
39 } ft_errcode_module_mask_t;
40 
41 /* BSP模块的错误子模块定义 */
42 typedef enum _ft_errcode_bsp_mask
43 {
44     errBspGeneral = 0,
45     errBspClk,
46     errBspRtc,
47     errPort,
48     errBspModMaxMask = 255
49 } ft_errcode_bsp_mask_t;
50 
51 #define FT_ERRCODE_SYS_MODULE_OFFSET 24
52 #define FT_ERRCODE_SUB_MODULE_OFFSET 16
53 
54 #define FT_ERRCODE_SYS_MODULE_MASK (0xff << FT_ERRCODE_SYS_MODULE_OFFSET) /* bit 24 .. 31 */
55 #define FT_ERRCODE_SUB_MODULE_MASK (0xff << FT_ERRCODE_SUB_MODULE_OFFSET) /* bit 16 .. 23 */
56 #define FT_ERRCODE_TAIL_VALUE_MASK (0xffff)                               /* bit  1 .. 15 */
57 
58 /* Offset error code */
59 #define FT_ERRCODE_OFFSET(code, offset, mask) \
60     (((code) << offset) & mask)
61 
62 /* Assembly error code */
63 #define FT_MAKE_ERRCODE(sys_mode, sub_mode, tail)                                              \
64     ((FT_ERRCODE_OFFSET(sys_mode, FT_ERRCODE_SYS_MODULE_OFFSET, FT_ERRCODE_SYS_MODULE_MASK)) | \
65      (FT_ERRCODE_OFFSET(sub_mode, FT_ERRCODE_SUB_MODULE_OFFSET, FT_ERRCODE_SUB_MODULE_MASK)) | \
66      (tail & FT_ERRCODE_TAIL_VALUE_MASK))
67 #define FT_CODE_ERR FT_MAKE_ERRCODE
68 
69 #define ERR_SUCCESS FT_MAKE_ERRCODE(errModGeneral, errBspGeneral, FST_SUCCESS) /* 成功 */
70 #define ERR_GENERAL FT_MAKE_ERRCODE(errModGeneral, errBspGeneral, FST_FAILURE) /* 一般错误 */
71 
72 #endif
73