/**
 * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2023. All rights reserved.
 *
 * Description: Provides error numers \n
 *
 * History: \n
 * 2022-06-01, Create file. \n
 */

#ifndef ERRCODE_H
#define ERRCODE_H

#include <stdint.h>

#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cplusplus */
#endif /* __cplusplus */

/**
 * @defgroup common_errcode Error Code Definition
 * @ingroup  common
 * @{
 */

/**
 * @brief  Definition of error code.
 */
typedef uint32_t errcode_t;

#ifdef CONFIG_ERRCODE_SUPPORT_REPORT
/**
 * @if Eng
 * @brief  Errcode module under the report Callback will be invoked
 * @else
 * @brief  Errcode在触发上报回调的模块定义。
 * @endif
 */
typedef enum errcode_module_id {
    ERRCODE_MODULE_NV,
} errcode_module_id_t;

/**
 * @if Eng
 * @brief  Errcode report Callback type to pass to the @ref uapi_errcode_register_report_callback function.
 * @note   This callback is invoked in writing/reading/erasion.
 * @param  module module given on the @ref uapi_errcode_register_report_callback call.
 * @param  err errcode given on the @ref uapi_errcode_register_report_callback call.
 * @else
 * @brief  Errcode上报的回调函数,在调用 @ref uapi_errcode_register_report_callback 时传递给函数。
 * @note   这个回调函数是在读、写、擦中执行的。
 * @param  module @ref uapi_errcode_register_report_callback 调用时的模块ID。
 * @param  err @ref uapi_errcode_register_report_callback 调用时的errcode。
 * @endif
 */
typedef void (*errcode_report_callback_t)(uint8_t module, errcode_t err);
#endif

/*
* 1 COMMON ERR (0x8000_0000 - 0x8000_0079)
*/
#define ERRCODE_SUCC                                        0UL
#define ERRCODE_FAIL                                        0xFFFFFFFF
#define ERRCODE_INVALID_PARAM                               0x80000001
#define ERRCODE_NOT_SUPPORT                                 0x80000002

#define ERRCODE_MEMSET                                      0x80000003
#define ERRCODE_MEMCPY                                      0x80000004
#define ERRCODE_MALLOC                                      0x80000005

/*
* 2 soc osa (0x8000_0080 - 0x8000_1000)
*
* HASH Error
*/
#define ERRCODE_HASH_REG_ADDR_INVALID                       0x80000080
#define ERRCODE_HASH_INVALID_PARAMETER                      0x80000081
#define ERRCODE_HASH_UNSUPPORTED                            0x80000082
#define ERRCODE_HASH_FAILED_MEM                             0x80000083
#define ERRCODE_HASH_BUSY                                   0x80000084
#define ERRCODE_HASH_TIMEOUT                                0x80000085

/*
* 3 DRIVER (0x8000_1000 - 0x8000_3000)
*
* Gpio Error.
*/
#define ERRCODE_GPIO_DIR_SET_FAIL                           0x80001000
#define ERRCODE_GPIO_NOT_INIT                               0x80001001
#define ERRCODE_GPIO_RELEASE_FAIL                           0x80001002
#define ERRCODE_GPIO_REG_ADDR_INVALID                       0x80001003
#define ERRCODE_GPIO_INIT_TRX_STATE_FAIL                    0x80001004
#define ERRCODE_GPIO_ADD_QUEUE_FAIL                         0x80001005
#define ERRCODE_GPIO_STATE_MISMATCH                         0x80001006
#define ERRCODE_GPIO_NOT_IMPLEMENT                          0x80001007
#define ERRCODE_GPIO_ALREADY_SET_CALLBACK                   0x80001008

/* CALENDAR Error */
#define ERRCODE_CALENDAR_NOT_INIT                           0x80001020
#define ERRCODE_CALENDAR_INVALID_PARAMETER                  0x80001021
#define ERRCODE_CALENDAR_GET_DATETIME_FAILURE               0x80001022
#define ERRCODE_CALENDAR_GET_TIMESTAMP_FAILURE              0x80001023
#define ERRCODE_CALENDAR_FAILURE                            0x80001024

/* Uart Error. */
#define ERRCODE_UART_NOT_INIT                               0x80001040
#define ERRCODE_UART_CLAIM_FAIL                             0x80001041
#define ERRCODE_UART_RELEASE_FAIL                           0x80001042
#define ERRCODE_UART_REG_ADDR_INVALID                       0x80001043
#define ERRCODE_UART_INIT_TRX_STATE_FAIL                    0x80001044
#define ERRCODE_UART_ADD_QUEUE_FAIL                         0x80001045
#define ERRCODE_UART_STATE_MISMATCH                         0x80001046
#define ERRCODE_UART_NOT_IMPLEMENT                          0x80001047
#define ERRCODE_UART_DMA_CFG_PARAM_INVALID                  0x80001048
#define ERRCODE_UART_DMA_BUFF_NULL                          0x80001049
#define ERRCODE_UART_DMA_SHAKING_INVALID_OR_UART_FUNCS_NULL 0x8000104A
#define ERRCODE_UART_DMA_CONFIGURE_FAIL                     0x8000104B
#define ERRCODE_UART_DMA_START_TRANSFER_FAIL                0x8000104C
#define ERRCODE_UART_DMA_TRANSFER_TIMEOUT                   0x8000104D
#define ERRCODE_UART_DMA_TRANSFER_ERROR                     0x8000104E
#define ERRCODE_UART_DMA_TRANSFER_BUSY                      0x8000104F
#define ERRCODE_UART_DMA_HEAD_WRONG                         0x80001050
#define ERRCODE_UART_DMA_BUFF_OVERSIZE                      0x80001051
#define ERRCODE_UART_PARITY_ERROR                           0x80001052
#define ERROCDE_UART_TRANSFER_TIMEOUT                       0x80001053

/* PWM Error */
#define ERRCODE_PWM_NOT_INIT                                0x80001080
#define ERRCODE_PWM_NOT_OPEN                                0x80001081
#define ERRCODE_PWM_INVALID_PARAMETER                       0x80001082
#define ERRCODE_PWM_REG_ADDR_INVALID                        0x80001083
#define ERRCODE_PWM_NOT_POWER_ON                            0x80001084
#define ERRCODE_PWM_DMA_ONLY_SUPPORT_ONE_CHANNEL            0x80001085

/* USB Error */
#define ERRCODE_USB_DEVICE_INFO_WRONG                       0x800010A0
#define ERRCODE_USB_INIT_FAILED                             0x800010A1
#define ERRCODE_USB_HID_DEVICE_OPENED                       0x800010A2
#define ERRCODE_USB_HID_EXIT_EVENT                          0x800010A3
#define ERRCODE_USB_HID_MEMCPY_FAIL                         0x800010A4
#define ERRCODE_USB_HID_DEVICE_NOT_LOADED                   0x800010A5
#define ERRCODE_USB_HID_INTERFACE_OVERSIZE                  0x800010A6

/* DMA Error */
#define ERRCODE_DMA_NOT_INIT                                0x80001100
#define ERRCODE_DMA_REG_ADDR_INVALID                        0x80001101
#define ERRCODE_DMA_INVALID_PARAMETER                       0x80001102
#define ERRCODE_DMA_RET_NO_AVAIL_CH                         0x80001103
#define ERRCODE_DMA_RET_ERROR_CONFIG                        0x80001104
#define ERRCODE_DMA_RET_HANDSHAKING_USING                   0x80001105
#define ERRCODE_DMA_LLI_CFG_ERROR                           0x80001106
#define ERRCODE_DMA_CH_BUSY                                 0x80001107
#define ERRCODE_DMA_RET_ERROR_ADDRESS_ALIGN                 0x80001108
#define ERRCODE_DMA_RET_TOO_MANY_DATA_TO_TRANSFER           0x80001109
#define ERRCODE_DMA_RET_ADDRESS_ACCESS_ERROR                0x80001110

/* uDMA Error */
#define ERRCODE_UDMA_NOT_INIT                               0x80001120
#define ERRCODE_UDMA_INVALID_PARAMETER                      0x80001121
#define ERRCODE_UDMA_CHANNEL_NOT_OPEN                       0x80001122
#define ERRCODE_UDMA_MALLOC_FAIL                            0x80001123
#define ERRCODE_UDMA_INCOMPLETE_CONFIG                      0x80001124
#define ERRCODE_UDMA_ONE_TIME_BATCHED_CONFIGS_EXCEEDED      0x80001125
#define ERRCODE_UDMA_CONFIG_QUEUE_FULL                      0x80001126
#define ERRCODE_UDMA_NO_AVAIL_CH                            0x80001127

/* ADC Error */
#define ERRCODE_ADC_REG_ADDR_INVALID                        0x80001140
#define ERRCODE_ADC_INVALID_PARAMETER                       0x80001141
#define ERRCODE_ADC_SCAN_NOT_DISABLE                        0x80001142
#define ERRCODE_ADC_INVALID_SAMPLE_VALUE                    0x80001143
#define ERRCODE_ADC_INVALID_CH_TYPE                         0x80001144
#define ERRCODE_ADC_TIMEOUT                                 0x80001145

