uboot/include/linux/mtd/mtd-abi.h
<<
>>
Prefs
   1/*
   2 * $Id: mtd-abi.h,v 1.13 2005/11/07 11:14:56 gleixner Exp $
   3 *
   4 * Portions of MTD ABI definition which are shared by kernel and user space
   5 */
   6
   7#ifndef __MTD_ABI_H__
   8#define __MTD_ABI_H__
   9
  10#if 1
  11#include <linux/mtd/compat.h>
  12#endif
  13
  14struct erase_info_user {
  15        uint32_t start;
  16        uint32_t length;
  17};
  18
  19struct mtd_oob_buf {
  20        uint32_t start;
  21        uint32_t length;
  22        unsigned char __user *ptr;
  23};
  24
  25#define MTD_ABSENT              0
  26#define MTD_RAM                 1
  27#define MTD_ROM                 2
  28#define MTD_NORFLASH            3
  29#define MTD_NANDFLASH           4
  30#define MTD_DATAFLASH           6
  31#define MTD_UBIVOLUME           7
  32
  33#define MTD_WRITEABLE           0x400   /* Device is writeable */
  34#define MTD_BIT_WRITEABLE       0x800   /* Single bits can be flipped */
  35#define MTD_NO_ERASE            0x1000  /* No erase necessary */
  36#define MTD_STUPID_LOCK         0x2000  /* Always locked after reset */
  37
  38/* Some common devices / combinations of capabilities */
  39#define MTD_CAP_ROM             0
  40#define MTD_CAP_RAM             (MTD_WRITEABLE | MTD_BIT_WRITEABLE | MTD_NO_ERASE)
  41#define MTD_CAP_NORFLASH        (MTD_WRITEABLE | MTD_BIT_WRITEABLE)
  42#define MTD_CAP_NANDFLASH       (MTD_WRITEABLE)
  43
  44/* ECC byte placement */
  45#define MTD_NANDECC_OFF         0       /* Switch off ECC (Not recommended) */
  46#define MTD_NANDECC_PLACE       1       /* Use the given placement in the structure (YAFFS1 legacy mode) */
  47#define MTD_NANDECC_AUTOPLACE   2       /* Use the default placement scheme */
  48#define MTD_NANDECC_PLACEONLY   3       /* Use the given placement in the structure (Do not store ecc result on read) */
  49#define MTD_NANDECC_AUTOPL_USR  4       /* Use the given autoplacement scheme rather than using the default */
  50
  51/* OTP mode selection */
  52#define MTD_OTP_OFF             0
  53#define MTD_OTP_FACTORY         1
  54#define MTD_OTP_USER            2
  55
  56struct mtd_info_user {
  57        uint8_t type;
  58        uint32_t flags;
  59        uint32_t size;                  /* Total size of the MTD */
  60        uint32_t erasesize;
  61        uint32_t writesize;
  62        uint32_t oobsize;               /* Amount of OOB data per block (e.g. 16) */
  63        /* The below two fields are obsolete and broken, do not use them
  64         * (TODO: remove at some point) */
  65        uint32_t ecctype;
  66        uint32_t eccsize;
  67};
  68
  69struct region_info_user {
  70        uint32_t offset;                /* At which this region starts,
  71                                         * from the beginning of the MTD */
  72        uint32_t erasesize;             /* For this region */
  73        uint32_t numblocks;             /* Number of blocks in this region */
  74        uint32_t regionindex;
  75};
  76
  77struct otp_info {
  78        uint32_t start;
  79        uint32_t length;
  80        uint32_t locked;
  81};
  82
  83#define MEMGETINFO              _IOR('M', 1, struct mtd_info_user)
  84#define MEMERASE                _IOW('M', 2, struct erase_info_user)
  85#define MEMWRITEOOB             _IOWR('M', 3, struct mtd_oob_buf)
  86#define MEMREADOOB              _IOWR('M', 4, struct mtd_oob_buf)
  87#define MEMLOCK                 _IOW('M', 5, struct erase_info_user)
  88#define MEMUNLOCK               _IOW('M', 6, struct erase_info_user)
  89#define MEMGETREGIONCOUNT       _IOR('M', 7, int)
  90#define MEMGETREGIONINFO        _IOWR('M', 8, struct region_info_user)
  91#define MEMSETOOBSEL            _IOW('M', 9, struct nand_oobinfo)
  92#define MEMGETOOBSEL            _IOR('M', 10, struct nand_oobinfo)
  93#define MEMGETBADBLOCK          _IOW('M', 11, loff_t)
  94#define MEMSETBADBLOCK          _IOW('M', 12, loff_t)
  95#define OTPSELECT               _IOR('M', 13, int)
  96#define OTPGETREGIONCOUNT       _IOW('M', 14, int)
  97#define OTPGETREGIONINFO        _IOW('M', 15, struct otp_info)
  98#define OTPLOCK                 _IOR('M', 16, struct otp_info)
  99#define ECCGETLAYOUT            _IOR('M', 17, struct nand_ecclayout)
 100#define ECCGETSTATS             _IOR('M', 18, struct mtd_ecc_stats)
 101#define MTDFILEMODE             _IO('M', 19)
 102
 103/*
 104 * Obsolete legacy interface. Keep it in order not to break userspace
 105 * interfaces
 106 */
 107struct nand_oobinfo {
 108        uint32_t useecc;
 109        uint32_t eccbytes;
 110        uint32_t oobfree[8][2];
 111        uint32_t eccpos[48];
 112};
 113
 114struct nand_oobfree {
 115        uint32_t offset;
 116        uint32_t length;
 117};
 118
 119#define MTD_MAX_OOBFREE_ENTRIES 8
 120/*
 121 * ECC layout control structure. Exported to userspace for
 122 * diagnosis and to allow creation of raw images
 123 */
 124struct nand_ecclayout {
 125        uint32_t eccbytes;
 126        uint32_t eccpos[64];
 127        uint32_t oobavail;
 128        struct nand_oobfree oobfree[MTD_MAX_OOBFREE_ENTRIES];
 129};
 130
 131/**
 132 * struct mtd_ecc_stats - error correction stats
 133 *
 134 * @corrected:  number of corrected bits
 135 * @failed:     number of uncorrectable errors
 136 * @badblocks:  number of bad blocks in this partition
 137 * @bbtblocks:  number of blocks reserved for bad block tables
 138 */
 139struct mtd_ecc_stats {
 140        uint32_t corrected;
 141        uint32_t failed;
 142        uint32_t badblocks;
 143        uint32_t bbtblocks;
 144};
 145
 146/*
 147 * Read/write file modes for access to MTD
 148 */
 149enum mtd_file_modes {
 150        MTD_MODE_NORMAL = MTD_OTP_OFF,
 151        MTD_MODE_OTP_FACTORY = MTD_OTP_FACTORY,
 152        MTD_MODE_OTP_USER = MTD_OTP_USER,
 153        MTD_MODE_RAW,
 154};
 155
 156#endif /* __MTD_ABI_H__ */
 157