📄 redwood.c
字号:
/* * $Id: redwood.c,v 1.10 2004/11/04 13:24:15 gleixner Exp $ * * drivers/mtd/maps/redwood.c * * FLASH map for the IBM Redwood 4/5/6 boards. * * Author: MontaVista Software, Inc. <source@mvista.com> * * 2001-2003 (c) MontaVista, Software, Inc. This file is licensed under * the terms of the GNU General Public License version 2. This program * is licensed "as is" without any warranty of any kind, whether express * or implied. */#include <linux/config.h>#include <linux/module.h>#include <linux/types.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/mtd/mtd.h>#include <linux/mtd/map.h>#include <linux/mtd/partitions.h>#include <asm/io.h>#if !defined (CONFIG_REDWOOD_6)#define WINDOW_ADDR 0xffc00000#define WINDOW_SIZE 0x00400000#define RW_PART0_OF 0#define RW_PART0_SZ 0x10000#define RW_PART1_OF RW_PART0_SZ#define RW_PART1_SZ 0x200000 - 0x10000#define RW_PART2_OF 0x200000#define RW_PART2_SZ 0x10000#define RW_PART3_OF 0x210000#define RW_PART3_SZ 0x200000 - (0x10000 + 0x20000)#define RW_PART4_OF 0x3e0000#define RW_PART4_SZ 0x20000static struct mtd_partition redwood_flash_partitions[] = { { .name = "Redwood OpenBIOS Vital Product Data", .offset = RW_PART0_OF, .size = RW_PART0_SZ, .mask_flags = MTD_WRITEABLE /* force read-only */ }, { .name = "Redwood kernel", .offset = RW_PART1_OF, .size = RW_PART1_SZ }, { .name = "Redwood OpenBIOS non-volatile storage", .offset = RW_PART2_OF, .size = RW_PART2_SZ, .mask_flags = MTD_WRITEABLE /* force read-only */ }, { .name = "Redwood filesystem", .offset = RW_PART3_OF, .size = RW_PART3_SZ }, { .name = "Redwood OpenBIOS", .offset = RW_PART4_OF, .size = RW_PART4_SZ, .mask_flags = MTD_WRITEABLE /* force read-only */ }};#else /* CONFIG_REDWOOD_6 *//* FIXME: the window is bigger - armin */#define WINDOW_ADDR 0xff800000#define WINDOW_SIZE 0x00800000#define RW_PART0_OF 0#define RW_PART0_SZ 0x400000 /* 4 MiB data */#define RW_PART1_OF RW_PART0_OF + RW_PART0_SZ #define RW_PART1_SZ 0x10000 /* 64K VPD */#define RW_PART2_OF RW_PART1_OF + RW_PART1_SZ#define RW_PART2_SZ 0x400000 - (0x10000 + 0x20000)#define RW_PART3_OF RW_PART2_OF + RW_PART2_SZ#define RW_PART3_SZ 0x20000static struct mtd_partition redwood_flash_partitions[] = { { .name = "Redwood filesystem", .offset = RW_PART0_OF, .size = RW_PART0_SZ }, { .name = "Redwood OpenBIOS Vital Product Data", .offset = RW_PART1_OF, .size = RW_PART1_SZ, .mask_flags = MTD_WRITEABLE /* force read-only */ }, { .name = "Redwood kernel", .offset = RW_PART2_OF, .size = RW_PART2_SZ }, { .name = "Redwood OpenBIOS", .offset = RW_PART3_OF, .size = RW_PART3_SZ, .mask_flags = MTD_WRITEABLE /* force read-only */ }};#endif /* CONFIG_REDWOOD_6 */struct map_info redwood_flash_map = { .name = "IBM Redwood", .size = WINDOW_SIZE, .bankwidth = 2, .phys = WINDOW_ADDR,};#define NUM_REDWOOD_FLASH_PARTITIONS \ (sizeof(redwood_flash_partitions)/sizeof(redwood_flash_partitions[0]))static struct mtd_info *redwood_mtd;int __init init_redwood_flash(void){ printk(KERN_NOTICE "redwood: flash mapping: %x at %x\n", WINDOW_SIZE, WINDOW_ADDR); redwood_flash_map.virt = ioremap(WINDOW_ADDR, WINDOW_SIZE); if (!redwood_flash_map.virt) { printk("init_redwood_flash: failed to ioremap\n"); return -EIO; } simple_map_init(&redwood_flash_map); redwood_mtd = do_map_probe("cfi_probe",&redwood_flash_map); if (redwood_mtd) { redwood_mtd->owner = THIS_MODULE; return add_mtd_partitions(redwood_mtd, redwood_flash_partitions, NUM_REDWOOD_FLASH_PARTITIONS); } return -ENXIO;}static void __exit cleanup_redwood_flash(void){ if (redwood_mtd) { del_mtd_partitions(redwood_mtd); /* moved iounmap after map_destroy - armin */ map_destroy(redwood_mtd); iounmap((void *)redwood_flash_map.virt); }}module_init(init_redwood_flash);module_exit(cleanup_redwood_flash);MODULE_LICENSE("GPL");MODULE_AUTHOR("MontaVista Software <source@mvista.com>");MODULE_DESCRIPTION("MTD map driver for the IBM Redwood reference boards");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -