From 56ad7426260230b07932f46891eee75f30918818 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Tue, 9 Sep 2008 01:11:53 +0200 Subject: [PATCH] blkid: add JMicron RAID Signed-off-by: Karel Zak --- libs/blkid/src/probe.c | 3 +- libs/blkid/src/probers/Makefile.am | 3 +- libs/blkid/src/probers/jmicron_raid.c | 66 +++++++++++++++++++++++++++ libs/blkid/src/probers/probers.h | 1 + 4 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 libs/blkid/src/probers/jmicron_raid.c diff --git a/libs/blkid/src/probe.c b/libs/blkid/src/probe.c index 8b4b0047..cdaa2632 100644 --- a/libs/blkid/src/probe.c +++ b/libs/blkid/src/probe.c @@ -40,7 +40,8 @@ static const struct blkid_idinfo *idinfos[] = &swap_idinfo, &adraid_idinfo, &ddfraid_idinfo, - &iswraid_idinfo + &iswraid_idinfo, + &jmicron_idinfo }; #ifndef ARRAY_SIZE diff --git a/libs/blkid/src/probers/Makefile.am b/libs/blkid/src/probers/Makefile.am index 356770e1..ec0bd611 100644 --- a/libs/blkid/src/probers/Makefile.am +++ b/libs/blkid/src/probers/Makefile.am @@ -9,6 +9,7 @@ libprobers_a_SOURCES = probers.h \ swap.c \ adaptec_raid.c \ ddf_raid.c \ - isw_raid.c + isw_raid.c \ + jmicron_raid.c all-local: $(lib_LIBRARIES) diff --git a/libs/blkid/src/probers/jmicron_raid.c b/libs/blkid/src/probers/jmicron_raid.c new file mode 100644 index 00000000..01fe60db --- /dev/null +++ b/libs/blkid/src/probers/jmicron_raid.c @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2008 Karel Zak + * Copyright (C) 2006 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 +#include + +#include "blkidP.h" + + +struct jmicron_meta { + int8_t signature[2]; + uint8_t minor_version; + uint8_t major_version; + uint16_t checksum; +}; + +#define JM_SIGNATURE "JM" + +static int probe_jmraid(blkid_probe pr, const struct blkid_idmag *mag) +{ + uint64_t meta_off; + struct jmicron_meta *jm; + + if (pr->size < 0x10000) + return -1; + + meta_off = ((pr->size / 0x200) - 1) * 0x200; + jm = (struct jmicron_meta *) blkid_probe_get_buffer(pr, meta_off, 0x200); + if (!jm) + return -1; + + if (memcmp(jm->signature, JM_SIGNATURE, sizeof(JM_SIGNATURE) - 1) != 0) + return -1; + + + if (blkid_probe_sprintf_version(pr, "%u.%u", + jm->major_version, jm->minor_version) != 0) + return -1; + + return 0; +} + +const struct blkid_idinfo jmraid_idinfo = { + .name = "jmicron_raid_member", + .usage = BLKID_USAGE_RAID, + .probefunc = probe_jmraid +}; + + diff --git a/libs/blkid/src/probers/probers.h b/libs/blkid/src/probers/probers.h index a9db6d90..48b61b1d 100644 --- a/libs/blkid/src/probers/probers.h +++ b/libs/blkid/src/probers/probers.h @@ -21,5 +21,6 @@ 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; +extern const struct blkid_idinfo jmicron_idinfo; #endif /* _BLKID_PROBE_H */ -- 2.39.5