Upload Tizen:Base source
[framework/base/util-linux-ng.git] / shlibs / blkid / src / probers / isw_raid.c
1 /*
2  * Copyright (C) 2008 Karel Zak <kzak@redhat.com>
3  *
4  * Inspired by libvolume_id by
5  *     Kay Sievers <kay.sievers@vrfy.org>
6  *
7  * This file may be redistributed under the terms of the
8  * GNU Lesser General Public License.
9  */
10 #include <stdio.h>
11 #include <stdlib.h>
12 #include <unistd.h>
13 #include <string.h>
14 #include <stdint.h>
15
16 #include "blkidP.h"
17
18 struct isw_metadata {
19         uint8_t         sig[32];
20         uint32_t        check_sum;
21         uint32_t        mpb_size;
22         uint32_t        family_num;
23         uint32_t        generation_num;
24 };
25
26 #define ISW_SIGNATURE           "Intel Raid ISM Cfg Sig. "
27
28
29 static int probe_iswraid(blkid_probe pr, const struct blkid_idmag *mag)
30 {
31         uint64_t off;
32         struct isw_metadata *isw;
33
34         if (pr->size < 0x10000)
35                 return -1;
36
37         off = ((pr->size / 0x200) - 2) * 0x200;
38         isw = (struct isw_metadata *)
39                         blkid_probe_get_buffer(pr,
40                                         off,
41                                         sizeof(struct isw_metadata));
42         if (!isw)
43                 return -1;
44         if (memcmp(isw->sig, ISW_SIGNATURE, sizeof(ISW_SIGNATURE)-1) != 0)
45                 return -1;
46         if (blkid_probe_sprintf_version(pr, "%6s",
47                         &isw->sig[sizeof(ISW_SIGNATURE)-1]) != 0)
48                 return -1;
49
50         return 0;
51 }
52
53 const struct blkid_idinfo iswraid_idinfo = {
54         .name           = "isw_raid_member",
55         .usage          = BLKID_USAGE_RAID,
56         .probefunc      = probe_iswraid,
57         .magics         = BLKID_NONE_MAGIC
58 };
59
60