111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/****************************************************************************
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   This header was automatically generated from a Linux kernel header
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   of the same name, to make information necessary for userspace to
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   call into the kernel available to libc.  It contains only constants,
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   structures, and macros generated from the original header, and thus,
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   contains no copyrightable information.
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************/
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef __LINUX_MTD_MAP_H__
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define __LINUX_MTD_MAP_H__
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/types.h>
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/list.h>
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/string.h>
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/mtd/compatmac.h>
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <asm/unaligned.h>
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <asm/system.h>
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <asm/io.h>
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define map_bankwidth_is_1(map) (0)
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define map_bankwidth_is_2(map) (0)
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define map_bankwidth_is_4(map) (0)
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define map_calc_words(map) ((map_bankwidth(map) + (sizeof(unsigned long)-1))/ sizeof(unsigned long))
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define map_bankwidth_is_8(map) (0)
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define map_bankwidth_is_16(map) (0)
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define map_bankwidth_is_32(map) (0)
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef map_bankwidth
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#error "No bus width supported. What's the point?"
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MAX_MAP_LONGS ( ((MAX_MAP_BANKWIDTH*8) + BITS_PER_LONG - 1) / BITS_PER_LONG )
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct map_info {
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char *name;
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long size;
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long phys;
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NO_XIP (-1UL)
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void __iomem *virt;
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void *cached;
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int bankwidth;
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*inval_cache)(struct map_info *, unsigned long, ssize_t);
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*set_vpp)(struct map_info *, int);
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long map_priv_1;
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long map_priv_2;
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void *fldrv_priv;
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct mtd_chip_driver *fldrv;
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct mtd_chip_driver {
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct mtd_info *(*probe)(struct map_info *map);
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*destroy)(struct mtd_info *);
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct module *module;
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char *name;
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct list_head list;
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct mtd_info *do_map_probe(const char *name, struct map_info *map);
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ENABLE_VPP(map) do { if(map->set_vpp) map->set_vpp(map, 1); } while(0)
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DISABLE_VPP(map) do { if(map->set_vpp) map->set_vpp(map, 0); } while(0)
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define INVALIDATE_CACHED_RANGE(map, from, size)   do { if(map->inval_cache) map->inval_cache(map, from, size); } while(0)
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define map_word_andequal(m, a, b, z) map_word_equal(m, z, map_word_and(m, a, b))
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if BITS_PER_LONG >= 64
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef __LITTLE_ENDIAN
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if BITS_PER_LONG < 64
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MAP_FF_LIMIT 4
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MAP_FF_LIMIT 8
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if BITS_PER_LONG >= 64
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if BITS_PER_LONG >= 64
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define map_read(map, ofs) inline_map_read(map, ofs)
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define map_copy_from(map, to, from, len) inline_map_copy_from(map, to, from, len)
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define map_write(map, datum, ofs) inline_map_write(map, datum, ofs)
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define map_copy_to(map, to, from, len) inline_map_copy_to(map, to, from, len)
10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define simple_map_init(map) BUG_ON(!map_bankwidth_supported((map)->bankwidth))
10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define map_is_linear(map) ({ (void)(map); 1; })
10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
103