2 * $Id: rpxlite.c,v 1.8 2000/12/09 22:00:31 dwmw2 Exp $
4 * Handle mapping of the flash on the RPX Lite and CLLF boards
7 #include <linux/module.h>
8 #include <linux/types.h>
9 #include <linux/kernel.h>
11 #include <linux/mtd/mtd.h>
12 #include <linux/mtd/map.h>
15 #define WINDOW_ADDR 0xfe000000
16 #define WINDOW_SIZE 0x800000
18 static struct mtd_info
*mymtd
;
20 __u8
rpxlite_read8(struct map_info
*map
, unsigned long ofs
)
22 return readb(map
->map_priv_1
* ofs
);
25 __u16
rpxlite_read16(struct map_info
*map
, unsigned long ofs
)
27 return readw(map
->map_priv_1
+ ofs
);
30 __u32
rpxlite_read32(struct map_info
*map
, unsigned long ofs
)
32 return readl(map
->map_priv_1
+ ofs
);
35 void rpxlite_copy_from(struct map_info
*map
, void *to
, unsigned long from
, ssize_t len
)
37 memcpy_fromio(to
, (void *)(map
->map_priv_1
+ from
), len
);
40 void rpxlite_write8(struct map_info
*map
, __u8 d
, unsigned long adr
)
42 writeb(d
, map
->map_priv_1
+ adr
);
45 void rpxlite_write16(struct map_info
*map
, __u16 d
, unsigned long adr
)
47 writew(d
, map
->map_priv_1
+ adr
);
50 void rpxlite_write32(struct map_info
*map
, __u32 d
, unsigned long adr
)
52 writel(d
, map
->map_priv_1
+ adr
);
55 void rpxlite_copy_to(struct map_info
*map
, unsigned long to
, const void *from
, ssize_t len
)
57 memcpy_toio((void *)(map
->map_priv_1
+ to
), from
, len
);
60 struct map_info rpxlite_map
= {
65 read16
: rpxlite_read16
,
66 read32
: rpxlite_read32
,
67 copy_from
: rpxlite_copy_from
,
68 write8
: rpxlite_write8
,
69 write16
: rpxlite_write16
,
70 write32
: rpxlite_write32
,
71 copy_to
: rpxlite_copy_to
74 #if LINUX_VERSION_CODE < 0x20212 && defined(MODULE)
75 #define init_rpxlite init_module
76 #define cleanup_rpxlite cleanup_module
79 int __init
init_rpxlite(void)
81 printk(KERN_NOTICE
"RPX Lite or CLLF flash device: %x at %x\n", WINDOW_SIZE
*4, WINDOW_ADDR
);
82 rpxlite_map
.map_priv_1
= (unsigned long)ioremap(WINDOW_ADDR
, WINDOW_SIZE
* 4);
84 if (!rpxlite_map
.map_priv_1
) {
85 printk("Failed to ioremap\n");
88 mymtd
= do_cfi_probe(&rpxlite_map
);
91 mymtd
->module
= &__this_module
;
93 add_mtd_device(mymtd
);
100 static void __exit
cleanup_rpxlite(void)
103 del_mtd_device(mymtd
);
106 if (rpxlite_map
.map_priv_1
) {
107 iounmap((void *)rpxlite_map
.map_priv_1
);
108 rpxlite_map
.map_priv_1
= 0;
112 module_init(init_rpxlite
);
113 module_exit(cleanup_rpxlite
);