#include "base_datatype_def.txt"

#include "extern_datatype_def.txt"

typedef unsigned long osal_u32;
typedef long osal_s32;
typedef unsigned long long osal_u64;
typedef long long osal_s64;
typedef unsigned short osal_u16;
typedef signed short osal_s16;
typedef unsigned char osal_u8;
typedef signed char osal_s8;
typedef void osal_void;
typedef char osal_char;
typedef unsigned char osal_uchar;
typedef osal_u8 osal_bool;
typedef void* osal_pvoid;
typedef osal_u8 osal_byte;
typedef osal_pvoid osal_handle;
typedef osal_byte* osal_pbyte;
typedef float osal_float;
typedef double osal_double;
typedef volatile osal_u32 osal_u32_reg;
typedef unsigned int osal_size_t;
typedef int osal_ssize_t;
typedef int osal_offset_t;
typedef int intptr_t;
typedef unsigned int uintptr_t;

typedef struct {
    osal_u8 value;
} uint8_es;

typedef struct {
    osal_u16 value;
} uint16_es;

typedef struct {
    osal_u32 value;
} uint32_es;

typedef struct {
    osal_bool value;
} bool_es;

typedef osal_u8 generic_array_es;

typedef osal_u8 undetermined_size_buffer[0];

typedef char undetermined_size_string[0];


