]> err.no Git - util-linux/commitdiff
blkid: Promise raid
authorKarel Zak <kzak@redhat.com>
Tue, 9 Sep 2008 09:01:26 +0000 (11:01 +0200)
committerKarel Zak <kzak@redhat.com>
Wed, 11 Feb 2009 22:21:44 +0000 (23:21 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
libs/blkid/src/probe.c
libs/blkid/src/probers/Makefile.am
libs/blkid/src/probers/probers.h
libs/blkid/src/probers/promise_raid.c [new file with mode: 0644]

index 47b70841f9caba7e2c119e5a7f7aecc0e7b2d1ab..e54c528b811dc8f8f4cd8a852e763c07131c8aae 100644 (file)
@@ -43,7 +43,8 @@ static const struct blkid_idinfo *idinfos[] =
        &iswraid_idinfo,
        &jmicron_idinfo,
        &lsi_idinfo,
-       &nvraid_idinfo
+       &nvraid_idinfo,
+       &pdcraid_idinfo
 };
 
 #ifndef ARRAY_SIZE
index 09738bcc0a2840f0807a55950e0c25e24be378df..c866fa509a63b1b46ae3fc6533e0373ac5109610 100644 (file)
@@ -12,6 +12,7 @@ libprobers_a_SOURCES =        probers.h \
                        isw_raid.c \
                        jmicron_raid.c \
                        lsi_raid.c \
-                       nvidia_raid.c
+                       nvidia_raid.c \
+                       promise_raid.c
 
 all-local: $(lib_LIBRARIES)
index e7e13e1f9a074566b6f102d6f6b49fe04c4a4f64..860280989a80177fe66e02ee6aac08c18e442996 100644 (file)
@@ -24,5 +24,6 @@ extern const struct blkid_idinfo iswraid_idinfo;
 extern const struct blkid_idinfo jmicron_idinfo;
 extern const struct blkid_idinfo lsi_idinfo;
 extern const struct blkid_idinfo nvraid_idinfo;
+extern const struct blkid_idinfo pdcraid_idinfo;
 
 #endif /* _BLKID_PROBE_H */
diff --git a/libs/blkid/src/probers/promise_raid.c b/libs/blkid/src/probers/promise_raid.c
new file mode 100644 (file)
index 0000000..c11ddd3
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2008 Karel Zak <kzak@redhat.com>
+ * Copyright (C) 2005 Kay Sievers <kay.sievers@vrfy.org>
+ *
+ * This file is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+#include <stdint.h>
+
+#include "blkidP.h"
+
+struct promise_meta {
+       uint8_t sig[24];
+};
+
+#define PDC_CONFIG_OFF         0x1200
+#define PDC_SIGNATURE          "Promise Technology, Inc."
+
+static int probe_pdcraid(blkid_probe pr, const struct blkid_idmag *mag)
+{
+       unsigned int i;
+       static unsigned int sectors[] = {
+               63, 255, 256, 16, 399, 0
+       };
+
+       if (pr->size < 0x40000)
+               return -1;
+
+       for (i = 0; sectors[i] != 0; i++) {
+               uint64_t meta_off;
+               struct promise_meta *pdc;
+
+               meta_off = ((pr->size / 0x200) - sectors[i]) * 0x200;
+               pdc = (struct promise_meta *)
+                               blkid_probe_get_buffer(pr, meta_off, 0x200);
+               if (!pdc)
+                       return -1;
+
+               if (memcmp(pdc->sig, PDC_SIGNATURE,
+                               sizeof(PDC_SIGNATURE) - 1) == 0)
+                       return 0;
+       }
+       return -1;
+}
+
+const struct blkid_idinfo pdcraid_idinfo = {
+       .name           = "promise_fasttrack_raid_member",
+       .usage          = BLKID_USAGE_RAID,
+       .probefunc      = probe_pdcraid
+};
+
+