/* Systick Error. */
#define ERRCODE_SYSTICK_NOT_INIT                            0x80001160
#define ERRCODE_SYSTICK_NOT_CLEARED                         0x80001161
#define ERRCODE_SYSTICK_REG_ADDR_INVALID                    0x80001162
#define ERRCODE_SYSTICK_NOT_IMPLEMENT                       0x80001163
#define ERRCODE_SYSTICK_INIT_STATE_FAIL                     0x80001164

/* TCXO Error */
#define ERRCODE_TCXO_REG_ADDR_INVALID                       0x80001180

/* Pinmux Error */
#define ERRCODE_PIN_INVALID_PARAMETER                       0x80001190
#define ERRCODE_PIN_MODE_NO_FUNC                            0x80001191
#define ERRCODE_PIN_NOT_INIT                                0x80001192

/* Watchdog Error */
#define ERRCODE_WDT_REG_ADDR_INVALID                        0x80001200

/* QDEC Error */
#define ERRCODE_QDEC_INVALID_STATE                          0x80001210
#define ERRCODE_QDEC_INVALID_PARAMETER                      0x80001211
#define ERRCODE_QDEC_DOUBLE_TRANSITION                      0x80001212
#define ERRCODE_QDEC_REG_ADDR_INVALID                       0x80001213

/* KEYSCAN Error */
#define ERRCODE_KEYSCAN_NOT_INIT                            0x80001220
#define ERRCODE_KEYSCAN_NOT_POWER_ON                        0x80001221
#define ERRCODE_KEYSCAN_POWER_ON                            0x80001222
#define ERRCODE_KEYSCAN_NULL                                0x80001223
#define ERRCODE_KEYSCAN_MAP_WRONG_SIZE                      0x80001224
#define ERRCODE_KEYSCAN_SAFE_FUNC_FAIL                      0x80001225
#define ERRCODE_KEYSCAN_NOT_ALLOW_TO_SLEEP                  0x80001226

/* TRNG Error */
#define ERRCODE_TRNG_REG_ADDR_INVALID                       0x80001230
#define ERRCODE_TRNG_INVALID_PARAMETER                      0x80001231
#define ERRCODE_TRNG_TIMEOUT                                0x80001232

/* PKE Error */
#define ERRCODE_PKE_REG_ADDR_INVALID                        0x80001240
#define ERRCODE_PKE_INVALID_PARAMETER                       0x80001241
#define ERRCODE_PKE_UNSUPPORTED                             0x80001242
#define ERRCODE_PKE_INVALID_PADDING                         0x80001243
#define ERRCODE_PKE_ENV_NOT_READY                           0x80001244
#define ERRCODE_PKE_FAILED_MEM                              0x80001245
#define ERRCODE_PKE_TIMEOUT                                 0x80001246

/* KM Error */
#define ERRCODE_KM_REG_ADDR_INVALID                         0x80001260
#define ERRCODE_KM_INVALID_PARAMETER                        0x80001261
#define ERRCODE_KM_UNSUPPORTED                              0x80001262
#define ERRCODE_KM_ENV_NOT_READY                            0x80001263
#define ERRCODE_KM_KEYSLOT_BUSY                             0x80001264
#define ERRCODE_KM_FAILED_MEM                               0x80001265
#define ERRCODE_KM_TIMEOUT                                  0x80001266

/* Cipher Error */
#define ERRCODE_CIPHER_REG_ADDR_INVALID                     0x80001280
#define ERRCODE_CIPHER_INVALID_PARAMETER                    0x80001281
#define ERRCODE_CIPHER_UNSUPPORTED                          0x80001282
#define ERRCODE_CIPHER_FAILED_MEM                           0x80001283
#define ERRCODE_CIPHER_ENV_NOT_READY                        0x80001284
#define ERRCODE_CIPHER_SIZE_NOT_ALIGNED                     0x80001285
#define ERRCODE_CIPHER_BUSY                                 0x80001286
#define ERRCODE_CIPHER_TIMEOUT                              0x80001287

/* I2C Error. */
#define ERRCODE_I2C_NOT_INIT                                0x80001300
#define ERRCODE_I2C_ALREADY_INIT                            0x80001301
#define ERRCODE_I2C_INVALID_PARAMETER                       0x80001302
#define ERRCODE_I2C_NOT_IMPLEMENT                           0x80001303
#define ERRCODE_I2C_EVENT_INIT_FAILURE                      0x80001304
#define ERRCODE_I2C_RATE_INVALID                            0x80001305
#define ERRCODE_I2C_ADDRESS_INVLID                          0x80001306
#define ERRCODE_I2C_PERMISSION_INVALID                      0x80001307
#define ERRCODE_I2C_NO_VALID_DATA                           0x80001308
#define ERRCODE_I2C_SEND_PARAM_INVALID                      0x80001309
#define ERRCODE_I2C_RECEIVE_PARAM_INVALID                   0x80001310
#define ERRCODE_I2C_WAIT_EXCEPTION                          0x80001311
#define ERRCODE_I2C_WAIT_CONTINUE                           0x80001312
#define ERRCODE_I2C_TIMEOUT                                 0x80001313
#define ERRCODE_I2C_ACK_ERR                                 0x80001314
#define ERRCODE_I2C_MUTEX_PROC_FAIL                         0x80001315
#define ERRCODE_I2C_DMA_CONFIG_ERROR                        0x80001316
#define ERRCODE_I2C_DMA_TRANSFER_ERROR                      0x80001317

/* TIMER error */
#define ERRCODE_TIMER_NO_ENOUGH                             0x80001320
#define ERRCODE_TIEMR_NOT_CREATED                           0x80001321
#define ERRCODE_TIMER_INVALID_REG_ADDR                      0x80001322
#define ERRCODE_TIMER_INVALID_STATE                         0x80001323
#define ERRCODE_TIMER_NOT_INIT                              0x80001324
#define ERRCODE_TIMER_USING                                 0x80001325
#define ERRCODE_TIMER_EN_FAIL                               0x80001326

/* SPI/QSPI Error. */
#define ERRCODE_SPI_CONFIG_FAIL                             0x80001330
#define ERRCODE_SPI_REG_ADDR_INVALID                        0x80001331
#define ERRCODE_SPI_MODE_MISMATCH                           0x80001332
#define ERRCODE_SPI_TIMEOUT                                 0x80001333
#define ERRCODE_SPI_RX_FIFO_FULL                            0x80001334
#define ERRCODE_SPI_SLAVE_SELECT_INVALID                    0x80001335
#define ERRCODE_SPI_DMA_CONFIG_ERROR                        0x80001336
#define ERRCODE_SPI_DMA_TRANSFER_ERROR                      0x80001337
#define ERRCODE_SPI_INVALID_BYTES                           0x80001338
#define ERRCODE_SPI_STATE_MISMATCH                          0x8000133A
#define ERRCODE_SPI_ADD_QUEUE_FAIL                          0x8000133B
#define ERRCODE_SPI_DMA_IRQ_MODE_MUTEX                      0x8000133C
#define ERRCODE_SPI_INVALID_TMODE                           0x8000133D
#define ERRCODE_SPI_BUSY                                    0x8000133E

/* SFC error */
#define ERRCODE_SFC_INVALID_PARAM                           0x8000133F
#define ERRCODE_SFC_NOT_INIT                                0x80001340
#define ERRCODE_SFC_FLASH_NOT_SUPPORT                       0x80001341
#define ERRCODE_SFC_ADDRESS_OVERSTEP                        0x80001342
#define ERRCODE_SFC_REG_ADDR_INVALID                        0x80001343
#define ERRCODE_SFC_FLASH_TIMEOUT_WAIT_READY                0x80001344
#define ERRCODE_SFC_CMD_ERROR                               0x80001345
#define ERRCODE_SFC_CMD_NOT_SUPPORT                         0x80001346
#define ERRCODE_SFC_ERASE_FORM_ERROR                        0x80001347
#define ERRCODE_SFC_DEFAULT_INIT                            0x80001348
#define ERRCODE_SFC_PORT_INVALID_PARAM                      0x80001349
#define ERRCODE_SFC_ALREADY_INIT                            0x8000134A
#define ERRCODE_SFC_INVALID_ADDR                            0x8000134B
#define ERRCODE_SFC_IN_CONTINUE_READ                        0x8000134C
#define ERRCODE_SFC_DMA_BUSY                                0x8000133D

/* MPU Error. */
#define ERRCODE_MPU_NOT_INIT                                0x80001350
#define ERRCODE_MPU_INVALID_PARAMETER                       0x80001351
#define ERRCODE_MPU_CONFIG_FAILED                           0x80001352
#define ERRCODE_MPU_REG_ADDR_INVALID                        0x80001353
#define ERRCODE_MPU_DREGION_ERROR                           0x80001354
#define ERRCODE_MPU_INVALID_ADDR                            0x80001355

#define ERRCODE_TSENSOR_NOT_INIT                            0x80001360
#define ERRCODE_TSENSOR_INVALID_PARAMETER                   0x80001361
#define ERRCODE_TSENSOR_REG_ADDR_INVALID                    0x80001362
#define ERRCODE_TSENSOR_GET_TEMP_INVALID                    0x80001363
#define ERRCODE_TSENSOR_WORKMODE_ERROR                      0x80001364

/* PSRAM Error. */
#define ERRCODE_PSRAM_RET_UNINIT                            0x80001370
#define ERRCODE_PSRAM_RET_INITED                            0x80001371
#define ERRCODE_PSRAM_RET_TIMEOUT                           0x80001372
#define ERRCODE_PSRAM_RET_WRONG_PARA                        0x80001373
#define ERRCODE_PSRAM_RET_WRONG_DEVICE                      0x80001374
#define ERRCODE_PSRAM_RET_XIP_EN                            0x80001375
#define ERRCODE_PSRAM_RET_XIP_DIS                           0x80001376
#define ERRCODE_PSRAM_RET_SLEEP                             0x80001377
#define ERRCODE_PSRAM_RET_WAKE                              0x80001378
#define ERRCODE_PSRAM_RET_ERROR                             0x80001379

/* PDM Error. */
#define ERRCODE_PDM_REG_ADDR_INVALID                        0x8000137E
#define ERRCODE_PDM_NOT_INIT                                0x8000137F

/* EDGE Error */
#define ERRCODE_EDGE_NOT_INIT                               0x80001380
#define ERRCODE_EDGE_INVALID_PARAMETER                      0x80001381
#define ERRCODE_EDGE_REG_ADDR_INVALID                       0x80001382

/* EMBED FLASH ERROR. */
#define ERRCODE_EFLASH_NOT_INIT                             0x80001385
#define ERRCODE_EFLASH_INVALID_PARAMETER                    0x80001386
#define ERRCODE_EFLASH_REG_ADDR_INVALID                     0x80001387

/* EFUSE error */
#define ERRCODE_EFUSE_INVALID_PARAM                         0x80001390
#define ERRCODE_EFUSE_NOT_INIT                              0x80001391
#define ERRCODE_EFUSE_REG_ADDR_INVALID                      0x80001392
#define ERRCODE_EFUSE_TIMEOUT_WAIT_READY                    0x80001393
#define ERRCODE_EFUSE_ITEM_LEN_ERROR                        0x80001394
#define ERRCODE_EFUSE_ITEM_ID_ERROR                         0x80001395
#define ERRCODE_EFUSE_ITEM_NOT_WRITEABLE                    0x80001396
#define ERRCODE_EFUSE_READ_FAIL                             0x80001397
#define ERRCODE_EFUSE_WRITE_FAIL                            0x80001398
#define ERRCODE_EFUSE_WRITE_FORBIDDEN                       0x80001399

/* MEM_MONTINOR Error */
#define ERRCODE_MEM_MONITOR_INVALID_PARAMETER               0x80001400
#define ERRCODE_MEM_MONITOR_REG_ADDR_INVALID                0x80001401
#define ERRCODE_MEM_MONITOR_WORKMODE_ERROR                  0x80001402
#define ERRCODE_MEM_MONITOR_GET_TEMP_INVALID                0x80001403

/* RTC error */
#define ERRCODE_RTC_NOT_INITED                              0x80001405
#define ERRCODE_RTC_REG_ADDR_INVALID                        0x80001406
#define ERRCODE_RTC_NO_ENOUGH                               0x80001407
#define ERRCODE_RTC_NOT_CREATED                             0x80001408
#define ERRCOED_RTC_EN_FAIL                                 0x80001409

/* SIO Error. */
#define ERRCODE_I2S_NOT_INIT                                0x80001410
#define ERRCODE_I2S_NOT_CONFIG                              0x80001411
#define ERRCODE_PCM_NOT_INIT                                0x80001412
#define ERRCODE_PCM_NOT_CONFIG                              0x80001413
#define ERRCODE_SIO_REG_ADDR_INVALID                        0x80001414

/* CAN-FD Error. */
#define ERRCODE_CAN_FD_INITED                               0x80001420
#define ERRCODE_CAN_FD_INVALID_ADDR                         0x80001421
#define ERRCODE_CAN_FD_NOT_INIT                             0x80001422
#define ERRCODE_CAN_FD_SEND_TIMEOUT                         0x80001423
#define ERRCODE_CAN_FD_RX_FIFO_EMPTY                        0x80001424
#define ERRCODE_CAN_ACTIVE_STS                              0x80001425
#define ERRCODE_CAN_PASSIVE_STS                             0x80001426
#define ERRCODE_CAN_BUS_OFF                                 0x80001427
#define ERRCODE_CAN_ERROR_PARAM_POINTER                     0x80001428
#define ERRCODE_CAN_ERROR_PARAM_CONTROLLER                  0x80001429
#define ERRCODE_CAN_ERROR_TRANSITION                        0x80001430
#define ERRCODE_CAN_ERROR_UNINIT                            0x80001431
#define ERRCODE_CAN_ERROR_SET_CONTROLLER_MODE               0x80001432
#define ERRCODE_CAN_ERROR_DATA_LENGTH                       0x80001433
#define ERRCODE_CAN_BUSY                                    0x80001434
#define ERRCODE_CAN_ERROR_PARAM_FILTER                      0x80001435
#define ERRCODE_CAN_INIT_TIMEOUT                            0x80001436

/* SECURITY_UNIFIED Error */
#define ERRCODE_SECURITY_INVALID_PARAM                      0x80001501  /* input param's value is not in valid range. */
#define ERRCODE_SECURITY_PARAM_IS_NULL                      0x80001502  /* input param is NULL and required not NULL. */
#define ERRCODE_SECURITY_NOT_INIT                           0x80001503  /* call other functions before call init function. */
#define ERRCODE_SECURITY_UNSUPPORT                          0x80001504  /* some configuration is unsupport. */
#define ERRCODE_SECURITY_UNEXPECTED                         0x80001505  /* reture when unexpected error occurs. */
#define ERRCODE_SECURITY_TRY_TIMES                          0x80001506  /* return when the number of try attempts failed. */
#define ERRCODE_SECURITY_CHN_BUSY                           0x80001507  /* try to create channel but all channels are busy. */
#define ERRCODE_SECURITY_CTX_CLOSED                         0x80001508  /* using one ctx to do something but has been closed. */
#define ERRCODE_SECURITY_NOT_SET_CONFIG                     0x80001509  /* not set_config but need for symc. */
#define ERRCODE_SECURITY_NOT_ATTACHED                       0x8000150A  /* not attach but need for symc. */
#define ERRCODE_SECURITY_NOT_SET_SESSION_KEY                0x8000150B  /* return when not set_session_key but need for klad. */
#define ERRCODE_SECURITY_NOT_MAC_START                      0x8000150C  /* not mac_start but need for symc. */
#define ERRCODE_SECURITY_INVALID_HANDLE                     0x8000150D  /* pass one invalid handle. */
#define ERRCODE_SECURITY_GET_PHYS_ADDR                      0x8000150E  /* transfer from virt_addr to phys_addr failed. */
#define ERRCODE_SECURITY_SYMC_LEN_NOT_ALIGNED               0x8000150F  /* length isn't aligned to 16-Byte except CTR/CCM/GCM. */
/* the phys_addr writing to register is not aligned to 4-Byte. */
#define ERRCODE_SECURITY_SYMC_ADDR_NOT_ALIGNED              0x80001510
#define ERRCODE_SECURITY_PKE_RSA_SAME_DATA                  0x80001511  /* rsa exp_mod  the input is equal to output. */
#define ERRCODE_SECURITY_PKE_RSA_CRYPTO_V15_CHECK           0x80001512  /* rsa crypto v15 padding check failed. */
#define ERRCODE_SECURITY_PKE_RSA_CRYPTO_OAEP_CHECK          0x80001513  /* rsa crypto oaep padding check failed. */
#define ERRCODE_SECURITY_PKE_RSA_VERIFY_V15_CHECK           0x80001514  /* rsa verify v15 padding check failed. */
#define ERRCODE_SECURITY_PKE_RSA_VERIFY_PSS_CHECK           0x80001515  /* rsa verify pss padding check failed. */
#define ERRCODE_SECURITY_PKE_RSA_GEN_KEY                    0x80001516  /* rsa generate key failed. */
#define ERRCODE_SECURITY_PKE_SM2_DECRYPT                    0x80001517  /* return when sm2 decrypt failed. */
#define ERRCODE_SECURITY_ECDSA_SIGN_R_IS_ZERO               0x80001518  /* return when ecdsa sign, the sig_r is zero. */
#define ERRCODE_SECURITY_ECDSA_SIGN_S_IS_ZERO               0x80001519  /* return when ecdsa sign, the sig_s is zero. */
#define ERRCODE_SECURITY_PKE_ECDSA_VERIFY_CHECK             0x8000151A  /* ecdsa verify check failed. */
#define ERRCODE_SECURITY_OTP_ADDR_NOT_ALIGNED               0x8000151B  /* return when otp address is not aligned to 4. */
#define ERRCODE_SECURITY_HASH_ADDR_NOT_ALIGNED              0x8000151C  /* return when hash data's address is not aligned */
#define ERRCODE_SECURITY_HASH_LEN_NOT_ALIGNED               0x8000151D  /* return when hash length is not block size aligned. */
#define ERRCODE_SECURITY_PKE_SECURITY_STRENGTH_NOT_MATCH    0x8000151E /* the security strength is not match. */
#define ERRCODE_SECURITY_PKE_RSA_CRYPTO_BUFFER_TOO_SMALL    0x80001520 /* return when rsa decrypt out buffer too small. */
#define ERRCODE_SECURITY_SYMC_AEAD_TAG_INVALID              0x80001521  /* return when symc aead tag verify failed. */
/* return when rsa modular valid bits is not legal compared to work_len. */
#define ERRCODE_SECURITY_INVALID_RSA_MODULAR                  0x80001522

