All pastes #18811 Raw Edit

Something

public text v1 · immutable
#18811 ·published 2005-07-29 22:01 UTC
rendered paste body
/***************************************************************************
 *            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