SmartAudio/lichee/brandy/u-boot-2014.07/include/sunxi_mbr.h

104 lines
4.6 KiB
C
Raw Normal View History

2018-07-13 01:31:50 +00:00
/*
* (C) Copyright 2007-2013
* Allwinner Technology Co., Ltd. <www.allwinnertech.com>
* Jerry Wang <wangflord@allwinnertech.com>
*
* See file CREDITS for list of people who contributed to this
* project.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/
#ifndef __SUNXI_MBR_H__
#define __SUNXI_MBR_H__
#define DOWNLOAD_MAP_NAME "dlinfo.fex"
#define SUNXI_MBR_NAME "sunxi_mbr.fex"
/* MBR */
#define SUNXI_MBR_SIZE (16 * 1024)
#define SUNXI_DL_SIZE (16 * 1024)
#define SUNXI_MBR_MAGIC "softw411"
#define SUNXI_MBR_MAX_PART_COUNT 120
#define SUNXI_MBR_COPY_NUM 4 //mbr的备份数量
#define SUNXI_MBR_RESERVED (SUNXI_MBR_SIZE - 32 - 4 - (SUNXI_MBR_MAX_PART_COUNT * sizeof(sunxi_partition))) //mbr保留的空间
#define SUNXI_DL_RESERVED (SUNXI_DL_SIZE - 32 - (SUNXI_MBR_MAX_PART_COUNT * sizeof(dl_one_part_info)))
#define SUNXI_LOCKED (0xAA)
#define SUNXI_UNLOCKED (0xA5)
/* partition information */
typedef struct sunxi_partition_t
{
unsigned int addrhi; //起始地址, 以扇区为单位
unsigned int addrlo; //
unsigned int lenhi; //长度
unsigned int lenlo; //
unsigned char classname[16]; //次设备名
unsigned char name[16]; //主设备名
unsigned int user_type; //用户类型
unsigned int keydata; //关键数据,要求量产不丢失
unsigned int ro; //读写属性
unsigned int sig_verify; //签名验证属性
unsigned int sig_erase; //签名擦除属性
unsigned int sig_value[4];
unsigned int sig_pubkey;
unsigned int sig_pbumode;
unsigned char reserved2[36]; //保留数据匹配分区信息128字节
}__attribute__ ((packed))sunxi_partition;
/* mbr information */
typedef struct sunxi_mbr
{
unsigned int crc32; // crc 1k - 4
unsigned int version; // 版本信息, 0x00000100
unsigned char magic[8]; //"softw311"
unsigned int copy; //分数
unsigned int index; //第几个MBR备份
unsigned int PartCount; //分区个数
unsigned int stamp[1]; //对齐
sunxi_partition array[SUNXI_MBR_MAX_PART_COUNT]; //
unsigned int lockflag;
unsigned char res[SUNXI_MBR_RESERVED];
}__attribute__ ((packed)) sunxi_mbr_t;
typedef struct tag_one_part_info
{
unsigned char name[16]; //所烧写分区的主设备名
unsigned int addrhi; //所烧写分区的高地址,扇区单位
unsigned int addrlo; //所烧写分区的低地址,扇区单位
unsigned int lenhi; //所烧写分区的长度高32位扇区单位
unsigned int lenlo; //所烧写分区的长度低32位扇区单位
unsigned char dl_filename[16]; //所烧写分区的文件名称长度固定16字节
unsigned char vf_filename[16]; //所烧写分区的校验文件名称长度固定16字节
unsigned int encrypt; //所烧写分区的数据是否进行加密 0:加密 1不加密
unsigned int verify; //所烧写分区的数据是否进行校验 0:不校验 1校验
}__attribute__ ((packed)) dl_one_part_info;
//分区烧写信息
typedef struct tag_download_info
{
unsigned int crc32; //crc
unsigned int version; //版本号 0x00000101
unsigned char magic[8]; //"softw311"
unsigned int download_count; //需要烧写的分区个数
unsigned int stamp[3]; //对齐
dl_one_part_info one_part_info[SUNXI_MBR_MAX_PART_COUNT]; //烧写分区的信息
unsigned char res[SUNXI_DL_RESERVED];
}
__attribute__ ((packed)) sunxi_download_info;
#endif