/* Outer's Error Code. 0x40 ~ 0x5F. */
#define ERRCODE_SECURITY_MEMCPY_S                    0x80001540  /* call memcpy_s failed. */
#define ERRCODE_SECURITY_MALLOC                      0x80001541  /* call xxx_malloc failed. */
#define ERRCODE_SECURITY_MUTEX_INIT                  0x80001542  /* call xxx_mutex_init failed. */
#define ERRCODE_SECURITY_MUTEX_LOCK                  0x80001543  /* call xxx_lock failed. */
#define ERRCODE_SECURITY_MEMSET_S                    0x80001544  /* call memset_s failed. */
/* Specific Error Code for UAPI. 0x60 ~ 0x6F. */
#define ERRCODE_SECURITY_DEV_OPEN_FAILED             0x80001560  /* open dev failed. */
#define ERRCODE_SECURITY_COUNT_OVERFLOW              0x80001561  /* call init too many times. */
/* Specific Error Code for Dispatch. 0x70 ~ 0x7F. */
#define ERRCODE_SECURITY_CMD_DISMATCH                0x80001570  /* cmd is dismatched. */
#define ERRCODE_SECURITY_COPY_FROM_USER              0x80001571  /* call copy_from_user failed. */
#define ERRCODE_SECURITY_COPY_TO_USER                0x80001572  /* call copy_to_user failed. */
/* parse user's mem handle to kernel's mem handle failed. */
#define ERRCODE_SECURITY_MEM_HANDLE_GET              0x80001573
#define ERRCODE_SECURITY_GET_OWNER                   0x80001574  /* call crypto_get_owner failed. */
/* Specific Error Code for KAPI. 0x80 ~ 0x8F. */
#define ERRCODE_SECURITY_PROCESS_NOT_INIT            0x80001580  /* one process not call kapi_xxx_init first. */
#define ERRCODE_SECURITY_MAX_PROCESS                 0x80001581  /* process's num is over the limit. */
#define ERRCODE_SECURITY_MEMORY_ACCESS               0x80001582  /* access the memory that does not belong to itself.  */
#define ERRCODE_SECURITY_INVALID_PROCESS             0x80001583  /* the process accesses resources of other processes. */
/* Specific Error Code for DRV. 0x90 ~ 0x9F. */

/* Specific Error Code for HAL. 0xA0 ~ 0xAF. */
#define ERRCODE_SECURITY_HASH_LOGIC                  0x800015A0  /* hash logic's error occurs. */
#define ERRCODE_SECURITY_PKE_LOGIC                   0x800015A1  /* pke logic's error occurs. */
#define ERRCODE_SECURITY_INVALID_CPU_TYPE            0x800015A2  /* logic get the invalid cpu type. */
#define ERRCODE_SECURITY_INVALID_REGISTER_VALUE      0x800015A3  /* value in register is invalid. */
#define ERRCODE_SECURITY_INVALID_PHYS_ADDR           0x800015A4  /* phys_addr is invalid. */
#define ERRCODE_SECURITY_OTP_PERMISSION              0x800015A5  /* return when otp access is forbidden. */
#define ERRCODE_SECURITY_KM_LOGIC                    0x800015A6  /* return when km logic's error occurs. */
#define ERRCODE_SECURITY_KM_KL_LOGIC                 0x800015A7  /* return when km HKL logic's error occurs. */
#define ERRCODE_SECURITY_KM_KC_LOGIC                 0x800015A8  /* return when km KEY CTRL logic's error occurs. */
#define ERRCODE_SECURITY_KLAD_ROOTKEY_NOT_READY      0x800015A9  /* return when klad rootkey is not ready. */
#define ERRCODE_SECURITY_KM_RKP_LOGIC                0x800015AA  /* return when km RKP logic's error occurs. */
#define ERRCODE_SECURITY_NO_CLOCK                    0x800015AB  /* return when module has no clock. */
/* Specific Error Code for Timeout. 0xB0 ~ 0xBF. */
#define ERRCODE_SECURITY_GET_TRNG_TIMEOUT            0x800015B0  /* logic get rnd timeout. */
#define ERRCODE_SECURITY_HASH_CLEAR_CHN_TIMEOUT      0x800015B1  /* clear hash channel timeout. */
#define ERRCODE_SECURITY_HASH_CALC_TIMEOUT           0x800015B2  /* hash calculation timeout. */
#define ERRCODE_SECURITY_SYMC_CLEAR_CHN_TIMEOUT      0x800015B3  /* clear symc channel timeout. */
#define ERRCODE_SECURITY_SYMC_CALC_TIMEOUT           0x800015B4  /* symc crypto timeout. */
#define ERRCODE_SECURITY_SYMC_GET_TAG_TIMEOUT        0x800015B5  /* symc get tag timeout. */
#define ERRCODE_SECURITY_PKE_LOCK_TIMEOUT            0x800015B6  /* pke lock timeout. */
#define ERRCODE_SECURITY_PKE_WAIT_DONE_TIMEOUT       0x800015B7  /* pke wait done timeout. */
#define ERRCODE_SECURITY_PKE_ROBUST_WARNING          0x800015B8  /* pke robust warning. */
#define ERRCODE_SECURITY_RKP_LOCK_TIMEOUT            0x800015B9  /* return when rkp lock timeout. */
#define ERRCODE_SECURITY_RKP_CALC_TIMEOUT            0x800015BA  /* return when rkp calculate timeout. */
#define ERRCODE_SECURITY_KLAD_COM_ROUTE_TIMEOUT      0x800015BB  /* return when klad com route timeout. */
#define ERRCODE_SECURITY_OTP_TIMEOUT                 0x800015BC  /* return when otp wait timeout. */
#define ERRCODE_SECURITY_KEYSLOT_TIMEOUT             0x800015BD  /* return when keyslot wait timeout. */
#define ERRCODE_SECURITY_KEYSLOT_LOCK                0x800015BE  /* return when keyslot lock or unlock fail. */
#define ERRCODE_SECURITY_KLAD_TIMEOUT                0x800015BF  /* return when klad wait timeout. */
#define ERRCODE_SECURITY_KLAD_LOCK                   0x800015C0  /* return when klad lock or unlock fail. */
#define ERRCODE_SECURITY_HASH_LOCK_TIMEOUT           0x800015C1  /* return when hash lock wait timeout. */
#define ERRCODE_SECURITY_PKE_ALG_TIMEOUT             0x800015C2  /* return when pke algorithm timeout. */

/* SEMA error */
#define ERRCODE_SEMA_INVALID_INDEX                  0x80001D00  /* return when sem index invalid. */
#define ERRCODE_SEMA_REG_ADDR_INVALID               0x80001D01  /* return when get sema regs addr failed. */

/*
*
* mipi_rffe Error
*/
#define ERRCODE_MIPI_RFFE_REG_ADDR_INVALID              0x80001600
#define ERRCODE_MIPI_RFFE_TIMEOUT                       0x80001601
#define ERRCODE_MIPI_RFFE_CMD_PARAM_ERROR               0x80001602
#define ERRCODE_MIPI_RFFE_OPCODE_PARAM_ERROR            0x80001603
#define ERRCODE_MIPI_RFFE_NOT_INIT                      0x80001604