typedef enum {




    SOC_ERR_SUCCESS = 0,
    SOC_ERR_FAILURE = 0xFFFFFFFF,
    SOC_ERR_MALLOC_FAILURE = 0x80000001,
    SOC_ERR_TIMEOUT = 0x80000002,
    SOC_ERR_MEMCPYS_FAIL = 0x80000003,
    SOC_ERR_MEMSETS_FAIL = 0x80000004,
    SOC_ERR_BUSY = 0x80000005,
    SOC_ERR_INVALID_PARAMETER = 0x80000006,
    SOC_ERR_INSUFFICIENT_DATA = 0x80000007,
    SOC_ERR_INCORRECT_ID = 0x80000008,
    SOC_ERR_INCORRECT_VER = 0x80000009,
    SOC_ERR_BAD_CHECKSUM = 0x8000000A,
    SOC_ERR_BLOCKED = 0x8000000B,
    SOC_ERR_WRONG_CORE = 0x8000000C,
    SOC_ERR_NOT_INITIALISED = 0x8000000D,
    SOC_ERR_INVALID_STATE = 0x8000000E,
    SOC_ERR_NOT_IMPLEMENTED = 0x8000000F,




    SOC_ERR_MEM_INVALID_PARAM = 0x80000081,
    SOC_ERR_MEM_GET_OS_INFO_NOK = 0x80000082,
    SOC_ERR_OS_STAT_INVALID_PARAM = 0x80000083,
    SOC_ERR_OS_MUTEX_ACQUIRE = 0x80000084,
    SOC_ERR_OS_MUTEX_RELEASE = 0x80000085,
    SOC_ERR_OS_GET_TASK_INFO_INVALID_PARAM = 0x80000086,
    SOC_ERR_OS_GET_TASK_INFO_OS_ERR = 0x80000087,



    SOC_ERR_KV_NOT_INITIALISED = 0x80000300,
    SOC_ERR_KV_ERROR_IN_PARAMETERS = 0x80000301,
    SOC_ERR_KV_ERROR_ERASING_PAGE = 0x80000302,
    SOC_ERR_KV_NOT_ENOUGH_SPACE = 0x80000303,
    SOC_ERR_KV_KEY_NOT_FOUND = 0x80000304,
    SOC_ERR_KV_TRYING_TO_MODIFY_A_PERMANENT_KEY = 0x80000305,
    SOC_ERR_KV_WRITE_VETOED = 0x80000306,
    SOC_ERR_KV_DEFRAGMENTATION_NEEDED = 0x80000307,
    SOC_ERR_KV_INVALID_STORE = 0x80000308,
    SOC_ERR_KV_WRITE_BUFFER_NOT_ALLOCATED = 0x80000309,
    SOC_ERR_KV_KEY_HEADER_BUFFER_NOT_ALLOCATED = 0x8000030A,
    SOC_ERR_KV_KEY_DATA_BUFFER_NOT_ALLOCATED = 0x8000030B,
    SOC_ERR_KV_KEY_HASH_BUFFER_NOT_ALLOCATED = 0x8000030C,
    SOC_ERR_KV_WRITE_BUFFER_TOO_SMALL = 0x8000030D,
    SOC_ERR_KV_KEY_HASH_BUFFER_TOO_SMALL = 0x8000030E,
    SOC_ERR_KV_GET_BUFFER_TOO_SMALL = 0x8000030F,
    SOC_ERR_KV_AES_UNAVAILABLE = 0x80000310,
    SOC_ERR_KV_HASH_UNAVAILABLE = 0x80000311,
    SOC_ERR_KV_INVALID_PAGE = 0x80000312,
    SOC_ERR_KV_ZERO_LENGTH_COPY = 0x80000313,
    SOC_ERR_KV_LENGTH_MISMATCH = 0x80000314,
    SOC_ERR_KV_HASH_MISMATCH = 0x80000315,
    SOC_ERR_KV_DATA_MISMATCH = 0x80000316,
    SOC_ERR_KV_SEARCH_PATTERN_MISMATCH = 0x80000317,
    SOC_ERR_KV_SEARCH_KEY_TYPE_MISMATCH = 0x80000318,
    SOC_ERR_KV_SEARCH_KEY_STATE_MISMATCH = 0x80000319,
    SOC_ERR_KV_INVALID_KEY_HEADER = 0x8000031A,
    SOC_ERR_KV_PAGE_NOT_FOUND = 0x8000031B,
    SOC_ERR_KV_STATE_INVALID = 0x8000031C,
    SOC_ERR_KV_KEY_NOT_IN_WRITE_QUEUE = 0x8000031D,
    SOC_ERR_KV_BUFFER_PRIMED_PREMATURELY = 0x8000031E,
    SOC_ERR_KV_FAILURE = 0x8000031F,





    SOC_ERR_IO_NOT_INIT = 0x80001041,
    SOC_ERR_IO_INVALID_PARAMETER = 0x80001042,
    SOC_ERR_IO_RELEASE_ERROR = 0x80001043,
    SOC_ERR_IO_SET_FUNC_ERROR = 0x80001044,
    SOC_ERR_IO_GET_FUNC_ERROR = 0x80001045,
    SOC_ERR_IO_GET_PULL_ERROR = 0x80001046,
    SOC_ERR_IO_GET_STRENGTH_ERROR = 0x80001047,
    SOC_ERR_IO_GET_SLEW_ERROR = 0x80001048,
    SOC_ERR_IO_GET_TRIGGER_ERROR = 0x80001049,
    SOC_ERR_IO_FAILURE = 0x8000104A,


    SOC_ERR_GPIO_NOT_INIT = 0x80001081,
    SOC_ERR_GPIO_INVALID_PARAMETER = 0x80001082,
    SOC_ERR_GPIO_PIN_ERROR = 0x80001083,
    SOC_ERR_GPIO_DIR_ERROR = 0x80001084,
    SOC_ERR_GPIO_FAILURE = 0x80001085,


    SOC_ERR_UART_INVALID_PARAMETER = 0x800010C1,
    SOC_ERR_UART_INVALID_SUSPEND = 0x800010C2,
    SOC_ERR_UART_INVALID_PARITY = 0x800010C3,
    SOC_ERR_UART_INVALID_DATA_BITS = 0x800010C4,
    SOC_ERR_UART_INVALID_STOP_BITS = 0x800010C5,
    SOC_ERR_UART_INVALID_BAUD = 0x800010C6,
    SOC_ERR_UART_INVALID_COM_PORT = 0x800010C7,
    SOC_ERR_UART_SW_BUF_CREATE_FAIL = 0x800010C8,
    SOC_ERR_UART_NOT_SUPPORT = 0x800010C9,
    SOC_ERR_UART_INVALID_ID = 0x800010CA,
    SOC_ERR_UART_CREATE_EVENT_FAIL = 0x800010CB,
    SOC_ERR_UART_OPEN_TX_DMA_CHN_FAIL = 0x800010CC,
    SOC_ERR_UART_CLOSE_TX_DMA_CHN_FAIL = 0x800010CD,
    SOC_ERR_UART_TX_DMA_NOT_ENABLED = 0x800010CE,
    SOC_ERR_UART_CFG_NOT_SUPPORT_NONE_FIFO = 0x800010CF,
    SOC_ERR_UART_DRIVER_RESOURCE_REINIT = 0x800010D1,
    SOC_ERR_UART_DEVICE_RESOURCE_REINIT = 0x800010D2,
    SOC_ERR_UART_INVALID_FLOW_CTRL = 0x800010D3,
    SOC_ERR_UART_BUF_DEINIT_FAIL = 0x800010D4,
    SOC_ERR_UART_DEINIT_WRITTING_READING = 0x800010D5,
    SOC_ERR_UART_SEND_XON_FAIL = 0x800010D6,
    SOC_ERR_UART_SEND_XOFF_FAIL = 0x800010D7,
    SOC_ERR_UART_MEM_OPT_FAIL = 0x800010D8,
    SOC_ERR_UART_RX_BUF_NOT_CREATED = 0x800010D9,


    SOC_ERR_SPI_NOT_INIT = 0x80001101,
    SOC_ERR_SPI_INVALID_PARAMETER = 0x80001102,
    SOC_ERR_SPI_PIN_ERROR = 0x80001103,
    SOC_ERR_SPI_BUSY = 0x80001104,
    SOC_ERR_SPI_FAILURE = 0x80001105,
    SOC_ERR_SPI_ALREADY_INIT = 0x80001106,
    SOC_ERR_SPI_WRITE_TIMEOUT = 0x80001107,
    SOC_ERR_SPI_READ_TIMEOUT = 0x80001108,
    SOC_ERR_SPI_MODE_ERROR = 0x80001109,
    SOC_ERR_SPI_DMA_OPEN_FAILURE = 0x8000110A,
    SOC_ERR_SPI_DMA_TRANSFER_FAILURE = 0x8000110B,


    SOC_ERR_I2C_NOT_INIT = 0x80001141,
    SOC_ERR_I2C_INVALID_PARAMETER = 0x80001142,
    SOC_ERR_I2C_PIN_ERROR = 0x80001143,
    SOC_ERR_I2C_BUSY_ERROR = 0x80001144,
    SOC_ERR_I2C_SEND_DATA_ERROR = 0x80001145,
    SOC_ERR_I2C_RECEIVE_DATA_ERROR = 0x80001146,
    SOC_ERR_I2C_ACK_ERROR = 0x80001147,
    SOC_ERR_I2C_ARB_ERROR = 0x80001148,
    SOC_ERR_I2C_TIMEOUT_ERROR = 0x80001149,
    SOC_ERR_I2C_FAILURE = 0x8000114A,
    SOC_ERR_I2C_IS_INITIALIZED = 0x8000114B,


    SOC_ERR_PWM_NOT_INIT = 0x80001181,
    SOC_ERR_PWM_INVALID_PARAMETER = 0x80001182,
    SOC_ERR_PWM_PIN_ERROR = 0x80001183,
    SOC_ERR_PWM_FAILURE = 0x80001184,
    SOC_ERR_PWM_UNSUPPORT_DUTY_RATIO = 0x80001185,


    SOC_ERR_FLASH_NOT_INIT = 0x800011C1,
    SOC_ERR_FLASH_INVALID_PARAMETER = 0x800011C2,
    SOC_ERR_FLASH_NOT_ENOUGH_SPACE = 0x800011C3,
    SOC_ERR_FLASH_ERASE_TIMEOUT = 0x800011C4,
    SOC_ERR_FLASH_WRITE_TIMEOUT = 0x800011C5,
    SOC_ERR_FLASH_FAILURE = 0x800011C6,


    SOC_ERR_DMA_INVALID_PARA = 0x80001201,
    SOC_ERR_DMA_NOT_INIT = 0x80001202,
    SOC_ERR_DMA_BUSY = 0x80001203,
    SOC_ERR_DMA_TRANSFER_FAIL = 0x80001204,
    SOC_ERR_DMA_TRANSFER_TIMEOUT = 0x80001205,
    SOC_ERR_DMA_GET_NOTE_FAIL = 0x80001206,
    SOC_ERR_DMA_LLI_NOT_CREATE = 0x80001207,
    SOC_ERR_DMA_NO_AVAIL_CONTROLLER = 0x80001208,
    SOC_ERR_DMA_NO_AVAIL_CH = 0x80001209,
    SOC_ERR_DMA_UNSUPPORTED_PERIPHERAL = 0x8000120A,
    SOC_ERR_DMA_NOT_SUPPORTED_CONFIG = 0x8000120B,
    SOC_ERR_DMA_ERROR_CONFIG = 0x8000120C,
    SOC_ERR_DMA_INCOMPLETE_CONFIG = 0x8000120D,

    SOC_ERR_DMA_ONE_TIME_BATCHED_CONFIGS_EXCEEDED = 0x8000120E,

    SOC_ERR_DMA_CONFIG_QUEUE_FULL = 0x8000120F,

    SOC_ERR_DMA_OUT_OF_MEMORY = 0x80001210,
    SOC_ERR_DMA_NO_AVAIL_FREE_CONFIG = 0x80001211,

    SOC_ERR_DMA_CHANNEL_NOT_OPEN = 0x80001212,
    SOC_ERR_DMA_SLEEP_VETO_ERR = 0x80001213,


    SOC_ERR_WDT_PARA_ERROR = 0x80001241,


    SOC_ERR_HWI_INVALID_NUM = 0x80001281,


    SOC_ERR_TIMER_NO_VALID_TIMER = 0x800012C1,
    SOC_ERR_TIMER_INVALID_PARAMETER = 0x800012C2,


    SOC_ERR_SOC_COPY_INVALID_PARA = 0x80001301,
    SOC_ERR_SOC_COPY_BUSY = 0x80001302,
    SOC_ERR_SOC_COPY_ERR = 0x80001303,


    SOC_ERR_SWI_INVALID_ID = 0x80001341,


    SOC_ERR_ANALOG_MUTEX_ERROR = 0x80001381,
    SOC_ERR_ANALOG_RESOURCE_BUSY = 0x80001382,
    SOC_ERR_ANALOG_RESOURCE_CONNECT_ERROR = 0x80001383,
    SOC_ERR_ANALOG_RESOURCE_FREE_ERROR = 0x80001384,
    SOC_ERR_ANALOG_VOL_TYPE_ERROR = 0x80001385,
    SOC_ERR_ANALOG_READ_VOL_ERROR = 0x80001386,
    SOC_ERR_ANALOG_AIO_PIN_ERROR = 0x80001387,
    SOC_ERR_ANALOG_IDRV_INVALID_RANGE = 0x80001388,
    SOC_ERR_ANALOG_COMP_NUMBER_ERROR = 0x80001389,
    SOC_ERR_ANALOG_COMP_INVALID_RANGE = 0x8000138A,
    SOC_ERR_ANALOG_VALUE_SET_ERROR = 0x8000138B,
    SOC_ERR_ANALOG_CORE_NOT_SUPPORT = 0x8000138C,
    SOC_ERR_ANALOG_PARAMETER_ERROR = 0x8000138D,
    SOC_ERR_ANALOG_FUNC_UNREADY_ERROR = 0x8000138E,
    SOC_ERR_ANALOG_ADC_TIME_OUT_ERROR = 0x8000138F,
    SOC_ERR_ANALOG_ADC_NOT_CALIBRATE_ERROR = 0x80001391,
    SOC_ERR_ANALOG_RESOURCE_NOT_OWNED_ERROR = 0x80001392,
    SOC_ERR_ANALOG_COMP_NOT_SET_AIO_PIN = 0x80001393,
    SOC_ERR_ANALOG_OTP_VALUE_GET_ERROR = 0x80001394,
    SOC_ERR_ANALOG_AIO_FUNC_ERROR = 0x80001395,


    SOC_ERR_PATCH_INVALI_PARAM = 0x800013C1,
    SOC_ERR_PATCH_NOT_ENOUGH_PATCH = 0x800013C2,


    SOC_ERR_EDGE_NOT_INIT = 0x80001401,
    SOC_ERR_EDGE_INVALID_PARAMETER = 0x80001402,
    SOC_ERR_EDGE_ERROR = 0x80001403,


    SOC_ERR_RPC_BLE_NOT_INITIALISED = 0x80001421,
    SOC_ERR_RPC_BLE_PARAMETERS_ERROR = 0x80001422,
    SOC_ERR_RPC_BLE_NOT_ENOUGH_SPACE = 0x80001423,
    SOC_ERR_RPC_BLE_NO_NEXT_MESSAGE = 0x80001424,
    SOC_ERR_RPC_BLE_CORRUPT_SHARED_MEMORY = 0x80001425,
    SOC_ERR_RPC_BLE_WAIT_TIMEOUT = 0x80001426,
    SOC_ERR_RPC_BLE_OS_SEMAPHORE_ERROR = 0x80001427,
    SOC_ERR_FLASH_TASK_DISCARD = 0x80002040,





    SOC_ERR_FLASH_TASK_DISCARDED = 0x80002041,




    SOC_ERR_FLASH_TASK_READY = 0x80002042,





    SOC_ERR_FLASH_TASK_BEING_PROCESSED = 0x80002043,





    SOC_ERR_FLASH_TASK_COMPLETED = 0x80002044,




    SOC_ERR_FLASH_TASK_WRONG_STRUCT_IDENTIFIER = 0x80002045,

    SOC_ERR_FLASH_TASK_NO_MORE_TASKS = 0x80002046,

    SOC_ERR_FLASH_TASK_ONLY_PENDING_TASKS = 0x80002047,

    SOC_ERR_FLASH_TASK_IN_PROGRESS = 0x80002048,

    SOC_ERR_FLASH_TASK_NOT_FOUND = 0x80002049,

    SOC_ERR_FLASH_TASK_ALREADY_DONE = 0x8000204A,

    SOC_ERR_FLASH_TASK_REQUESTED_QUEUE = 0x8000204B,







    SOC_ERR_CYCBUF_NOT_ENOUGH_HANDLE = 0x80003041,
    SOC_ERR_CYCBUF_INVALID_HANDLE = 0x80003042,
    SOC_ERR_CYCBUF_MALLOC_FAIL = 0x80003043,
    SOC_ERR_CYCBUF_BUSY = 0x80003044,
    SOC_ERR_CYCBUF_NO_DATA = 0x80003045,
    SOC_ERR_CYCBUF_MEMOPT_FAIL = 0x80003046,
    SOC_ERR_CYCBUF_SUB_INVALID_FREE_LEN = 0x80003047,
    SOC_ERR_CYCBUF_SUB_INVALID_USED_LEN = 0x80003048,


    SOC_ERR_IRQ_REQUEST_FAIL = 0x80003081,
    SOC_ERR_IRQ_FREE_FAIL = 0x80003082,


    SOC_ERR_RAND_NOT_SUPPORT_CRYPT_RAND = 0x800030c1,

    SOC_ERR_CORE_MUTEX_INVALID_ID = 0x80003101,
    SOC_ERR_CORE_MUTEX_GET_FAIL = 0x80003102,
    SOC_ERR_CORE_MUTEX_GET_TIME_OUT = 0x80003103,

    SOC_ERR_TRACK_INIT_FAIL = 0x80003141,
    SOC_ERR_TRACK_START_FAIL = 0x80003142,
    SOC_ERR_TRACK_DEINIT_FAIL = 0x80003143,
    SOC_ERR_TRACK_GET_INFO_FAIL = 0x80003144,
    SOC_ERR_TRACK_RECORD_FAIL = 0x80003145,


    SOC_ERR_DIAG_STAT_INVALID_ID = 0x80003181,
    SOC_ERR_DIAG_NO_INITILIZATION = 0x80003182,
    SOC_ERR_DIAG_NOT_FOUND = 0x80003183,
    SOC_ERR_DIAG_INVALID_PARAMETER = 0x80003184,


    SOC_ERR_DIAG_CONSUMED = 0x80003185,
    SOC_ERR_DIAG_TOO_SMALL_BUFFER = 0x80003186,
    SOC_ERR_DIAG_NO_MORE_DATA = 0x80003187,
    SOC_ERR_DIAG_NOT_ENOUGH_MEMORY = 0x80003188,
    SOC_ERR_DIAG_INVALID_HEAP_ADDR = 0x80003189,
    SOC_ERR_DIAG_NOT_CONNECT = 0x8000318a,
    SOC_ERR_DIAG_BUSY = 0x8000318b,
    SOC_ERR_DIAG_TOO_LARGE_FRAME = 0x8000318c,
    SOC_ERR_DIAG_RAM_ALIGN = 0x8000318d,
    SOC_ERR_DIAG_NOT_SUPPORT = 0x8000318e,
    SOC_ERR_DIAG_QUEUE_FULL = 0x8000318f,
    SOC_ERR_DIAG_MSG_CFG_NOT_ALLOW = 0x80003190,
    SOC_ERR_DIAG_TOO_LARGE_MSG = 0x80003191,
    SOC_ERR_DIAG_INVALID_CODE_ADDR = 0x80003192,
    SOC_ERR_DIAG_OBJ_NOT_FOUND = 0x80003193,
    SOC_ERR_DIAG_BLOCK_EMPTY = 0x80003194,
    SOC_ERR_DIAG_NOT_ENOUGH_SHARE_SPACE = 0x80003195,
    SOC_ERR_DIAG_CORRUPT_SHARED_MEMORY = 0x80003196,
    SOC_ERR_DIAG_NO_NEXT_MESSAGE = 0x80003197,
    SOC_ERR_DIAG_KV_NOT_SUPPORT_ID = 0x80003198,
    SOC_ERR_DIAG_BAD_DATA = 0x80003199,
    SOC_ERR_DIAG_MEMMOVE_FAIL = 0x8000319a,
} soc_errno;
typedef enum {

    FLASH_TASK_KV_DATA = 0,

    FLASH_TASK_KV_ATTRIBUTE,

    FLASH_TASK_KV_ERASE,

    FLASH_TASK_KV_ERASE_ALL,

    FLASH_TASK_FOTA_DATA,

    FLASH_TASK_FOTA_ERASE,

    FLASH_TASK_ACPU_DATA,

    FLASH_TASK_ACPU_ERASE,

    FLASH_TASK_NUM_TYPES,
} flash_task_type;


