From: Karel Zak Date: Mon, 8 Sep 2008 23:05:39 +0000 (+0200) Subject: blkid: add ISW raid X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f8504a4e9c14b86dc6eb580813a9c72a11cf131d;p=util-linux blkid: add ISW raid Signed-off-by: Karel Zak --- diff --git a/libs/blkid/src/probe.c b/libs/blkid/src/probe.c index eafb76f7..8b4b0047 100644 --- a/libs/blkid/src/probe.c +++ b/libs/blkid/src/probe.c @@ -39,7 +39,8 @@ static const struct blkid_idinfo *idinfos[] = &cramfs_idinfo, &swap_idinfo, &adraid_idinfo, - &ddfraid_idinfo + &ddfraid_idinfo, + &iswraid_idinfo }; #ifndef ARRAY_SIZE diff --git a/libs/blkid/src/probers/Makefile.am b/libs/blkid/src/probers/Makefile.am index fcca51dc..356770e1 100644 --- a/libs/blkid/src/probers/Makefile.am +++ b/libs/blkid/src/probers/Makefile.am @@ -8,6 +8,7 @@ libprobers_a_SOURCES = probers.h \ cramfs.c \ swap.c \ adaptec_raid.c \ - ddf_raid.c + ddf_raid.c \ + isw_raid.c all-local: $(lib_LIBRARIES) diff --git a/libs/blkid/src/probers/isw_raid.c b/libs/blkid/src/probers/isw_raid.c new file mode 100644 index 00000000..968d5cb3 --- /dev/null +++ b/libs/blkid/src/probers/isw_raid.c @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2008 Karel Zak + * Copyright (C) 2005 Kay Sievers + * + * 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 +#include +#include +#include +#include + +#include "blkidP.h" + +struct isw_meta { + uint8_t sig[32]; + uint32_t check_sum; + uint32_t mpb_size; + uint32_t family_num; + uint32_t generation_num; +}; + +#define ISW_SIGNATURE "Intel Raid ISM Cfg Sig. " + + +static int probe_iswraid(blkid_probe pr, const struct blkid_idmag *mag) +{ + uint64_t meta_off; + struct isw_meta *isw; + + if (pr->size < 0x10000) + return -1; + + meta_off = ((pr->size / 0x200) - 2) * 0x200; + + if (pr->size < 0x10000) + return -1; + + isw = (struct isw_meta *) blkid_probe_get_buffer(pr, meta_off, 0x200); + if (!isw) + return -1; + + if (memcmp(isw->sig, ISW_SIGNATURE, sizeof(ISW_SIGNATURE)-1) != 0) + return -1; + + if (blkid_probe_sprintf_version(pr, "%6s", + isw->sig[sizeof(ISW_SIGNATURE)-1]) != 0) + return -1; + + return 0; +} + +const struct blkid_idinfo iswraid_idinfo = { + .name = "isw_raid_member", + .usage = BLKID_USAGE_RAID, + .probefunc = probe_iswraid +}; + + diff --git a/libs/blkid/src/probers/probers.h b/libs/blkid/src/probers/probers.h index 8e23b6b4..a9db6d90 100644 --- a/libs/blkid/src/probers/probers.h +++ b/libs/blkid/src/probers/probers.h @@ -20,5 +20,6 @@ extern const struct blkid_idinfo swap_idinfo; extern const struct blkid_idinfo swsuspend_idinfo; extern const struct blkid_idinfo adraid_idinfo; extern const struct blkid_idinfo ddfraid_idinfo; +extern const struct blkid_idinfo iswraid_idinfo; #endif /* _BLKID_PROBE_H */