Support newer Highpoint BIOS's extended config.
This commit is contained in:
parent
b8ad1eb270
commit
84409b36ca
@ -814,8 +814,11 @@ ar_highpoint_write_conf(struct ar_softc *rdp)
|
||||
if ((rdp->disks[disk].flags & (AR_DF_PRESENT | AR_DF_ONLINE)) ==
|
||||
(AR_DF_PRESENT | AR_DF_ONLINE))
|
||||
config->magic = HPT_MAGIC_OK;
|
||||
if (rdp->disks[disk].flags & AR_DF_ASSIGNED)
|
||||
if (rdp->disks[disk].flags & AR_DF_ASSIGNED) {
|
||||
config->magic_0 = rdp->magic_0;
|
||||
config->magic_2 = HPT_MAGIC_2;
|
||||
strcpy(config->name_1, "FreeBSD ATARAID");
|
||||
}
|
||||
config->disk_number = disk;
|
||||
|
||||
switch (rdp->flags & (AR_F_RAID0 | AR_F_RAID1 | AR_F_SPAN)) {
|
||||
@ -825,44 +828,36 @@ ar_highpoint_write_conf(struct ar_softc *rdp)
|
||||
config->order = HPT_O_READY;
|
||||
else
|
||||
config->order = HPT_O_DOWN;
|
||||
strcpy(config->name_2, "RAID 0");
|
||||
break;
|
||||
|
||||
case AR_F_RAID1:
|
||||
config->type = HPT_T_RAID1;
|
||||
config->disk_number = (disk < rdp->width) ? disk : disk + 10;
|
||||
strcpy(config->name_2, "RAID 1");
|
||||
break;
|
||||
|
||||
case AR_F_RAID0 | AR_F_RAID1:
|
||||
config->magic_1 = rdp->magic_1;
|
||||
config->type = HPT_T_RAID01_RAID0;
|
||||
#if 0
|
||||
if ((rdp->flags & (AR_F_READY | AR_F_DEGRADED)) == AR_F_READY)
|
||||
if (disk < rdp->width)
|
||||
config->order = HPT_O_RAID01SRC;
|
||||
else
|
||||
config->order = HPT_O_RAID01DST;
|
||||
else
|
||||
if (rdp->disks[disk].flags & AR_DF_ONLINE)
|
||||
config->order = HPT_O_RAID01DEGRADED;
|
||||
else
|
||||
config->order = HPT_O_DOWN;
|
||||
#else
|
||||
if (rdp->disks[disk].flags & AR_DF_ONLINE)
|
||||
if (disk < rdp->width)
|
||||
if (disk < rdp->width) {
|
||||
config->order = HPT_O_RAID01SRC;
|
||||
else
|
||||
config->order = HPT_O_RAID01DST;
|
||||
else
|
||||
config->order = HPT_O_DOWN;
|
||||
#endif
|
||||
if (disk >= rdp->width) {
|
||||
config->magic_0 = rdp->magic_0 + 1;
|
||||
config->disk_number -= rdp->width;
|
||||
config->magic_0 = rdp->magic_0 - 1;
|
||||
strcpy(config->name_2, "RAID 0+1 SRC");
|
||||
}
|
||||
else {
|
||||
config->order = HPT_O_RAID01DST;
|
||||
config->disk_number -= rdp->width;
|
||||
strcpy(config->name_2, "RAID 0+1 DST");
|
||||
}
|
||||
else
|
||||
config->order = HPT_O_DOWN;
|
||||
break;
|
||||
|
||||
case AR_F_SPAN:
|
||||
config->type = HPT_T_SPAN;
|
||||
strcpy(config->name_2, "SPAN");
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -137,7 +137,14 @@ struct highpoint_raid_conf {
|
||||
u_int8_t sectors;
|
||||
u_int32_t lba;
|
||||
} errorlog[32];
|
||||
int8_t filler2[60];
|
||||
int8_t filler2[16];
|
||||
u_int32_t magic_2;
|
||||
#define HPT_MAGIC_2 0x7fffffff
|
||||
u_int8_t dummy_1;
|
||||
u_int8_t name_1[15];
|
||||
u_int8_t dummy_2;
|
||||
u_int8_t name_2[15];
|
||||
int8_t filler3[8];
|
||||
} __attribute__((packed));
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user