typedef osal_u16 kv_storage_key;

typedef struct {
    const osal_u8 *kvalue;
    kv_storage_key key;
    osal_u16 kvalue_length;
    osal_u8 attribute;
} flash_task_kv_data;

typedef struct {
    kv_storage_key key;
    osal_u8 attribute;
} flash_task_kv_attribute;

typedef struct {
    kv_storage_key key;
} flash_task_kv_erase;

typedef struct {
    kv_storage_key key;
} flash_task_kv_backup;

typedef struct {

    osal_u8 magic_value[10];
} kv_erase_all;

typedef struct {
    osal_u8 *src;
    osal_u8 *dst;
    osal_u16 length;
} flash_task_flash_data;

typedef struct {
    osal_u32 start_address;
    osal_u32 length;
} flash_task_flash_erase;

typedef union {
    flash_task_kv_data kv;
    flash_task_kv_attribute kv_attribute;
    flash_task_kv_erase kv_erase;
    flash_task_kv_backup kv_backup;
    flash_task_flash_data flash;
    flash_task_flash_erase flash_erase;
} task_node_data;

typedef struct owner_callback_data owner_callback;
typedef soc_errno (*flash_task_completed_callback)(soc_errno result, owner_callback *callback);

struct owner_callback_data {

    flash_task_completed_callback func;

};

