|
@@ -58,6 +58,31 @@ msdos_magic_present(unsigned char *p)
|
|
|
return (p[0] == MSDOS_LABEL_MAGIC1 && p[1] == MSDOS_LABEL_MAGIC2);
|
|
|
}
|
|
|
|
|
|
+/* Value is EBCDIC 'IBMA' */
|
|
|
+#define AIX_LABEL_MAGIC1 0xC9
|
|
|
+#define AIX_LABEL_MAGIC2 0xC2
|
|
|
+#define AIX_LABEL_MAGIC3 0xD4
|
|
|
+#define AIX_LABEL_MAGIC4 0xC1
|
|
|
+static int aix_magic_present(unsigned char *p, struct block_device *bdev)
|
|
|
+{
|
|
|
+ Sector sect;
|
|
|
+ unsigned char *d;
|
|
|
+ int ret = 0;
|
|
|
+
|
|
|
+ if (p[0] != AIX_LABEL_MAGIC1 &&
|
|
|
+ p[1] != AIX_LABEL_MAGIC2 &&
|
|
|
+ p[2] != AIX_LABEL_MAGIC3 &&
|
|
|
+ p[3] != AIX_LABEL_MAGIC4)
|
|
|
+ return 0;
|
|
|
+ d = read_dev_sector(bdev, 7, §);
|
|
|
+ if (d) {
|
|
|
+ if (d[0] == '_' && d[1] == 'L' && d[2] == 'V' && d[3] == 'M')
|
|
|
+ ret = 1;
|
|
|
+ put_dev_sector(sect);
|
|
|
+ };
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Create devices for each logical partition in an extended partition.
|
|
|
* The logical partitions form a linked list, with each entry being
|
|
@@ -393,6 +418,12 @@ int msdos_partition(struct parsed_partitions *state, struct block_device *bdev)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+ if (aix_magic_present(data, bdev)) {
|
|
|
+ put_dev_sector(sect);
|
|
|
+ printk( " [AIX]");
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
/*
|
|
|
* Now that the 55aa signature is present, this is probably
|
|
|
* either the boot sector of a FAT filesystem or a DOS-type
|