* Copyright (c) 2025 Huawei Technologies Co., Ltd.
* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
* CANN Open Software License Agreement Version 2.0 (the "License").
* Please refer to the License for details. You may not use this file except in compliance with the License.
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
* See LICENSE in the root of the software repository for the full text of the License.
*/
#ifndef __CONFIG_H
#define __CONFIG_H
#ifndef NULL
#define NULL (0L)
#endif
* 用户配置区静态选项
*/
#define CURRENT_USER_CONFIG_VERSION 1
#define UC_FLASH_MAIN_ADDR 0x3E00000
#define UC_FLASH_BK_ADDR 0x3F00000
#define UC_FLASH_DEV_OFFSET 0
#define UC_FLASH_PARTITION_NUM 32
#define UC_FLASH_PARTITION_MAIN_NUM 16
#define UC_FLASH_PARTITION_BK_NUM 16
#define UC_FLASH_PARTITION_SIZE (64 * 1024)
#define UC_VERION_FLASH_OFFSET 0
#define UC_CONFIG_FLASH_OFFSET 4
#define UC_CHECK_FLASH_OFFSET (64 * 1024 - 4 - 32)
#define UC_VALID_FLASH_OFFSET (64 * 1024 - 4)
#define UC_VALID_FLAG_VALUE 0x8a7b6c5d
#define UC_ITEM_VALID_VALUE 1
#define UC_ITEM_MAX_NUM 5
#define UC_ITEM_DATA_MAX_LEN 0x8000
#define UC_CPU_CFG_SIZE (16 + 1)
#define UC_MAC_INFO_1_SIZE (16 + 1)
#define UC_MAC_INFO_SIZE 16
#define UC_CPU_WORK_MODE_SIZE (1 + 1)
#define UC_SIGN_AUTH_ENABLE_SIZE 2
#define UC_CPU_CFG_OFFSET 0
#define UC_MAC_INFO_1_OFFSET (UC_CPU_CFG_OFFSET + UC_CPU_CFG_SIZE)
#define UC_MAC_INFO_OFFSET 0
#define UC_CPU_WORK_MODE_OFFSET (UC_MAC_INFO_1_OFFSET + UC_MAC_INFO_1_SIZE)
#define UC_SIGN_AUTH_ENABLE_OFFSET (UC_CPU_WORK_MODE_OFFSET + UC_CPU_WORK_MODE_SIZE)
#define UC_AUTHORITY_ROOT_WR (0)
#define UC_AUTHORITY_USER_WR (1)
#define UC_AUTHORITY_USER_RO (2)
#define UC_USER_PARA_ERR -1
#define UC_USER_PARA_OK 0
struct user_config_item {
const char *name;
int board_id;
int offset;
int len;
int authority_flag;
const char *default_data;
int (*check_para)(unsigned int buf_size, unsigned char *buf);
};
* user config配置项
*/
#define CPU_NUM_CONFIG_NAME "cpu_num_cfg"
#define AUTH_CONFIG_ENABLE_NAME "sign_auth_enable"
#define AUTH_CONFIG_ENABLE 1
#define AUTH_CONFIG_DISENABLE 0
static int cpu_work_mode_check_para(unsigned int buf_size, unsigned char *buf);
static int cpu_sign_auth_check_para(unsigned int buf_size, unsigned char *buf);
* default_data字段必须保证,以"0x"开始,每两个字符表示一个字节
* 例如: 数值0,1表示为 0x0001
*/
static const struct user_config_item user_cfg_version_1[UC_ITEM_MAX_NUM] = {
{CPU_NUM_CONFIG_NAME, -1, UC_CPU_CFG_OFFSET, UC_CPU_CFG_SIZE, UC_AUTHORITY_USER_WR, "0x01000300", NULL},
{"mac_info", -1, UC_MAC_INFO_OFFSET, UC_MAC_INFO_SIZE, UC_AUTHORITY_USER_WR, "0x00", NULL},
{"mac_info_1", -1, UC_MAC_INFO_1_OFFSET, UC_MAC_INFO_1_SIZE, UC_AUTHORITY_USER_WR, "0x00", NULL},
{"cpu_work_mode", -1, UC_CPU_WORK_MODE_OFFSET, UC_CPU_WORK_MODE_SIZE,
UC_AUTHORITY_USER_WR, "0x00", cpu_work_mode_check_para},
{"sign_auth_enable", -1, UC_SIGN_AUTH_ENABLE_OFFSET, UC_SIGN_AUTH_ENABLE_SIZE,
UC_AUTHORITY_USER_WR, "0x00", cpu_sign_auth_check_para},
};
#define UC_ITEM_INDEX_MAC_INFO 1
* 用户配置区动态选项
*/
#define UC_DYNAMIC_CFG_HEAD_OFFSET 0x2000
#define UC_CFG_HEAD_LEN_OFFSET UC_DYNAMIC_CFG_HEAD_OFFSET
#define UC_CFG_HEAD_BYTES 4
#define UC_CFG_HEAD_ITEM_START (UC_DYNAMIC_CFG_HEAD_OFFSET + UC_CFG_HEAD_BYTES)
#define UC_CFG_NAME_LEN_MAX 32
#define UC_SHA256_DIGEST 32
typedef struct _uc_cfg_head {
unsigned char item_name[UC_CFG_NAME_LEN_MAX];
unsigned int blk_offset;
unsigned int item_offset;
unsigned int item_bytes;
unsigned int authority_flg;
unsigned int valid_flg;
} uc_cfg_head_t;
typedef struct _uc_blk_used_info {
unsigned char index;
unsigned char used;
unsigned short used_len;
} uc_blk_used_info_t;
#define UC_BLK_INFO_OFFSET (UC_CHECK_FLASH_OFFSET - sizeof(uc_blk_used_info_t)*UC_FLASH_PARTITION_MAIN_NUM)
#define UC_BLK_INFO_BYTES (sizeof(uc_blk_used_info_t)*UC_FLASH_PARTITION_MAIN_NUM)
#define UC_ITEM_CONTENT_BLK_START 2
#define UC_BLK_INDEX_MAC_INFO 1
#define UC_ITEM_CONTENT_BLK_OFFSET 0
#define UC_MAC_CNT 2
#define UC_CPU_WORK_MODE_MAX 2
static int cpu_work_mode_check_para(unsigned int buf_size, unsigned char *buf)
{
if (buf == NULL) {
return UC_USER_PARA_ERR;
}
if (buf_size + 1 != UC_CPU_WORK_MODE_SIZE) {
return UC_USER_PARA_ERR;
}
if (*buf >= UC_CPU_WORK_MODE_MAX) {
return UC_USER_PARA_ERR;
}
return UC_USER_PARA_OK;
}
static int cpu_sign_auth_check_para(unsigned int buf_size, unsigned char *buf)
{
if (buf == NULL) {
return UC_USER_PARA_ERR;
}
if (buf_size >= UC_SIGN_AUTH_ENABLE_SIZE) {
return UC_USER_PARA_ERR;
}
if ((buf[0] != AUTH_CONFIG_ENABLE) && (buf[0] != AUTH_CONFIG_DISENABLE)) {
return UC_USER_PARA_ERR;
}
return UC_USER_PARA_OK;
}
#endif