1/* 2 * pnc2000.c - mapper for Photron PNC-2000 board. 3 * 4 * Copyright (C) 2000 Crossnet Co. <info@crossnet.co.jp> 5 * 6 * This code is GPL 7 * 8 * $Id: pnc2000.c,v 1.1.1.1 2007/08/03 18:52:44 Exp $ 9 */ 10 11#include <linux/module.h> 12#include <linux/types.h> 13#include <linux/kernel.h> 14#include <linux/init.h> 15 16#include <linux/mtd/mtd.h> 17#include <linux/mtd/map.h> 18#include <linux/mtd/partitions.h> 19 20 21#define WINDOW_ADDR 0xbf000000 22#define WINDOW_SIZE 0x00400000 23 24/* 25 * MAP DRIVER STUFF 26 */ 27 28 29static struct map_info pnc_map = { 30 .name = "PNC-2000", 31 .size = WINDOW_SIZE, 32 .bankwidth = 4, 33 .phys = 0xFFFFFFFF, 34 .virt = (void __iomem *)WINDOW_ADDR, 35}; 36 37 38/* 39 * MTD 'PARTITIONING' STUFF 40 */ 41static struct mtd_partition pnc_partitions[3] = { 42 { 43 .name = "PNC-2000 boot firmware", 44 .size = 0x20000, 45 .offset = 0 46 }, 47 { 48 .name = "PNC-2000 kernel", 49 .size = 0x1a0000, 50 .offset = 0x20000 51 }, 52 { 53 .name = "PNC-2000 filesystem", 54 .size = 0x240000, 55 .offset = 0x1c0000 56 } 57}; 58 59/* 60 * This is the master MTD device for which all the others are just 61 * auto-relocating aliases. 62 */ 63static struct mtd_info *mymtd; 64 65static int __init init_pnc2000(void) 66{ 67 printk(KERN_NOTICE "Photron PNC-2000 flash mapping: %x at %x\n", WINDOW_SIZE, WINDOW_ADDR); 68 69 simple_map_init(&pnc_map); 70 71 mymtd = do_map_probe("cfi_probe", &pnc_map); 72 if (mymtd) { 73 mymtd->owner = THIS_MODULE; 74 return add_mtd_partitions(mymtd, pnc_partitions, 3); 75 } 76 77 return -ENXIO; 78} 79 80static void __exit cleanup_pnc2000(void) 81{ 82 if (mymtd) { 83 del_mtd_partitions(mymtd); 84 map_destroy(mymtd); 85 } 86} 87 88module_init(init_pnc2000); 89module_exit(cleanup_pnc2000); 90 91MODULE_LICENSE("GPL"); 92MODULE_AUTHOR("Crossnet Co. <info@crossnet.co.jp>"); 93MODULE_DESCRIPTION("MTD map driver for Photron PNC-2000 board"); 94