summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/dev/ata/ata-raid.c37
-rw-r--r--sys/dev/ata/ata-raid.h11
2 files changed, 25 insertions, 23 deletions
diff --git a/sys/dev/ata/ata-raid.c b/sys/dev/ata/ata-raid.c
index 5724fab..0f61f4f 100644
--- a/sys/dev/ata/ata-raid.c
+++ b/sys/dev/ata/ata-raid.c
@@ -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->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;
-#endif
- if (disk >= rdp->width) {
- config->magic_0 = rdp->magic_0 + 1;
- config->disk_number -= rdp->width;
- }
break;
case AR_F_SPAN:
config->type = HPT_T_SPAN;
+ strcpy(config->name_2, "SPAN");
break;
}
@@ -1174,7 +1169,7 @@ ar_rw(struct ad_softc *adp, u_int32_t lba, int count, caddr_t data, int flags)
if (flags & AR_WAIT)
bp->bio_done = (void *)wakeup;
else
- bp->bio_done = ar_rw_done;
+ bp->bio_done = ar_rw_done;
AR_STRATEGY(bp);
if (flags & AR_WAIT) {
error = tsleep(bp, PRIBIO, "arrw", 0);
diff --git a/sys/dev/ata/ata-raid.h b/sys/dev/ata/ata-raid.h
index 9b10af6..03a7e16 100644
--- a/sys/dev/ata/ata-raid.h
+++ b/sys/dev/ata/ata-raid.h
@@ -35,7 +35,7 @@
#define AR_READ 0x01
#define AR_WRITE 0x02
#define AR_WAIT 0x04
-#define AR_STRATEGY(x) (x)->bio_dev->si_disk->d_devsw->d_strategy((x))
+#define AR_STRATEGY(x) (x)->bio_dev->si_disk->d_devsw->d_strategy((x))
#define AD_SOFTC(x) ((struct ad_softc *)(x.device->driver))
struct ar_disk {
@@ -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));
OpenPOWER on IntegriCloud