/*
*
* mipi_hw Error
*/
#define ERRCODE_MIPI_HW_CONFIG_INDEX_ERROR              0x80001610
#define ERRCODE_MIPI_HW_USID_CONFIG_ERROR               0x80001611
#define ERRCODE_MIPI_HW_APT_ADDR_CONFIG_ERROR           0x80001612
#define ERRCODE_MIPI_HW_INST_CONFIG_ERROR               0x80001613
#define ERRCODE_MIPI_HW_APT_MODE_CONFIG_ERROR           0x80001614
#define ERRCODE_MIPI_HW_SEND_OVER_TIMEOUT               0x80001615
#define ERRCODE_MIPI_HW_REG_ADDR_INVALID                0x80001616

/*
*
* CAPSENSOR Error
*/
#define ERRCODE_CAPSENSOR_NOT_INIT                      0x80001620
#define ERRCODE_CAPSENSOR_NOT_ENABLE_SELF_CALI          0x80001621
#define ERRCODE_CAPSENSOR_SELF_CALI_TIMEOUT             0x80001622
#define ERRCODE_CAPSENSOR_MAN_CALI_TIMEOUT              0x80001623
#define ERRCODE_CAPSENSOR_TIMEOUT                       0x80001624
#define ERRCODE_CAPSENSOR_DATA_REFRESH                  0x80001625

/*
*
* LPB Error
*/
#define ERRCODE_LPB_INVALID_PARAM                           0x80001630
#define ERRCODE_LPB_NOT_INIT                                0x80001631
#define ERRCODE_LPB_CH_MONITED                              0x80001632
#define ERRCODE_LPB_CH_IS_NOT_MONITED                       0x80001633
#define ERRCODE_LPB_FUNC_CFG_SAME                           0x80001634
#define ERRCODE_LPB_CH_ALL_BUSY                             0x80001635
#define ERRCODE_LPB_FUNC_NOT_CFG                            0x80001636
#define ERRCODE_LPB_PERIPHERAL_NOT_INIT                     0x80001637
#define ERRCODE_LPB_PERIPHERAL_INVALID_PARAM                0x80001638
#define ERRCODE_LPB_PERIPHERAL_CH_ALL_BUSY                  0x80001639
#define ERRCODE_LPB_PERIPHERAL_GPIO_CFG_SAME                0x8000163A
#define ERRCODE_LPB_PERIPHERAL_PWM_GRP_SAME                 0x8000163B
#define ERRCODE_LPB_PERIPHERAL_GPIOCTRL_CONFLICT            0x8000163C

/* I3C&SH error */
#define ERRCODE_I3C_NOT_INIT                                0x80001640
#define ERRCODE_I3C_INITED                                  0x80001641
#define ERRCODE_I3C_INVALID_PARAMETER                       0x80001642
#define ERRCODE_I3C_RX_DATA_GET_FAILED                      0x80001643
#define ERRCODE_I3C_REG_ADDR_INVALID                        0x80001644
#define ERRCODE_I3C_LP_REG_ADDR_INVALID                     0x80001645
#define ERRCODE_I3C_CMD_TABLE_ADDR_INVALID                  0x80001646
#define ERRCODE_I3C_CMD_TABLE_ADDR_ALIGN_ERROR              0x80001647
#define ERRCODE_SH_PLAT_CUST_DISABLE                        0x80001648
#define ERRCODE_SH_INVALID_PARAMETER                        0x80001649
#define ERRCODE_SH_LENGTH_ERROR                             0x8000164A
#define ERRCODE_SH_INVALID_HEADER                           0x8000164B

/* LIN error */
#define ERRCODE_LIN_INITED                                  0x80001650
#define ERRCODE_LIN_NOT_INIT                              0x80001651
#define ERRCODE_LIN_WAIT_IDLE_FAIL                          0x80001652
#define ERRCODE_LIN_NOT_SUPPORT_WAKEUP                      0x80001653
#define ERRCODE_LIN_NOT_MASTER                              0x80001654
#define ERRCODE_LIN_NOT_MASTER_MODE                         0x80001655
#define ERRCODE_LIN_NOT_SLEEP                               0x80001656
#define ERRCODE_LIN_NOT_WAKEUP                              0x80001657
#define ERRCODE_LIN_NOT_OPERATIONAL                         0x80001658

/*
*
* PARTITION Error
*/
#define ERRCODE_PARTITION_INIT_ERR                          0x80003000
#define ERRCODE_PARTITION_NOT_SUPPORT                       0x80003001
#define ERRCODE_PARTITION_INVALID_PARAM                    0x80003002
#define ERRCODE_PARTITION_CONFIG_NOT_FOUND                  0x80003003
#define ERRCODE_IMAGE_CONFIG_NOT_FOUND                      0x80003004

/* AT Error */
#define ERRCODE_AT_CHANNEL_BUSY                             0x80003020
#define ERRCODE_AT_CMD_TOO_LONG                             0x80003021
#define ERRCODE_AT_CMD_REPEAT                               0x80003022
#define ERRCODE_AT_CMD_TABLE_PARA_ERROR                     0x80003023
#define ERRCODE_AT_MSG_SEND_ERROR                           0x80003024

/* UPG error */
#define ERRCODE_UPG_NOT_INIT                                0x80003040
#define ERRCODE_UPG_ALREADY_INIT                            0x80003041
#define ERRCODE_UPG_INVALID_PARAMETER                       0x80003042
#define ERRCODE_UPG_WRONG_IMAGE_NUM                         0x80003043
#define ERRCODE_UPG_INVALID_IMAGE_ID                        0x80003044
#define ERRCODE_UPG_NULL_POINTER                            0x80003045
#define ERRCODE_UPG_NOT_SUPPORTED                           0x80003046
#define ERRCODE_UPG_NOT_NEED_TO_UPDATE                      0x80003047
#define ERRCODE_UPG_FLASH_ERASE_ERROR                       0x80003048
#define ERRCODE_UPG_FLASH_WRITE_ERROR                       0x80003049
#define ERRCODE_UPG_FLAG_NOT_INIT                         0x80003050
#define ERRCODE_UPG_NO_ENOUGH_SPACE                         0x80003051
#define ERRCODE_UPG_PARTITION_ALIGN_ERROR                   0x80003052
#define ERRCODE_UPG_INVALID_PREPARE_INFO                    0x80003053
#define ERRCODE_UPG_NOT_PREPARED                            0x80003054
#define ERRCODE_UPG_INVALID_BUFF_LEN                        0x80003055
#define ERRCODE_UPG_INVALID_OFFSET                          0x80003056
#define ERRCODE_UPG_FILE_OPEN_FAIL                          0x80003057
#define ERRCODE_UPG_FILE_WRITE_FAIL                         0x80003058
#define ERRCODE_UPG_FILE_SEEK_FAIL                          0x80003059
#define ERRCODE_UPG_FILE_READ_FAIL                          0x80003060
#define ERRCODE_UPG_EMPTY_FILE                              0x80003061
#define ERRCODE_UPG_DECOMPRESS_FAIL                         0x80003062
#define ERRCODE_UPG_VERIFICATION_KEY_ERROR                  0x80003063
#define ERRCODE_UPG_CHECK_FOTA_ERROR                        0x80003064
#define ERRCODE_UPG_SET_IMG_ERROR                           0x80003065
#define ERRCODE_UPG_BACKUP_UPDATE_ERROR                     0x80003066
#define ERRCODE_UPG_RETRY_ALL_FAIL                          0x80003067
#define ERRCODE_UPG_VERSION_ERROR                           0x80003068
#define ERRCODE_UPG_TIMEOUT                                 0x80003069
#define ERRCODE_UPG_REJECT_LOW_POWER                        0x80003070

