summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsos <sos@FreeBSD.org>2001-10-04 18:02:26 +0000
committersos <sos@FreeBSD.org>2001-10-04 18:02:26 +0000
commitf5ccb524fca01bad6a6e4b7570ceb13ba1f764ed (patch)
tree6332150659483a7de6b327f75250080e89e13266
parentb61c05c0f2510ff753cf5a863cdcbfbec99b8ca4 (diff)
downloadFreeBSD-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.c9
-rw-r--r--sys/dev/ata/ata-raid.h34
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 *);
OpenPOWER on IntegriCloud