diff options
author | sos <sos@FreeBSD.org> | 2001-10-04 18:02:26 +0000 |
---|---|---|
committer | sos <sos@FreeBSD.org> | 2001-10-04 18:02:26 +0000 |
commit | f5ccb524fca01bad6a6e4b7570ceb13ba1f764ed (patch) | |
tree | 6332150659483a7de6b327f75250080e89e13266 | |
parent | b61c05c0f2510ff753cf5a863cdcbfbec99b8ca4 (diff) | |
download | FreeBSD-src-f5ccb524fca01bad6a6e4b7570ceb13ba1f764ed.zip FreeBSD-src-f5ccb524fca01bad6a6e4b7570ceb13ba1f764ed.tar.gz |
Update the promise raid structure with some of the info I've gathered
before I'm accused of "lending" it from somebody else.
-rw-r--r-- | sys/dev/ata/ata-raid.c | 9 | ||||
-rw-r--r-- | sys/dev/ata/ata-raid.h | 34 |
2 files changed, 24 insertions, 19 deletions
diff --git a/sys/dev/ata/ata-raid.c b/sys/dev/ata/ata-raid.c index 1a851b6..7b9cfc3 100644 --- a/sys/dev/ata/ata-raid.c +++ b/sys/dev/ata/ata-raid.c @@ -462,9 +462,11 @@ ar_promise_conf(struct ad_softc *adp, struct ar_softc **raidp) } /* now convert Promise config info into our generic form */ - if ((info->raid.flags != PR_F_CONFED) || + if ((info->raid.flags != PR_F_READY) || (((info->raid.status & (PR_S_DEFINED|PR_S_ONLINE)) != (PR_S_DEFINED|PR_S_ONLINE)))) { + if (bootverbose) + printf("Promise check3 failed\n"); goto promise_out; } @@ -472,8 +474,11 @@ ar_promise_conf(struct ad_softc *adp, struct ar_softc **raidp) array = info->raid.array_number; if (raidp[array]) { - if (magic != raidp[array]->magic_0) + if (magic != raidp[array]->magic_0) { + if (bootverbose) + printf("Promise check4 failed\n"); goto promise_out; + } } else { if (!(raidp[array] = (struct ar_softc *) diff --git a/sys/dev/ata/ata-raid.h b/sys/dev/ata/ata-raid.h index d5cce77..c5a242e 100644 --- a/sys/dev/ata/ata-raid.h +++ b/sys/dev/ata/ata-raid.h @@ -111,32 +111,33 @@ struct highpoint_raid_conf { u_int32_t lba; } errorlog[32]; int8_t filler2[60]; -}; +} __attribute__((packed)); struct promise_raid_conf { char promise_id[24]; #define PR_MAGIC "Promise Technology, Inc." int32_t dummy_0; - int32_t magic_0; - int32_t dummy_1; - int32_t magic_1; - int16_t dummy_2; + int8_t magic_0[8]; + int16_t magic_1; + int32_t magic_2; int8_t filler1[470]; struct { int32_t flags; /* 0x200 */ -#define PR_F_CONFED 0x00000080 +#define PR_F_READY 0x00000080 +#define PR_F_SPARE 0x00000040 +#define PR_F_DOWN 0x00000020 +#define PR_F_VALID 0x00000001 int8_t dummy_0; int8_t disk_number; int8_t channel; int8_t device; - int32_t magic_0; - int32_t dummy_1; - int32_t dummy_2; /* 0x210 */ + int8_t magic_0[8]; + int32_t disk_offset; /* 0x210 */ int32_t disk_secs; - int32_t dummy_3; - int16_t dummy_4; + int32_t dummy_1; + int16_t dummy_2; int8_t status; #define PR_S_DEFINED 0x01 #define PR_S_ONLINE 0x02 @@ -156,19 +157,18 @@ struct promise_raid_conf { u_int16_t cylinders; u_int8_t heads; u_int8_t sectors; - int32_t magic_1; - int32_t dummy_5; /* 0x230 */ + int8_t magic_1[8]; struct { - int16_t dummy_0; + int8_t flags; + int8_t dummy_0; int8_t channel; int8_t device; - int32_t magic_0; - int32_t disk_number; + int8_t magic_0[8]; } disk[8]; } raid; int32_t filler2[346]; uint32_t checksum; -}; +} __attribute__((packed)); int ar_probe(struct ad_softc *); |