rt-thread-official/bsp/allwinner/libraries/sunxi-hal/include/hal/sdmmc/mbr.h

95 lines
3.8 KiB
C

/*
****************************************************************************************************
* MELIS
* the Easy Portable/Player Develop Kits
* SDMMC Module
*
* (c) Copyright 2011-2014, All winners Co,Ld.
* All Rights Reserved
*
* File : mbr.h
* By : james.deng
* Version : 1.0.0
* Date : 2011-11-28
* Descript:
* Update : <date> <author> <version> <notes>
* 2011-11-28 james.deng 1.0.0 build the file.
****************************************************************************************************
*/
#ifndef __MBR_H__
#define __MBR_H__
// #include <mod_defs.h>
#define MAX_PART_COUNT 8 // max part count
#define MBR_COPY_NUM 4 // mbr backup count
#define MBR_START_ADDRESS 0x0 // mbr start address
#define MBR_SIZE 1024 // mbr size
#define MBR_RESERVED (MBR_SIZE - 20 - (MAX_PART_COUNT * 64)) // mbr reserved space
// part information
typedef struct tag_PARTITION
{
__u32 addrhi; // start address high 32 bit
__u32 addrlo; // start address low 32 bit
__u32 lenhi; // size high 32 bit
__u32 lenlo; // size low 32 bit
__u8 classname[12]; // major device name
__u8 name[12]; // minor device name
__u8 res[24]; // reserved
} PARTITION; // 64 bytes 应该使用 pack
// mbr information
typedef struct tag_MBR
{
__u32 crc32; // crc, from byte 4 to mbr tail
__u32 version; // version
__u8 magic[8]; // magic number
__u8 copy; // mbr backup count
__u8 index; // current part no
__u16 PartCount; // part counter
PARTITION array[MAX_PART_COUNT]; // part info
__u8 res[MBR_RESERVED]; // reserved space
} MBR;
#define SUNXI_MBR_SIZE (16 * 1024)
#define SUNXI_MBR_MAX_PART_COUNT 120
/* 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];
}__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_SIZE - 32 - 4 - (SUNXI_MBR_MAX_PART_COUNT * sizeof(sunxi_partition)))];
}__attribute__ ((packed)) sunxi_mbr_t;
#endif // __MBR_H__