typedef struct flash_task_description flash_task_node;
struct flash_task_description {

    osal_u32 identifier;

    volatile flash_task_node* volatile next;







    owner_callback *owner_callback;
    volatile osal_u32 state_code;

    flash_task_type task;

    task_node_data data;

    osal_u32 checksum;
};


typedef struct {
    osal_u32 id;
    osal_u32 struct_ver;
    osal_u32 process_req;
    osal_u32 result_code;
    osal_u32 sebl_tasks;
    osal_u32 semain_tasks;
    osal_u8 key_areas[0x4C0];
    osal_u32 kv_tasks_result;

    osal_u8 reserved[4];
} fota_section_header;


typedef enum {

    SOC_ID_TYPE_SERIAL_NUMBER = 0,

    SOC_ID_TYPE_PACKED_IMEI,

    SOC_ID_TYPE_PACKED_SVN,
    SOC_ID_MAX_SETTABLE = SOC_ID_TYPE_PACKED_SVN,

    SOC_ID_TYPE_DIEID,

    SOC_ID_SEC_ROM_VER,

    SOC_ID_SEC_DIGITAL_VER,

    SOC_ID_SEC_SUPPORTED_RPC_VER,

    SOC_ID_SEC_CURRENT_RPC_VER,

    SOC_ID_SEBL_VER,

    SOC_ID_SEMAIN_VER,

    SOC_ID_SERECOVERY_VER,

    SOC_ID_PCPU_VER,

    SOC_ID_ACPU_VER,

    SOC_ID_PARAM_CHK,

    SOC_ID_SEBL_CODE_HDR_CHK,

    SOC_ID_SEMAIN_CODE_HDR_CHK,

    SOC_ID_SERECOVERY_CODE_HDR_CHK,

    SOC_ID_PCPU_CODE_HDR_CHK,

    SOC_ID_ACPU_CODE_HDR_CHK,

    SOC_ID_SEBL_SIGN_CHK,

    SOC_ID_SEMAIN_SIGN_CHK,

    SOC_ID_SERECOVERY_SIGN_CHK,

    SOC_ID_PCPU_SIGN_CHK,

    SOC_ID_ACPU_SIGN_CHK,

    SOC_ID_CHIP_TYPE,


    SOC_ID_NUM,

    SOC_ID_UNKNOWN
} soc_id_type;

