--- zzzz-none-000/linux-2.6.28.10/include/linux/mtd/map.h 2009-05-02 18:54:43.000000000 +0000 +++ puma5-6360-529/linux-2.6.28.10/include/linux/mtd/map.h 2010-05-10 08:32:22.000000000 +0000 @@ -203,9 +203,11 @@ #ifdef CONFIG_MTD_COMPLEX_MAPPINGS map_word (*read)(struct map_info *, unsigned long); + map_word (*cmd_read)(struct map_info *, unsigned long); void (*copy_from)(struct map_info *, void *, unsigned long, ssize_t); void (*write)(struct map_info *, const map_word, unsigned long); + void (*cmd_write)(struct map_info *, const map_word, unsigned long); void (*copy_to)(struct map_info *, unsigned long, const void *, ssize_t); /* We can perhaps put in 'point' and 'unpoint' methods, if we really @@ -373,6 +375,8 @@ { map_word r; + /*--- printk(" [%s], mapbankwidth:%u, map->virt=%#x, ofs:%#lx :", __func__, map_bankwidth(map), (unsigned int)map->virt, ofs); ---*/ + if (map_bankwidth_is_1(map)) r.x[0] = __raw_readb(map->virt + ofs); else if (map_bankwidth_is_2(map)) @@ -386,11 +390,14 @@ else if (map_bankwidth_is_large(map)) memcpy_fromio(r.x, map->virt+ofs, map->bankwidth); + /*--- printk("'%#x'\n",(unsigned int)r.x[0]); ---*/ return r; } static inline void inline_map_write(struct map_info *map, const map_word datum, unsigned long ofs) { + /*--- printk(" [%s], mapbankwidth:%u, datum:%#lx, map->virt=%#x ofs:%#lx\n", __func__, map_bankwidth(map), datum.x[0], (unsigned int)map->virt, ofs); ---*/ + if (map_bankwidth_is_1(map)) __raw_writeb(datum.x[0], map->virt + ofs); else if (map_bankwidth_is_2(map)) @@ -420,18 +427,22 @@ } #ifdef CONFIG_MTD_COMPLEX_MAPPINGS -#define map_read(map, ofs) (map)->read(map, ofs) -#define map_copy_from(map, to, from, len) (map)->copy_from(map, to, from, len) -#define map_write(map, datum, ofs) (map)->write(map, datum, ofs) -#define map_copy_to(map, to, from, len) (map)->copy_to(map, to, from, len) +#define map_read(map, ofs) (map)->read(map, ofs) +#define map_cmd_read(map, ofs) ((map)->cmd_read ? (map)->cmd_read(map, ofs) : (map)->read(map, ofs)) +#define map_copy_from(map, to, from, len) (map)->copy_from(map, to, from, len) +#define map_write(map, datum, ofs) (map)->write(map, datum, ofs) +#define map_cmd_write(map, datum, ofs) ((map)->cmd_write ? (map)->cmd_write(map, datum, ofs) : (map)->write(map, datum, ofs)) +#define map_copy_to(map, to, from, len) (map)->copy_to(map, to, from, len) extern void simple_map_init(struct map_info *); #define map_is_linear(map) (map->phys != NO_XIP) #else #define map_read(map, ofs) inline_map_read(map, ofs) +#define map_cmd_read(map, ofs) inline_map_read(map, ofs) #define map_copy_from(map, to, from, len) inline_map_copy_from(map, to, from, len) #define map_write(map, datum, ofs) inline_map_write(map, datum, ofs) +#define map_cmd_write(map, datum, ofs) inline_map_write(map, datum, ofs) #define map_copy_to(map, to, from, len) inline_map_copy_to(map, to, from, len) @@ -441,3 +452,4 @@ #endif /* !CONFIG_MTD_COMPLEX_MAPPINGS */ #endif /* __LINUX_MTD_MAP_H__ */ +