diff options
author | LaMont Jones <lamont@debian.org> | 2009-07-21 15:45:04 -0600 |
---|---|---|
committer | LaMont Jones <lamont@debian.org> | 2009-07-21 15:45:04 -0600 |
commit | 7a22bb9abcb56d1010cefd204709e3888f95f735 (patch) | |
tree | 5c38b4485f79ee8f6a9d5f9537e973f1f663f027 /shlibs/blkid/src/probers/promise_raid.c | |
parent | 4e13a18f57a5b427c559f3b466b9655db14d28f8 (diff) | |
parent | 741064af10ec81635d708e9fb8373f96341246eb (diff) | |
download | util-linux-old-7a22bb9abcb56d1010cefd204709e3888f95f735.tar.gz |
Merge commit 'origin/master'
Conflicts:
AUTHORS
NEWS
config/include-Makefile.am
configure.ac
mount/lomount.c
po/POTFILES.in
po/ca.po
po/cs.po
po/da.po
po/de.po
po/es.po
po/et.po
po/eu.po
po/fi.po
po/fr.po
po/hu.po
po/id.po
po/it.po
po/ja.po
po/nl.po
po/pl.po
po/pt_BR.po
po/ru.po
po/sl.po
po/sv.po
po/tr.po
po/uk.po
po/util-linux-ng.pot
po/vi.po
po/zh_CN.po
Diffstat (limited to 'shlibs/blkid/src/probers/promise_raid.c')
-rw-r--r-- | shlibs/blkid/src/probers/promise_raid.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/shlibs/blkid/src/probers/promise_raid.c b/shlibs/blkid/src/probers/promise_raid.c new file mode 100644 index 00000000..29540092 --- /dev/null +++ b/shlibs/blkid/src/probers/promise_raid.c @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2008 Karel Zak <kzak@redhat.com> + * + * Inspired by libvolume_id by + * Kay Sievers <kay.sievers@vrfy.org> + * + * This file may be redistributed under the terms of the + * GNU Lesser General Public License. + */ +#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_metadata { + 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 off; + struct promise_metadata *pdc; + + off = ((pr->size / 0x200) - sectors[i]) * 0x200; + pdc = (struct promise_metadata *) + blkid_probe_get_buffer(pr, + off, + sizeof(struct promise_metadata)); + 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, + .magics = BLKID_NONE_MAGIC +}; + + |