typedef enum {
    SOC_ID_CONFIG_FLASH_NON_PERM = 0,
    SOC_ID_CONFIG_FLASH_PERM,
    SOC_ID_CONFIG_OTP
} soc_ntpermid_type;

typedef enum {
    SOC_ID_NB_BLE = 0,
    SOC_ID_NB_ONLY,
    SOC_ID_NB_BLE_GNSS
} soc_chip_type;


typedef enum U8 {
    SOC_IO_PIN_0 = 0,
    SOC_IO_PIN_1 = 1,
    SOC_IO_PIN_2 = 2,
    SOC_IO_PIN_3 = 3,
    SOC_IO_PIN_4 = 4,
    SOC_IO_PIN_5 = 5,
    SOC_IO_PIN_6 = 6,
    SOC_IO_PIN_7 = 7,
    SOC_IO_PIN_8 = 8,
    SOC_IO_PIN_9 = 9,
    SOC_IO_PIN_10 = 10,
    SOC_IO_PIN_11 = 11,
    SOC_IO_PIN_12 = 12,
    SOC_IO_PIN_13 = 13,
    SOC_IO_PIN_14 = 14,
    SOC_IO_PIN_15 = 15,
    SOC_IO_PIN_16 = 16,
    SOC_IO_PIN_17 = 17,
    SOC_IO_PIN_18 = 18,
    SOC_IO_PIN_19 = 19,
    SOC_IO_PIN_20 = 20,
    SOC_IO_PIN_21 = 21,
    SOC_IO_PIN_22 = 22,
    SOC_IO_PIN_23 = 23,
    SOC_IO_PIN_24 = 24,
    SOC_IO_PIN_25 = 25,
    SOC_IO_PIN_26 = 26,
    SOC_IO_PIN_27 = 27,
    SOC_IO_PIN_28 = 28,
    SOC_IO_PIN_29 = 29,
    SOC_IO_PIN_30 = 30,
    SOC_IO_PIN_31 = 31,
    SOC_IO_PIN_32 = 32,
    SOC_IO_PIN_33 = 33,
    SOC_IO_PIN_34 = 34,
    SOC_IO_PIN_35 = 35,
    SOC_IO_PIN_36 = 36,
    SOC_IO_PIN_37 = 37,
    SOC_IO_PIN_38 = 38,
    SOC_IO_PIN_39 = 39,
    SOC_IO_PIN_NONE = 40,
} soc_io_pin;


