/***************************************************************************
* 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