/* NV error */
#define ERRCODE_NV_KEY_NOT_IN_WRITE_QUEUE                   0x80003080
#define ERRCODE_NV_KEY_NOT_FOUND                            0x80003081
#define ERRCODE_NV_GET_BUFFER_TOO_SMALL                     0x80003082
#define ERRCODE_NV_INVALID_PARAM                           0x80003083
#define ERRCODE_NV_RPC_ERROR                                0x80003084
#define ERRCODE_NV_TRYING_TO_MODIFY_A_PERMANENT_KEY         0x80003085
#define ERRCODE_NV_BUFFER_TOO_SMALL                         0x80003086
#define ERRCODE_NV_NO_ENOUGH_SPACE                          0x80003087
#define ERRCODE_NV_ILLEGAL_OPERATION                        0x80003088
#define ERRCODE_NV_SEM_WAIT_ERR                             0x80003089
#define ERRCODE_NV_NOT_INIT                          0x80003090
#define ERRCODE_NV_NOTIFY_LIST_FULL                         0x80003091
#define ERRCODE_NV_INIT_FAILED                              0x80003092
#define ERRCODE_NV_ZERO_LENGTH_COPY                         0x80003093
#define ERRCODE_NV_NOTIFY_SEGMENT_ERR                       0x80003094
#define ERRCODE_NV_READ_FLASH_ERR                           0x80003095
#define ERRCODE_NV_DATA_MISMATCH                            0x80003096
#define ERRCODE_NV_LENGTH_MISMATCH                          0x80003097
#define ERRCODE_NV_KEY_HASH_BUFFER_NOT_ALLOCATED            0x80003098
#define ERRCODE_NV_KEY_DATA_BUFFER_NOT_ALLOCATED            0x80003099
#define ERRCODE_NV_INVALID_KEY_HEADER                       0x80003100
#define ERRCODE_NV_SEARCH_PATTERN_MISMATCH                  0x80003101
#define ERRCODE_NV_SEARCH_KEY_TYPE_MISMATCH                 0x80003102
#define ERRCODE_NV_SEARCH_KEY_STATE_MISMATCH                0x80003103
#define ERRCODE_NV_HASH_MISMATCH                            0x80003104
#define ERRCODE_NV_PAGE_NOT_FOUND                           0x80003105
#define ERRCODE_NV_INVALID_PAGE                             0x80003106
#define ERRCODE_NV_INVALID_STORE                            0x80003107
#define ERRCODE_NV_DEFRAGMENTATION_NEEDED                   0x80003108
#define ERRCODE_NV_HASH_UNAVAILABLE                         0x80003109
#define ERRCODE_NV_AES_UNAVAILABLE                          0x80003110
#define ERRCODE_NV_BUFFER_PRIMED_PREMATURELY                0x80003111
#define ERRCODE_NV_KEY_HASH_BUFFER_TOO_SMALL                0x80003112
#define ERRCODE_NV_WRITE_BUFFER_NOT_ALLOCATED               0x80003113
#define ERRCODE_NV_WRITE_BUFFER_TOO_SMALL                   0x80003114
#define ERRCODE_NV_WRITE_VETOED                             0x80003115
#define ERRCODE_NV_KEY_HEADER_BUFFER_NOT_ALLOCATED          0x80003116
#define ERRCODE_NV_STATE_INVALID                            0x80003117
#define ERRCODE_NV_PAGE_REALIGN_NEEDED                      0x80003118
#define ERRCODE_NV_EXTRA_REGION_CONFIG_INVALID              0x80003119

/* FLASH error */
#define ERRCODE_FLASH_TASK_COMPLETED                        0x80003130
#define ERRCODE_FLASH_INVALID_PARAM_BEYOND_ADDR             0x80003131
#define ERRCODE_FLASH_TASK_PE_VETO                          0x80003132
#define ERRCODE_FLASH_CONFIG_FAIL                           0x80003133
#define ERRCODE_FLASH_SPI_TRANS_FAIL                        0x80003134
#define ERRCODE_FLASH_TIMEOUT                               0x80003135
#define ERRCODE_FLASH_FALSE_MODE                            0x80003136
#define ERRCODE_FLASH_SPI_CONFIG_FAIL                       0x80003137
#define ERRCODE_FLASH_SPI_INIT_FAIL                         0x80003138
#define ERRCODE_FLASH_INIT_FAIL                             0x80003139

/* IPC Error. */
#define ERRCODE_IPC_NOT_INIT                                0x80003140
#define ERRCODE_IPC_INVALID_PARAMETER                       0x80003141
#define ERRCODE_IPC_REG_ADDR_INVALID                        0x80003142
#define ERRCODE_IPC_NOT_REGISTER_HAL_FUNCS                  0x80003143
#define ERRCODE_IPC_UNDEFINED_ACTION                        0x80003144
#define ERRCODE_IPC_ASYNC_BUF_OVERFLOW                      0x80003145
#define ERRCODE_IPC_MAILBOX_STATUS_BUSY                     0x80003146
#define ERRCODE_IPC_MAILBOX_STATUS_IDLE                     0x80003147
#define ERRCODE_IPC_SLAVE_POWER_OFF                         0x80003148
#define ERRCODE_IPC_PEER_INT_NOT_READY                      0x80003149

/* Testsuite Error. */
#define ERRCODE_TEST_SUITE_STATUS_RETURN_CONTROL            0x80003160
#define ERRCODE_TEST_SUITE_OK                               0x80003161
#define ERRCODE_TEST_SUITE_UNKNOWN_FUNCTION                 0x80003162
#define ERRCODE_TEST_SUITE_ERROR_TIMED_OUT                  0x80003163
#define ERRCODE_TEST_SUITE_ERROR_BAD_PARAMS                 0x80003164
#define ERRCODE_TEST_SUITE_ERROR_PIN_ALLOCATION             0x80003165
#define ERRCODE_TEST_SUITE_ERROR_PIN_DEALLOCATION           0x80003166
#define ERRCODE_TEST_SUITE_ERROR_UNEXPECTED_INTERRUPT       0x80003167
#define ERRCODE_TEST_SUITE_ALLOC_FAILED                     0x80003168
#define ERRCODE_TEST_SUITE_CONFIG_FAILED                    0x80003169
#define ERRCODE_TEST_SUITE_UNKNOWN_COMMAND                  0x80003170
#define ERRCODE_TEST_SUITE_UNRECOGNIZED_COMMAND             0x80003171
#define ERRCODE_TEST_SUITE_TEST_FAILED                      0x80003172

/* DIAG Error */
#define ERRCODE_DIAG_STAT_INVALID_ID                        0x80003180 /* stat id is invalid */
#define ERRCODE_DIAG_NOT_INIT                       0x80003181 /* diag not initilizate */
#define ERRCODE_DIAG_NOT_FOUND                              0x80003182 /* diag id not found */
#define ERRCODE_DIAG_INVALID_PARAMETER                      0x80003183 /* parameter invalid */
/* If the return value is ERRCODE_DIAG_CONSUMED, it indicates that the user sends a response (local connection)
   to the host through the diag_send_ack_packet_prv API. The DIAG framework does not automatically */
#define ERRCODE_DIAG_CONSUMED                               0x80003184
#define ERRCODE_DIAG_TOO_SMALL_BUFFER                       0x80003185 /* too small buffer */
#define ERRCODE_DIAG_NO_MORE_DATA                           0x80003186 /* uart receive no more data */
#define ERRCODE_DIAG_NOT_ENOUGH_MEMORY                      0x80003187 /* malloc memory fail */
#define ERRCODE_DIAG_INVALID_HEAP_ADDR                      0x80003188 /* addr out of heap range */
#define ERRCODE_DIAG_NOT_CONNECT                            0x80003189 /* diag not connect */
#define ERRCODE_DIAG_BUSY                                   0x8000318A /* channel is busy */
#define ERRCODE_DIAG_TOO_LARGE_FRAME                        0x8000318B /* too large frame */
#define ERRCODE_DIAG_RAM_ALIGN                              0x8000318C /* ram addr not align */
#define ERRCODE_DIAG_NOT_SUPPORT                            0x8000318D /* not support */
#define ERRCODE_DIAG_QUEUE_FULL                             0x8000318E /* queue full */
#define ERRCODE_DIAG_MSG_CFG_NOT_ALLOW                      0x8000318F /* msg config allow send msg to pc */
#define ERRCODE_DIAG_TOO_LARGE_MSG                          0x80003190 /* too large msg */
#define ERRCODE_DIAG_INVALID_CODE_ADDR                      0x80003191 /* invalid code addr */
#define ERRCODE_DIAG_OBJ_NOT_FOUND                          0x80003192 /* object not found */
#define ERRCODE_DIAG_BLOCK_EMPTY                            0x80003193 /* buffer list is empty */
#define ERRCODE_DIAG_NOT_ENOUGH_SHARE_SPACE                 0x80003194 /* share space not enough */
#define ERRCODE_DIAG_CORRUPT_SHARED_MEMORY                  0x80003195 /* share space ctrl is corrupt */
#define ERRCODE_DIAG_NO_NEXT_MESSAGE                        0x80003196 /* no more msg in share mempry */
#define ERRCODE_DIAG_KV_NOT_SUPPORT_ID                      0x80003197 /* not support kv id */
#define ERRCODE_DIAG_BAD_DATA                               0x80003198 /* bad data */
#define ERRCODE_DIAG_CRC_ERROR                              0x80003199 /* crc error */

#define ERRCODE_DIAG_TRANSMIT_TIMEOUT                       0x80003200 /* transmit timeout */
#define ERRCODE_DIAG_TRANSMIT_USER_STOP                     0x80003201 /* transmit user stop */

/* LOG_STATS Error */
#define ERRCODE_DIAG_LOG_STATS_ALREADY_STARTED              0x80003202 /* stats already started */
#define ERRCODE_DIAG_LOG_STATS_INVALID_DURATION             0x80003203 /* invalid duration parameter */
#define ERRCODE_DIAG_LOG_STATS_TIMER_CREATE_FAIL            0x80003204 /* timer create failed */
#define ERRCODE_DIAG_LOG_STATS_TIMER_START_FAIL             0x80003205 /* timer start failed */
#define ERRCODE_DIAG_LOG_STATS_INVALID_MODE                 0x80003206 /* invalid stats mode */
#define ERRCODE_DIAG_LOG_STATS_NOT_PROGRESS                 0x80003207 /* Log statistics is not in progress */

