2 * Copyright (C) 2008 Karel Zak <kzak@redhat.com>
4 * Inspired by libvolume_id by
5 * Kay Sievers <kay.sievers@vrfy.org>
7 * This file may be redistributed under the terms of the
8 * GNU Lesser General Public License.
18 /* http://www.snia.org/standards/home */
19 #define DDF_GUID_LENGTH 24
20 #define DDF_REV_LENGTH 8
25 uint8_t guid[DDF_GUID_LENGTH];
26 uint8_t ddf_rev[DDF_REV_LENGTH];
27 } __attribute__((packed));
29 static int probe_ddf(blkid_probe pr, const struct blkid_idmag *mag)
31 int hdrs[] = { 1, 257 };
33 struct ddf_header *ddf = NULL;
34 char version[DDF_REV_LENGTH + 1];
36 if (pr->size < 0x30000)
39 for (i = 0; i < ARRAY_SIZE(hdrs); i++) {
40 uint64_t off = ((pr->size / 0x200) - hdrs[i]) * 0x200;
42 ddf = (struct ddf_header *) blkid_probe_get_buffer(pr,
44 sizeof(struct ddf_header));
48 if (memcmp(ddf->signature, "\x11\xde\x11\xde", 4) == 0 ||
49 memcmp(ddf->signature, "\xde\x11\xde\x11", 4) == 0)
57 blkid_probe_strncpy_uuid(pr, ddf->guid, sizeof(ddf->guid));
59 memcpy(version, ddf->ddf_rev, sizeof(ddf->ddf_rev));
60 *(version + sizeof(ddf->ddf_rev)) = '\0';
62 if (blkid_probe_set_version(pr, version) != 0)
67 const struct blkid_idinfo ddfraid_idinfo = {
68 .name = "ddf_raid_member",
69 .usage = BLKID_USAGE_RAID,
70 .probefunc = probe_ddf,
71 .magics = BLKID_NONE_MAGIC