From 0635509b37504b63d5eb26d757055029065f8597 Mon Sep 17 00:00:00 2001 From: scottl Date: Wed, 6 Feb 2008 01:02:20 +0000 Subject: Update the hptrr driver to version 1.2. This adds port multiplier support for several cards. See the Highpoint website for more information. Again, many thanks to Highpoint for their continued support of FreeBSD. --- sys/dev/hptrr/hptintf.h | 96 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 76 insertions(+), 20 deletions(-) (limited to 'sys/dev/hptrr/hptintf.h') diff --git a/sys/dev/hptrr/hptintf.h b/sys/dev/hptrr/hptintf.h index 45f20f2..eb210fc 100644 --- a/sys/dev/hptrr/hptintf.h +++ b/sys/dev/hptrr/hptintf.h @@ -99,7 +99,10 @@ typedef HPT_U32 DEVICEID; #define AT_RAID1 2 #define AT_RAID5 3 #define AT_RAID6 4 +#define AT_RAID3 5 +#define AT_RAID4 6 #define AT_JBOD 7 +#define AT_RAID1E 8 /* * physical device type @@ -162,8 +165,9 @@ typedef HPT_U32 DEVICEID; #define DEVICE_FLAG_BOOTDISK 0x00000002 /* disk has a active partition */ #define DEVICE_FLAG_BOOTMARK 0x00000004 /* disk has boot mark set */ #define DEVICE_FLAG_WITH_601 0x00000008 /* has HPT601 connected */ -#define DEVICE_FLAG_SATA 0x00000010 /* S-ATA device */ +#define DEVICE_FLAG_SATA 0x00000010 /* SATA or SAS device */ #define DEVICE_FLAG_ON_PM_PORT 0x00000020 /* PM port */ +#define DEVICE_FLAG_SAS 0x00000040 /* SAS device */ #define DEVICE_FLAG_UNINITIALIZED 0x00010000 /* device is not initialized, can't be used to create array */ #define DEVICE_FLAG_LEGACY 0x00020000 /* single disk & mbr contains at least one partition */ @@ -276,6 +280,7 @@ typedef HPT_U32 DEVICEID; #define HPT_IOCTL_CREATE_ARRAY_V3 HPT_CTL_CODE(56) #define HPT_IOCTL_CREATE_TRANSFORM_V2 HPT_CTL_CODE(57) #define HPT_IOCTL_CALC_MAX_CAPACITY_V2 HPT_CTL_CODE(58) +#define HPT_IOCTL_SCSI_PASSTHROUGH HPT_CTL_CODE(59) #define HPT_IOCTL_GET_CONTROLLER_IDS HPT_CTL_CODE(100) @@ -307,6 +312,15 @@ typedef HPT_U32 DEVICEID; #define CHIP_TYPE_SI3112A 14 #define CHIP_TYPE_ICH5 15 #define CHIP_TYPE_ICH5R 16 +#define CHIP_TYPE_MV50XX 20 +#define CHIP_TYPE_MV60X1 21 +#define CHIP_TYPE_MV60X2 22 +#define CHIP_TYPE_MV70X2 23 +#define CHIP_TYPE_MV5182 24 +#define CHIP_TYPE_IOP331 31 +#define CHIP_TYPE_IOP333 32 +#define CHIP_TYPE_IOP341 33 +#define CHIP_TYPE_IOP348 34 /* * Chip Flags @@ -336,7 +350,8 @@ typedef struct _DRIVER_CAPABILITIES { HPT_U8 MaximumArrayNameLength; /* only one HPT_U8 left here! */ #ifdef __BIG_ENDIAN_BITFIELD - HPT_U8 reserved: 4; + HPT_U8 reserved: 3; + HPT_U8 SupportVariableSectorSize: 1; HPT_U8 SupportHotSwap: 1; HPT_U8 HighPerformanceRAID1: 1; HPT_U8 RebuildProcessInDriver: 1; @@ -346,7 +361,8 @@ typedef struct _DRIVER_CAPABILITIES { HPT_U8 RebuildProcessInDriver: 1; /* Windows only. used by mid layer for rebuild control. */ HPT_U8 HighPerformanceRAID1: 1; HPT_U8 SupportHotSwap: 1; - HPT_U8 reserved: 4; + HPT_U8 SupportVariableSectorSize: 1; + HPT_U8 reserved: 3; #endif @@ -406,6 +422,7 @@ typedef struct _CONTROLLER_INFO_V2 { #define CEXF_BatteryBackupTime 0x20 #define CEXF_FirmwareVersion 0x40 #define CEXF_SerialNumber 0x80 +#define CEXF_BatteryTemperature 0x100 typedef struct _CONTROLLER_INFO_V3 { HPT_U8 ChipType; @@ -422,13 +439,15 @@ typedef struct _CONTROLLER_INFO_V3 { HPT_U32 ExFlags; HPT_U8 IOPModel[32]; HPT_U32 SDRAMSize; - HPT_U8 BatteryInstalled; + HPT_U8 BatteryInstalled; HPT_U8 BatteryStatus; HPT_U16 BatteryVoltage; HPT_U32 BatteryBackupTime; HPT_U32 FirmwareVersion; HPT_U8 SerialNumber[32]; - HPT_U8 reserve[88]; + HPT_U8 BatteryMBInstalled; + HPT_U8 BatteryTemperature; + HPT_U8 reserve[86]; } CONTROLLER_INFO_V3, *PCONTROLLER_INFO_V3; typedef char check_CONTROLLER_INFO_V3[sizeof(CONTROLLER_INFO_V3)==256? 1:-1]; @@ -477,7 +496,7 @@ typedef struct _HPT_ARRAY_INFO { HPT_U8 ArrayType; /* array type */ HPT_U8 BlockSizeShift; /* stripe size */ HPT_U8 nDisk; /* member count: Number of ID in Members[] */ - HPT_U8 reserved; + HPT_U8 SubArrayType; HPT_U32 Flags; /* working flags, see ARRAY_FLAG_XXX */ HPT_U32 Members[MAX_ARRAY_MEMBERS_V1]; /* member array/disks */ @@ -504,7 +523,7 @@ typedef struct _HPT_ARRAY_INFO_V2 { HPT_U8 ArrayType; /* array type */ HPT_U8 BlockSizeShift; /* stripe size */ HPT_U8 nDisk; /* member count: Number of ID in Members[] */ - HPT_U8 reserved; + HPT_U8 SubArrayType; HPT_U32 Flags; /* working flags, see ARRAY_FLAG_XXX */ HPT_U32 Members[MAX_ARRAY_MEMBERS_V2]; /* member array/disks */ @@ -526,7 +545,7 @@ typedef struct _HPT_ARRAY_INFO_V3 { HPT_U8 ArrayType; /* array type */ HPT_U8 BlockSizeShift; /* stripe size */ HPT_U8 nDisk; /* member count: Number of ID in Members[] */ - HPT_U8 reserved; + HPT_U8 SubArrayType; HPT_U32 Flags; /* working flags, see ARRAY_FLAG_XXX */ HPT_U32 Members[MAX_ARRAY_MEMBERS_V2]; /* member array/disks */ @@ -559,7 +578,7 @@ typedef struct _HPT_ARRAY_INFO_V4 { HPT_U8 ArrayType; /* array type */ HPT_U8 BlockSizeShift; /* stripe size */ HPT_U8 nDisk; /* member count: Number of ID in Members[] */ - HPT_U8 reserved; + HPT_U8 SubArrayType; HPT_U32 Flags; /* working flags, see ARRAY_FLAG_XXX */ @@ -570,7 +589,8 @@ typedef struct _HPT_ARRAY_INFO_V4 { DEVICEID TransformTarget; /* destination device ID */ HPT_U32 TransformingProgress; HPT_U32 Signature; /* persistent identification*/ - HPT_U32 reserved2[2]; + HPT_U8 SectorSizeShift; /*sector size = 512B<=0x01020000 @@ -974,7 +991,8 @@ typedef struct _CREATE_ARRAY_PARAMS_V2 { typedef struct _CREATE_ARRAY_PARAMS_V3 { HPT_U32 dwSize; HPT_U8 revision; /*CREATE_ARRAY_PARAMS_V3_REVISION*/ - HPT_U8 reserved[7]; + HPT_U8 reserved[6]; + HPT_U8 SectorSizeShift; /*sector size = 512B<