typedef enum U8 {
    PMU_VDD_IO_BANK_F = 0,
    PMU_VDD_IO_BANK_A = 1,
    PMU_VDD_IO_BANK_B = 2,
    PMU_VDD_IO_BANK_C = 3,
    PMU_VDD_IO_BANK_D = 4,

    PMU_VDD_IO_BANK_UNKNOWN = 5
} pmu_vdd_io_bank;




typedef enum U8 {
    PMU_VDD_IO_LEVEL_1V5 = 0,
    PMU_VDD_IO_LEVEL_1V8 = 1,
    PMU_VDD_IO_LEVEL_1V875 = 2,
    PMU_VDD_IO_LEVEL_1V95 = 3,
    PMU_VDD_IO_LEVEL_2V1 = 4,
    PMU_VDD_IO_LEVEL_2V7 = 5,
    PMU_VDD_IO_LEVEL_3V0 = 6,
    PMU_VDD_IO_LEVEL_3V3 = 7,
    PMU_VDD_IO_LEVEL_1V8_BYPASS = 8,
    PMU_VDD_IO_LEVEL_VBAT = 9,
    PMU_VDD_IO_LEVEL_OFF = 10,
    PMU_VDD_IO_LEVEL_UNKNOWN = 11,
} pmu_vdd_io_level;


