~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to drivers/mtd/chips/map_rom.c

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Common code to handle map devices which are simple ROM
 
3
 * (C) 2000 Red Hat. GPL'd.
 
4
 */
 
5
 
 
6
#include <linux/module.h>
 
7
#include <linux/types.h>
 
8
#include <linux/kernel.h>
 
9
#include <asm/io.h>
 
10
#include <asm/byteorder.h>
 
11
#include <linux/errno.h>
 
12
#include <linux/slab.h>
 
13
#include <linux/init.h>
 
14
#include <linux/mtd/mtd.h>
 
15
#include <linux/mtd/map.h>
 
16
 
 
17
static int maprom_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *);
 
18
static int maprom_write (struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
 
19
static void maprom_nop (struct mtd_info *);
 
20
static struct mtd_info *map_rom_probe(struct map_info *map);
 
21
static int maprom_erase (struct mtd_info *mtd, struct erase_info *info);
 
22
static unsigned long maprom_unmapped_area(struct mtd_info *, unsigned long,
 
23
                                          unsigned long, unsigned long);
 
24
 
 
25
static struct mtd_chip_driver maprom_chipdrv = {
 
26
        .probe  = map_rom_probe,
 
27
        .name   = "map_rom",
 
28
        .module = THIS_MODULE
 
29
};
 
30
 
 
31
static struct mtd_info *map_rom_probe(struct map_info *map)
 
32
{
 
33
        struct mtd_info *mtd;
 
34
 
 
35
        mtd = kzalloc(sizeof(*mtd), GFP_KERNEL);
 
36
        if (!mtd)
 
37
                return NULL;
 
38
 
 
39
        map->fldrv = &maprom_chipdrv;
 
40
        mtd->priv = map;
 
41
        mtd->name = map->name;
 
42
        mtd->type = MTD_ROM;
 
43
        mtd->size = map->size;
 
44
        mtd->get_unmapped_area = maprom_unmapped_area;
 
45
        mtd->read = maprom_read;
 
46
        mtd->write = maprom_write;
 
47
        mtd->sync = maprom_nop;
 
48
        mtd->erase = maprom_erase;
 
49
        mtd->flags = MTD_CAP_ROM;
 
50
        mtd->erasesize = map->size;
 
51
        mtd->writesize = 1;
 
52
 
 
53
        __module_get(THIS_MODULE);
 
54
        return mtd;
 
55
}
 
56
 
 
57
 
 
58
/*
 
59
 * Allow NOMMU mmap() to directly map the device (if not NULL)
 
60
 * - return the address to which the offset maps
 
61
 * - return -ENOSYS to indicate refusal to do the mapping
 
62
 */
 
63
static unsigned long maprom_unmapped_area(struct mtd_info *mtd,
 
64
                                          unsigned long len,
 
65
                                          unsigned long offset,
 
66
                                          unsigned long flags)
 
67
{
 
68
        struct map_info *map = mtd->priv;
 
69
        return (unsigned long) map->virt + offset;
 
70
}
 
71
 
 
72
static int maprom_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)
 
73
{
 
74
        struct map_info *map = mtd->priv;
 
75
 
 
76
        map_copy_from(map, buf, from, len);
 
77
        *retlen = len;
 
78
        return 0;
 
79
}
 
80
 
 
81
static void maprom_nop(struct mtd_info *mtd)
 
82
{
 
83
        /* Nothing to see here */
 
84
}
 
85
 
 
86
static int maprom_write (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf)
 
87
{
 
88
        printk(KERN_NOTICE "maprom_write called\n");
 
89
        return -EIO;
 
90
}
 
91
 
 
92
static int maprom_erase (struct mtd_info *mtd, struct erase_info *info)
 
93
{
 
94
        /* We do our best 8) */
 
95
        return -EROFS;
 
96
}
 
97
 
 
98
static int __init map_rom_init(void)
 
99
{
 
100
        register_mtd_chip_driver(&maprom_chipdrv);
 
101
        return 0;
 
102
}
 
103
 
 
104
static void __exit map_rom_exit(void)
 
105
{
 
106
        unregister_mtd_chip_driver(&maprom_chipdrv);
 
107
}
 
108
 
 
109
module_init(map_rom_init);
 
110
module_exit(map_rom_exit);
 
111
 
 
112
MODULE_LICENSE("GPL");
 
113
MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>");
 
114
MODULE_DESCRIPTION("MTD chip driver for ROM chips");