}
}
+#define HPT37X_CONFIG_OFF 0x1200
+#define HPT37X_MAGIC_OK 0x5a7816f0
+#define HPT37X_MAGIC_BAD 0x5a7816fd
+static int probe_highpoint_ataraid(struct volume_id *id, __u64 off)
+{
+ struct hpt37x {
+ __u8 filler1[32];
+ __u32 magic;
+ __u32 magic_0;
+ __u32 magic_1;
+ } __attribute__((packed)) *hpt;
+
+ const __u8 *buf;
+
+ buf = get_buffer(id, off + HPT37X_CONFIG_OFF, 0x200);
+ if (buf == NULL)
+ return -1;
+
+ hpt = (struct hpt37x *) buf;
+
+ if (hpt->magic != HPT37X_MAGIC_OK && hpt->magic != HPT37X_MAGIC_BAD)
+ return -1;
+
+ id->usage_id = VOLUME_ID_RAID;
+ id->type_id = VOLUME_ID_HPTRAID;
+ id->type = "hpt_ataraid_member";
+
+ return 0;
+}
+
#define LVM1_SB_OFF 0x400
#define LVM1_MAGIC "HM"
static int probe_lvm1(struct volume_id *id, __u64 off)
case VOLUME_ID_LVM2:
rc = probe_lvm2(id, off);
break;
+ case VOLUME_ID_HPTRAID:
+ rc = probe_highpoint_ataraid(id, off);
+ break;
case VOLUME_ID_ALL:
default:
/* probe for raid first, cause fs probes may be successful on raid members */
if (rc == 0)
break;
rc = probe_lvm2(id, off);
+ if (rc == 0)
+ break;
+ rc = probe_highpoint_ataraid(id, off);
if (rc == 0)
break;
/* signature in the first block, only small buffer needed */
rc = probe_msdos_part_table(id, off);
- if (rc == 0)
- break;
- rc = probe_ntfs(id, off);
if (rc == 0)
break;
rc = probe_vfat(id, off);
if (rc == 0)
break;
rc = probe_ufs(id, off);
+ if (rc == 0)
+ break;
+ rc = probe_ntfs(id, off);
if (rc == 0)
break;