typedef enum {
    SECURITY_KEYS_UE_BLE_AUTH_SIZE_KEY = 0x1A02,
    SECURITY_KEYS_UE_BLE_AUTH_VALUE_KEY = 0x1A03,




    SECURITY_KEYS_UE_SERIAL_NUMBER_KEY = 0x2100,
    SECURITY_KEYS_UE_PACKED_IMEI_KEY = 0x2101,
    SECURITY_KEYS_UE_PACKED_SVN_KEY = 0x2102,





    SECURITY_KEYS_MAX = 0xffff
} security_keys;





typedef struct {
    osal_u8 value[16];
} security_keys_ue_serial_number;

typedef struct {
    osal_u8 value[8];
} security_keys_ue_packed_imei;

typedef struct {
    osal_u8 value[1];
} security_keys_ue_packed_svn;








typedef enum {


    SOC_SYSTEM_INFO_PAD_BYTE = 0,

    SOC_SYSTEM_INFO_ATE_COMP_REF,

    SOC_SYSTEM_INFO_ATE_IDRV,

    SOC_SYSTEM_INFO_ATE_VREF,

    SOC_SYSTEM_INFO_ATE_TEMP_COEFF_A,

    SOC_SYSTEM_INFO_ATE_TEMP_COEFF_B,

    SOC_SYSTEM_INFO_ATE_RTC_FREQ_TRIM,

    SOC_SYSTEM_INFO_BEST_CAL_RTC_FREQ,

    SOC_SYSTEM_INFO_ATE_NUM_WAIT_CLKS,

    SOC_SYSTEM_INFO_ATE_RF_BANDGAP_VOLTAGE,

    SOC_SYSTEM_INFO_ATE_RF_RCAL,

    SOC_SYSTEM_INFO_CORE_MAPPED_MEM_INFO,

    SOC_SYSTEM_INFO_KV_INFO,

    SOC_SYSTEM_INFO_IMAGE_INFO_SEBL,

    SOC_SYSTEM_INFO_IMAGE_INFO_SEMAIN,

    SOC_SYSTEM_INFO_IMAGE_INFO_SERECOVERY,

    SOC_SYSTEM_INFO_IMAGE_INFO_PCPU,

    SOC_SYSTEM_INFO_IMAGE_INFO_ACPU,


    SOC_SYSTEM_INFO_NUM_VALUES
} soc_system_info;

