patch-2.4.21 linux-2.4.21/drivers/mtd/maps/physmap.c
Next file: linux-2.4.21/drivers/mtd/maps/physmap64.c
Previous file: linux-2.4.21/drivers/mtd/maps/pcmciamtd.c
Back to the patch index
Back to the overall index
- Lines: 103
- Date:
2003-06-13 07:51:34.000000000 -0700
- Orig file:
linux-2.4.20/drivers/mtd/maps/physmap.c
- Orig date:
2001-10-04 15:14:59.000000000 -0700
diff -urN linux-2.4.20/drivers/mtd/maps/physmap.c linux-2.4.21/drivers/mtd/maps/physmap.c
@@ -1,5 +1,5 @@
/*
- * $Id: physmap.c,v 1.15 2001/10/02 15:05:14 dwmw2 Exp $
+ * $Id: physmap.c,v 1.21 2002/09/05 05:12:54 acurtis Exp $
*
* Normal mappings of chips in physical memory
*/
@@ -12,6 +12,9 @@
#include <linux/mtd/map.h>
#include <linux/config.h>
+#ifdef CONFIG_MTD_PARTITIONS
+#include <linux/mtd/partitions.h>
+#endif
#define WINDOW_ADDR CONFIG_MTD_PHYSMAP_START
#define WINDOW_SIZE CONFIG_MTD_PHYSMAP_LEN
@@ -76,8 +79,47 @@
copy_to: physmap_copy_to
};
+#ifdef CONFIG_MTD_PARTITIONS
+#ifdef CONFIG_MTD_CMDLINE_PARTS
+static struct mtd_partition *mtd_parts = 0;
+static int mtd_parts_nb = 0;
+#else
+static struct mtd_partition physmap_partitions[] = {
+/* Put your own partition definitions here */
+#if 0
+ {
+ name: "bootROM",
+ size: 0x80000,
+ offset: 0,
+ mask_flags: MTD_WRITEABLE, /* force read-only */
+ }, {
+ name: "zImage",
+ size: 0x100000,
+ offset: MTDPART_OFS_APPEND,
+ mask_flags: MTD_WRITEABLE, /* force read-only */
+ }, {
+ name: "ramdisk.gz",
+ size: 0x300000,
+ offset: MTDPART_OFS_APPEND,
+ mask_flags: MTD_WRITEABLE, /* force read-only */
+ }, {
+ name: "User FS",
+ size: MTDPART_SIZ_FULL,
+ offset: MTDPART_OFS_APPEND,
+ }
+#endif
+};
+
+#define NUM_PARTITIONS (sizeof(physmap_partitions)/sizeof(struct mtd_partition))
+
+#endif
+#endif
+
int __init init_physmap(void)
{
+ static const char *rom_probe_types[] = { "cfi_probe", "jedec_probe", "map_rom", 0 };
+ const char **type;
+
printk(KERN_NOTICE "physmap flash device: %x at %x\n", WINDOW_SIZE, WINDOW_ADDR);
physmap_map.map_priv_1 = (unsigned long)ioremap(WINDOW_ADDR, WINDOW_SIZE);
@@ -85,11 +127,36 @@
printk("Failed to ioremap\n");
return -EIO;
}
- mymtd = do_map_probe("cfi_probe", &physmap_map);
+
+ mymtd = 0;
+ type = rom_probe_types;
+ for(; !mymtd && *type; type++) {
+ mymtd = do_map_probe(*type, &physmap_map);
+ }
if (mymtd) {
mymtd->module = THIS_MODULE;
add_mtd_device(mymtd);
+#ifdef CONFIG_MTD_PARTITIONS
+#ifdef CONFIG_MTD_CMDLINE_PARTS
+ mtd_parts_nb = parse_cmdline_partitions(mymtd, &mtd_parts,
+ "phys");
+ if (mtd_parts_nb > 0)
+ {
+ printk(KERN_NOTICE
+ "Using command line partition definition\n");
+ add_mtd_partitions (mymtd, mtd_parts, mtd_parts_nb);
+ }
+#else
+ if (NUM_PARTITIONS != 0)
+ {
+ printk(KERN_NOTICE
+ "Using physmap partition definition\n");
+ add_mtd_partitions (mymtd, physmap_partitions, NUM_PARTITIONS);
+ }
+
+#endif
+#endif
return 0;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)