/*************************************************************************** * Array Descripton on disk ***************************************************************************/ #pragma pack(1) typedef struct _ArrayDescript { ULONG Signature; /* This block is vaild array info block */ ULONG dArStamp; /* array ID. all disks in a array has same ID */ UCHAR bCheckSum; /* check sum of ArrayDescript_3_0_size bytes */ #ifdef __BIG_ENDIAN_BITFIELD UCHAR df_reservedbits: 6; /* put more flags here */ UCHAR df_user_mode_set: 1;/* user select device mode */ UCHAR df_bootmark:1; /* user set boot mark on the disk */ #else UCHAR df_bootmark:1; /* user set boot mark on the disk */ UCHAR df_user_mode_set: 1;/* user select device mode */ UCHAR df_reservedbits: 6; /* put more flags here */ #endif UCHAR bUserDeviceMode; /* see device.h */ UCHAR ArrayLevel; /* how many level[] is valid */ struct { ULONG Capacity; /* capacity for the array */ UCHAR VDeviceType; /* see above & arrayType in array.h */ UCHAR bMemberCount; /* all disk in the array */ UCHAR bSerialNumber; /* Serial Number */ UCHAR bArBlockSizeShift; /* the number of shift bit for a block */ #ifdef __BIG_ENDIAN_BITFIELD USHORT rf_reserved: 14; USHORT rf_raid15: 1; /* don't remove even you don't use it */ USHORT rf_need_rebuild:1; /* array is critical */ #else USHORT rf_need_rebuild:1; /* array is critical */ USHORT rf_raid15: 1; /* don't remove even you don't use it */ USHORT rf_reserved: 14; #endif USHORT CriticalMembers; /* record critical members */ ULONG RebuildSectors; /* how many sectors is OK (LBA on member disk) */ } level[2]; UCHAR ArrayName[MAX_ARRAY_NAME]; /* The Name of the array */ TIME_RECORD CreateTime; /* when created it */ UCHAR Description[64]; /* array description */ UCHAR CreateManager[16]; /* who created it */ #define ArrayDescript_3_0_size ((unsigned)(ULONG_PTR)&((struct _ArrayDescript *)0)->bCheckSum31) #define ArrayDescript_3_1_size 512 UCHAR bCheckSum31; /* new check sum */ UCHAR PrivateFlag1; /* private */ UCHAR reserve1; #ifdef __BIG_ENDIAN_BITFIELD UCHAR df_read_ahead: 1; /* enable read ahead */ UCHAR df_read_ahead_set: 1; UCHAR df_write_cache: 1; /* enable write cache */ UCHAR df_write_cache_set: 1; UCHAR df_ncq: 1; /* enable NCQ */ UCHAR df_ncq_set: 1; UCHAR df_tcq: 1; /* enable TCQ */ UCHAR df_tcq_set: 1; #else UCHAR df_tcq_set: 1; UCHAR df_tcq: 1; /* enable TCQ */ UCHAR df_ncq_set: 1; UCHAR df_ncq: 1; /* enable NCQ */ UCHAR df_write_cache_set: 1; UCHAR df_write_cache: 1; /* enable write cache */ UCHAR df_read_ahead_set: 1; UCHAR df_read_ahead: 1; /* enable read ahead */ #endif struct { ULONG CapacityHi32; ULONG RebuildSectorsHi32; } levelex[2]; ULONG failedStamp; /* array stamp for failed memebr */ } ArrayDescript; /* report an error if ArrayDescript size exceed 512 */ typedef char ArrayDescript_size_should_not_exceed_512[512-sizeof(ArrayDescript)]; #pragma pack() /* Signature */ #define HPT_ARRAY_V3 0x5a7816f3 #ifdef ARRAY_V2_ONLY #define SAVE_FOR_RAID_INFO 0 #else #define SAVE_FOR_RAID_INFO 10 #endif