From f5ccb524fca01bad6a6e4b7570ceb13ba1f764ed Mon Sep 17 00:00:00 2001 From: sos Date: Thu, 4 Oct 2001 18:02:26 +0000 Subject: Update the promise raid structure with some of the info I've gathered before I'm accused of "lending" it from somebody else. --- sys/dev/ata/ata-raid.c | 9 +++++++-- 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 *); -- cgit v1.1