/* Logfile Error */
#define ERRCODE_DFX_LOGFILE_INTERAL_FAIL                    0x80003210
#define ERRCODE_DFX_LOGFILE_RECORD_INVALID                  0x80003211
#define ERRCODE_DFX_LOGFILE_WRITE_FAIL                      0x80003212
#define ERRCODE_DFX_LOGFILE_OPEN_FAIL                       0x80003213
#define ERRCODE_DFX_LOGFILE_EVENT_FAILURE                   0x80003214
#define ERRCODE_DFX_LOGFILE_MUTEX_FAILURE                   0x80003215
#define ERRCODE_DFX_LOGFILE_TIMER_FAILURE                   0x80003216
#define ERRCODE_DFX_LOGFILE_THREAD_FAILURE                  0x80003217
#define ERRCODE_DFX_LOGFILE_ALREADY_OPEN                    0x80003218
#define ERRCODE_DFX_LOGFILE_MKDIR_FATAL                     0x80003219
#define ERRCODE_DFX_LOGFILE_SUSPENDED                       0x8000321A
#define ERRCODE_DFX_LOGFILE_NOT_INITIALIZED                 0x8000321B
#define ERRCODE_DFX_LOGFILE_NOT_OPEN                        0x8000321C
#define ERRCODE_DFX_LOGFILE_FLASH_PREPARE_FAIL              0x80003220
#define ERRCODE_DFX_LOGFILE_NOT_ENOUGH_SPACE                0x80003221

/* PM Error */
#define ERRCODE_PM_ERROR                                    0x80003230
#define ERRCODE_PM_INVALID_PARAMETER                        0x80003231
#define ERRCODE_PM_MEM_ALLOC_ERROR                          0x80003232
#define ERRCODE_PM_RET_MEM_FREE_ERROR                       0x80003233
#define ERRCODE_PM_CUSTOM_MODE_EXISTS                       0x80003234
#define ERRCODE_PM_SLEEP_THRESHOLD_TOO_SMALL                0x80003235
#define ERRCODE_PM_SWITCH_FUNC_NULL                         0x80003236
#define ERRCODE_PM_PF_IS_OFF                                0x80003237
#define ERRCODE_PM_SWITCH_FUNC_FAIL                         0x80003238
#define ERRCODE_PM_RECORD_REQ_STS_FAIL                      0x80003239
#define ERRCODE_PM_WFI_PROCESS                              0x80003240
#define ERRCODE_PM_WORK_PROCESS                             0x80003241
#define ERRCODE_PM_DEEPSLEEP_PROCESS                        0x80003242
#define ERRCODE_PM_LIGHTSLEEP_PROCESS                       0x80003243
#define ERRCODE_PM_SERV_ID_NOT_ENABLE                       0x80003244
#define ERRCODE_PM_MODE_DOWNGRADED                          0x80003245
#define ERRCODE_PM_MODE_ONLY_REMOVE_VOTE                    0x80003246
#define ERRCODE_PM_MODE_ONLY_JOIN_VOTE                      0x80003247

/* SDIO Device Error. */
#define ERRCODE_SDIO_NOT_INIT                               0x80003250
#define ERRCODE_SDIO_INVALID_PARAMETER                      0x80003251
#define ERRCODE_SDIO_REG_ADDR_INVALID                       0x80003252
#define ERRCODE_SDIO_ERR_OVERFLOW                           0x80003253
#define ERRCODE_SDIO_ERR_MSG_TO_HOST_NOT_READ               0x80003254
#define ERRCODE_SDIO_ERR_INIT_CARD_RDY_TIMEOUT              0x80003255
#define ERRCODE_SDIO_ERR_INIT_FUN1_RDY_TIMEOUT              0x80003256
#define ERRCODE_SDIO_ERR_STATUS                             0x80003257

/* Security Related Error. */
#define ERRCODE_SEC_KEY_GEN_INVALID_PARAM                   0x80003280
#define ERRCODE_SEC_IAMGE_ID_INVALID                        0x80003281

#define ERRCODE_SEC_IMAGE_MSID_INVALID                      0x80003290
#define ERRCODE_SEC_IMAGE_DIE_ID_INVALID                    0x80003291
#define ERRCODE_SEC_IMAGE_KEY_INVALID_PARAM                 0x80003292
#define ERRCODE_SEC_IMAGE_KEY_ID_INVALID                    0x80003293
#define ERRCODE_SEC_IMAGE_KEY_VERSION_INVALID               0x80003294
#define ERRCODE_SEC_IMAGE_KEY_AREA_VERIFY_FAILED            0x80003295
#define ERRCODE_SEC_IMAGE_KEY_LENGTH_INVALID                0x80003296

#define ERRCODE_SEC_IMAGE_INFO_INVALID_PARAM                0x800032a0
#define ERRCODE_SEC_IMAGE_INFO_ID_INVALID                   0x800032a1
#define ERRCODE_SEC_IMAGE_INFO_VERSION_INVALID              0x800032a2
#define ERRCODE_SEC_IMAGE_INFO_AREA_VERIFY_FAILED           0x800032a3

#define ERRCODE_SEC_IMAGE_CODE_INVALID_PARAM                0x800032b0
#define ERRCODE_SEC_IMAGE_CODE_CHECK_FAILED                 0x800032b1
#define ERRCODE_SEC_IMAGE_CODE_GET_HASH_FAILED              0x800032b2

/* SYS ctrl Related Error. */
#define ERRCODE_SYS_COMMU_INVALID_PARAM                     0x80003301
#define ERRCODE_SYS_COMMU_NO_RESOURCE                       0x80003302
/*
* 5 Wi - Fi (0x8000_4000 - 0x8000_5000)
*/

/*
* 6 AUDIO (0x8000_5000 - 0x8000_5800)
*/

/*
* 7 NFC (0x8000_5800 - 0x8000_6000)
*/

/*
* 8 BT (0x8000_6000 - 0x8000_7000)
*/

/*
* 9 DISPLAY (0x8000_7000 - 0x8000_8000)
*/

/*
* 10 PLC (0x8000_8000 - 0x8000_9000)
*/

/*
* 11 EPMU (0x8000_9000 - 0x8000_9400)
*/
#define ERRCODE_EPMU_CONFIG_ERR                             0x80009000
#define ERRCODE_EPMU_STAT_ERR                               0x80009001
#define ERRCODE_EPMU_NULL_PTR                               0x80009002
#define ERRCODE_EPMU_UNSUPPORT                              0x80009003
#define ERRCODE_EPMU_ADDR_ERR                               0x80009004
#define ERRCODE_EPMU_BUS_ERR                                0x80009005
#define ERRCODE_EPMU_TIMEOUT                                0x80009006
#define ERRCODE_EPMU_NV_ERR                                 0x80009007
#define ERRCODE_EPMU_NOT_INIT                               0x80009008

/*
* 12 GLP (0x8000_9400 - 0x8000_9800)
*/

/*
* 13 RADAR (0x8000_9800 - 0x8000_9C00)
*/

/*
* 14 TIOT_HOST (0x8000_9C00 - 0x8000_A000)
*/

/*
* 15 GNSS (0x8000_A000 - 0x8000_A400)
*/
#define ERRCODE_GNSS_CREATE_THREAD_FAILED                   0x8000A000
#define ERRCODE_GNSS_OPEN_GNSS_FAILED                       0x8000A001
#define ERRCODE_GNSS_CLOSE_GNSS_FAILED                      0x8000A002
#define ERRCODE_GNSS_CALLBACK_TYPE_ERROR                    0x8000A003
#define ERRCODE_GNSS_CALLBACK_FUNC_ERROR                    0x8000A004
#define ERRCODE_GNSS_CALLBACK_EXISTED                       0x8000A005
#define ERRCODE_GNSS_MESSAGE_TYPE_ERROR                     0x8000A006
#define ERRCODE_GNSS_MESSAGE_LEN_ERROR                      0x8000A007
#define ERRCODE_GNSS_MESSAGE_CHKSUM_ERROR                   0x8000A008
#define ERRCODE_GNSS_MESSAGE_SEND_TO_DEVICE_FAILED          0x8000A009
#define ERRCODE_GNSS_MESSAGE_WAIT_FOR_ACK_FAILED            0x8000A00A
#define ERRCODE_GNSS_CONFIG_ITEM_TYPE_ERROR                 0x8000A00B
#define ERRCODE_GNSS_CONFIG_ITEM_LEN_ERROR                  0x8000A00C
#define ERRCODE_GNSS_CONFIG_ITEM_PARA_ERROR                 0x8000A00D
#define ERRCODE_GNSS_CONFIG_ITEM_PROC_ERROR                 0x8000A00E

/*
* 16 SLEM (0x8000_A400 - 0x8000_A900)
*/
/* ======== RANGING ALG COMMON (0x8000A400 ~ 0x8000A450) ======== */
#define ERRCODE_RANGING_ALG_SUCCESS                         0
#define ERRCODE_RANGING_ALG_FAIL                            0x8000A400
#define ERRCODE_RANGING_ALG_MEMCPY_FAIL                     0x8000A401
#define ERRCODE_RANGING_ALG_MALLOC_FAIL                     0x8000A402
#define ERRCODE_RANGING_ALG_ZERO_FAIL                       0x8000A403
#define ERRCODE_RANGING_ALG_INVALID_PARAM                   0x8000A404
#define ERRCODE_RANGING_ALG_ABNORMAL_TIME_SM                0x8000A405
#define ERRCODE_RANGING_ALG_ABNORMAL_DIS_SM                 0x8000A406
#define ERRCODE_RANGING_ALG_ABNORMAL_DIS_MAIN_SM            0x8000A407
#define ERRCODE_RANGING_ALG_ABNORMAL_DIS_POS_SM             0x8000A408
#define ERRCODE_RANGING_ALG_INVALID_KEY_ID                  0x8000A409
#define ERRCODE_RANGING_ALG_KEY_SPACE_FULL                  0x8000A40A
#define ERRCODE_RANGING_ALG_ABNORMAL_PROB_SM                0x8000A40B
#define ERRCODE_RANGING_ALG_RSSI_ABNORMAL                   0x8000A40C
#define ERRCODE_RANGING_ALG_IQ_INTERFERENCE                 0x8000A40D
#define ERRCODE_RANGING_ALG_IQ_ALL_ZERO                     0x8000A40E
#define ERRCODE_RANGING_ALG_MATRIX_INV_FAIL                 0x8000A40F
#define ERRCODE_RANGING_ALG_TOF_IQ_NOTMATCH                 0x8000A410
#define ERRCODE_RANGING_ALG_IQ_LOW_ENERGY                   0x8000A411
#define ERRCODE_RANGING_ALG_TOF_SM_ABNORMAL                 0x8000A412
#define ERRCODE_RANGING_ALG_LOW_QUALITY_IQ                  0x8000A413
#define ERRCODE_RANGING_ALG_NOT_ENOUGH_IQ                   0x8000A414

/* ======== RANGING ALG FIND DEVICE (0x8000A450 ~ 0x8000A500) ======== */
#define ERRCODE_RANGING_ALG_BASE_FIND_DEVICE                0x8000A450
#define ERRCODE_RANGING_ALG_START_SM_LOW_ENERGY             0x8000A451

/* ======== LOCATING ALG COMMON (0x8000A500 ~ 0x8000A550) ======== */
#define ERRCODE_LOCATING_ALG_SUCCESS       					0
#define ERRCODE_LOCATING_ALG_FAIL          					0x8000A500
#define ERRCODE_LOCATING_ALG_MEMCPY_FAIL   					0x8000A501
#define ERRCODE_LOCATING_ALG_MALLOC_FAIL   					0x8000A502
#define ERRCODE_LOCATING_ALG_ZERO_FAIL     					0x8000A503
#define ERRCODE_LOCATING_ALG_INVALID_PARAM 					0x8000A504

/* ======== LOCATING ALG POSITION (0x8000A550 ~ 0x8000A650) ======== */
#define ERRCODE_POS_ALG_TOO_FAR        						0x8000A550
#define ERRCODE_POS_ALG_NOT_COMPLETE   						0x8000A551
#define ERRCODE_POS_ALG_DIS_INVALID    						0x8000A552
#define ERRCODE_POS_ALG_FIRST_CALC_FAIL 					0x8000A553

/* ======== LOCATING ALG LOCK/UNLOCK (0x8000A650 ~ 0x8000A725) ======== */
#define ERRCODE_LOCK_UNLOCK_ALG_FUSION_FAIL   				0x8000A650
#define ERRCODE_LOCK_UNLOCK_ALG_NOTRIGGER     				0x8000A651
#define ERRCODE_LOCK_UNLOCK_ABNORMAL_TIME_SM  				0x8000A652
#define ERRCODE_LOCK_UNLOCK_ALG_ABNORMAL_DIS_SM 			0x8000A653

/* ======== LOCATING ALG CAR IN/OUT (0x8000A725 ~ 0x8000A800) ======== */
#define ERRCODE_CAR_IN_OUT_ALG_NOT_SUPPORT      			0x8000A725
#define ERRCODE_CAR_IN_OUT_ALG_FAIL             			0x8000A726
#define ERRCODE_CAR_IN_OUT_ALG_INVALID_NV       			0x8000A727
#define ERRCODE_CAR_IN_OUT_ALG_INVALID_CONFIG   			0x8000A728
#define ERRCODE_CAR_IN_OUT_ALG_OOM              			0x8000A729
#define ERRCODE_CAR_IN_OUT_ALG_OOM_INFER        			0x8000A72A
#define ERRCODE_CAR_IN_OUT_ALG_MEMESET          			0x8000A72B
#define ERRCODE_CAR_IN_OUT_ALG_NEED_UPDATE      			0x8000A72C
#define ERRCODE_CAR_IN_OUT_ALG_DATA_INCOMPLETE  			0x8000A72D
/*
* 17 MEDIA (0x8000A900 - 0x8000_B000)
*/
#define ERRCODE_MEDIA_INVALID_PARAM                         0x8000A900
#define ERRCODE_MEDIA_INIT_FAIL                             0x8000A901
#define ERRCODE_MEDIA_ERR                                   0x8000A902
#define ERRCODE_MEDIA_PERMISSION_DENIED                     0x8000A903
#define ERRCODE_MEDIA_LITE_PLAYER_ERR                       0x8000A904
#define ERRCODE_MEDIA_LITE_PLAYER_NO_MEM                    0x8000A905
#define ERRCODE_MEDIA_LITE_PLAYER_FAIL                      0x8000A906
#define ERRCODE_MEDIA_LITE_PLAYER_INVALID_PARAM             0x8000A907
#define ERRCODE_MEDIA_LITE_PLAYER_RENDER_FATEL              0x8000A908
#define ERRCODE_MEDIA_LITE_PLAYER_INVALID_PTS               0x8000A909
#define ERRCODE_MEDIA_LITE_PLAYER_RENDER_FULL               0x8000A90A
#define ERRCODE_MEDIA_LITE_PLAYER_ERROR_DEMUX_FAIL          0x8000A90B
#define ERRCODE_MEDIA_LITE_PLAYER_ERROR_AUDIO_RUNNING_ERR   0x8000A90C
#define ERRCODE_MEDIA_LITE_PLAYER_ERROR_AUDIO_REWIND_ERR    0x8000A90D
#define ERRCODE_MEDIA_LITE_PLAYER_ERROR_EOF_TIME_OUT        0x8000A90E
#define ERRCODE_MEDIA_AUDIO_INVALID_OPERATION               0x8000A90F
#define ERRCODE_MEDIA_AUDIO_NO_INIT                         0x8000A910
#define ERRCODE_MEDIA_AUDIO_NO_MEM                          0x8000A911
#define ERRCODE_MEDIA_AUDIO_RETRY_READ                      0x8000A912
#define ERRCODE_MEDIA_AUDIO_DEAD_OBJECT                     0x8000A913
#define ERRCODE_MEDIA_AUDIO_BAD_STATE                       0x8000A914
#define ERRCODE_MEDIA_AUDIO_NOT_FOUND_ACTIVE_STREAM         0x8000A915
#define ERRCODE_MEDIA_AUDIO_NOT_TRACK_MODULE_VOLUME         0x8000A916

/*
* 18 SE-LiteOS (0x8000_B000 - 0x8000_B400)
*/

/* return when seliteos safety function verify failed. */
#define ERRCODE_SELITEOS_SAFETY_FUNCTION_REFUSE             0x8000B000

#ifdef CONFIG_ERRCODE_SUPPORT_REPORT
/**
 * @if Eng
 * @brief  Register the callback of errcode report.
 * @param  [in]  cb The callback of errcode report.
 * @else
 * @brief  注册errcode上报回调。
 * @param  [in]  cb Errcode上报回调。
 * @endif
 */
void uapi_errcode_register_report_callback(errcode_report_callback_t cb);

/**
 * @if Eng
 * @brief  Unregister the callback of errcode report.
 * @else
 * @brief  去注册errcode上报回调。
 * @endif
 */
void uapi_errcode_unregister_report_callback(void);

/**
 * @if Eng
 * @brief  Use the callback of errcode report.
 * @param  [in]  module Module ID.For details, @ref errcode_module_id_t.
 * @param  [in]  err Errcode of the module.
 * @else
 * @brief  调用errcode上报回调。
 * @param  [in]  module 模块ID号,参考 @ref errcode_module_id_t
 * @param  [in]  err 模块的errcode。
 * @endif
 */
void uapi_errcode_invoke_report(uint8_t module, errcode_t err);
#endif
/**
 * @}
 */

#ifdef __cplusplus
#if __cplusplus
}

#endif /* __cplusplus */
#endif /* __cplusplus */

#endif