typedef struct {

    osal_u32 exe_start;
    osal_u32 exe_length;


    osal_u32 storage_start;
    osal_u32 storage_length;


    osal_u32 fota_start;
    osal_u32 fota_length;

    osal_u32 pcpu_data_start;
    osal_u32 pcpu_data_length;

    osal_u32 ram0_start;
    osal_u32 ram0_length;

    osal_u32 ram1_start;
    osal_u32 ram1_length;


    osal_u32 shared_ram_start;
    osal_u32 shared_ram_length;
} soc_system_info_core_mapped_mem_info;


typedef struct {
    osal_u8 dummy;
} soc_system_info_kv_info;


typedef enum U8 {
    INSTALL_TYPE_UNKNOWN,
    INSTALL_TYPE_NOT_SET,
    INSTALL_TYPE_NEED_SHA256,
    INSTALL_TYPE_NEED_SIGNATURE
}INSTALL_TYPE;


typedef enum U8 {
    SOC_UPDATE_STAGE_UPGRADE_INIT = 0,
    SOC_UPDATE_STAGE_UPGRADE_SUCC = 1,
    SOC_UPDATE_STAGE_VALIDATE_FAIL = 5,
    SOC_UPDATE_STAGE_UPGRADE_FAIL = 8,
    SOC_UPDATE_STAGE_MAX
} SOC_UPDATE_STAGE;




typedef enum U8 {
    SOC_UPDATE_OTA_PACKAGE_OK,
    SOC_UPDATE_OTA_PACKAGE_CORRUPT,
    SOC_UPDATE_OTA_PACKAGE_NOT_PROCESSED,
    SOC_UPDATE_OTA_PACKAGE_VALIDATION_FAILURE,
    SOC_UPDATE_OTA_PACKAGE_UNSUPPORTED_OPTIONS,
    SOC_UPDATE_OTA_PACKAGE_VERSION_MISMATCHED,
    SOC_UPDATE_OTA_PACKAGE_ELEMENT_TOO_LONG,
    SOC_UPDATE_OTA_PACKAGE_REGION_LOST,
    SOC_UPDATE_OTA_PACKAGE_SIGNATURE_OR_HASH_LACKED,
    SOC_UPDATE_OTA_PACKAGE_NOT_DOWNLOADED,
} SOC_UPDATE_OTA_PACKAGE_STATUS;
