| /* |
| * pnc2000.c - mapper for Photron PNC-2000 board. |
| * |
| * Copyright (C) 2000 Crossnet Co. <info@crossnet.co.jp> |
| * |
| * This code is GPL |
| * |
| * $Id: pnc2000.c,v 1.18 2005/11/07 11:14:28 gleixner Exp $ |
| */ |
| |
| #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> |
| |
| |
| #define WINDOW_ADDR 0xbf000000 |
| #define WINDOW_SIZE 0x00400000 |
| |
| /* |
| * MAP DRIVER STUFF |
| */ |
| |
| |
| static struct map_info pnc_map = { |
| .name = "PNC-2000", |
| .size = WINDOW_SIZE, |
| .bankwidth = 4, |
| .phys = 0xFFFFFFFF, |
| .virt = (void __iomem *)WINDOW_ADDR, |
| }; |
| |
| |
| /* |
| * MTD 'PARTITIONING' STUFF |
| */ |
| static struct mtd_partition pnc_partitions[3] = { |
| { |
| .name = "PNC-2000 boot firmware", |
| .size = 0x20000, |
| .offset = 0 |
| }, |
| { |
| .name = "PNC-2000 kernel", |
| .size = 0x1a0000, |
| .offset = 0x20000 |
| }, |
| { |
| .name = "PNC-2000 filesystem", |
| .size = 0x240000, |
| .offset = 0x1c0000 |
| } |
| }; |
| |
| /* |
| * This is the master MTD device for which all the others are just |
| * auto-relocating aliases. |
| */ |
| static struct mtd_info *mymtd; |
| |
| static int __init init_pnc2000(void) |
| { |
| printk(KERN_NOTICE "Photron PNC-2000 flash mapping: %x at %x\n", WINDOW_SIZE, WINDOW_ADDR); |
| |
| simple_map_init(&pnc_map); |
| |
| mymtd = do_map_probe("cfi_probe", &pnc_map); |
| if (mymtd) { |
| mymtd->owner = THIS_MODULE; |
| return add_mtd_partitions(mymtd, pnc_partitions, 3); |
| } |
| |
| return -ENXIO; |
| } |
| |
| static void __exit cleanup_pnc2000(void) |
| { |
| if (mymtd) { |
| del_mtd_partitions(mymtd); |
| map_destroy(mymtd); |
| } |
| } |
| |
| module_init(init_pnc2000); |
| module_exit(cleanup_pnc2000); |
| |
| MODULE_LICENSE("GPL"); |
| MODULE_AUTHOR("Crossnet Co. <info@crossnet.co.jp>"); |
| MODULE_DESCRIPTION("MTD map driver for Photron PNC-2000 board"); |