home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / mtd / mtd-abi.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.9 KB  |  123 lines

  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. #ifndef __KERNEL__ 
  11. /* Urgh. The whole point of splitting this out into
  12.    separate files was to avoid #ifdef __KERNEL__ */
  13. #define __user
  14. #endif
  15.  
  16. struct erase_info_user {
  17.     uint32_t start;
  18.     uint32_t length;
  19. };
  20.  
  21. struct mtd_oob_buf {
  22.     uint32_t start;
  23.     uint32_t length;
  24.     unsigned char __user *ptr;
  25. };
  26.  
  27. #define MTD_ABSENT        0
  28. #define MTD_RAM            1
  29. #define MTD_ROM            2
  30. #define MTD_NORFLASH        3
  31. #define MTD_NANDFLASH        4
  32. #define MTD_PEROM        5
  33. #define MTD_DATAFLASH        6
  34. #define MTD_OTHER        14
  35. #define MTD_UNKNOWN        15
  36.  
  37. #define MTD_CLEAR_BITS        1       // Bits can be cleared (flash)
  38. #define MTD_SET_BITS        2       // Bits can be set
  39. #define MTD_ERASEABLE        4       // Has an erase function
  40. #define MTD_WRITEB_WRITEABLE    8       // Direct IO is possible
  41. #define MTD_VOLATILE        16      // Set for RAMs
  42. #define MTD_XIP            32    // eXecute-In-Place possible
  43. #define MTD_OOB            64    // Out-of-band data (NAND flash)
  44. #define MTD_ECC            128    // Device capable of automatic ECC
  45. #define MTD_NO_VIRTBLOCKS    256    // Virtual blocks not allowed
  46. #define MTD_PROGRAM_REGIONS    512    // Configurable Programming Regions
  47.  
  48. // Some common devices / combinations of capabilities
  49. #define MTD_CAP_ROM        0
  50. #define MTD_CAP_RAM        (MTD_CLEAR_BITS|MTD_SET_BITS|MTD_WRITEB_WRITEABLE)
  51. #define MTD_CAP_NORFLASH        (MTD_CLEAR_BITS|MTD_ERASEABLE)
  52. #define MTD_CAP_NANDFLASH       (MTD_CLEAR_BITS|MTD_ERASEABLE|MTD_OOB)
  53. #define MTD_WRITEABLE        (MTD_CLEAR_BITS|MTD_SET_BITS)
  54.  
  55.  
  56. // Types of automatic ECC/Checksum available
  57. #define MTD_ECC_NONE        0     // No automatic ECC available
  58. #define MTD_ECC_RS_DiskOnChip    1    // Automatic ECC on DiskOnChip
  59. #define MTD_ECC_SW        2    // SW ECC for Toshiba & Samsung devices
  60.  
  61. /* ECC byte placement */
  62. #define MTD_NANDECC_OFF        0    // Switch off ECC (Not recommended)
  63. #define MTD_NANDECC_PLACE    1    // Use the given placement in the structure (YAFFS1 legacy mode)
  64. #define MTD_NANDECC_AUTOPLACE    2    // Use the default placement scheme
  65. #define MTD_NANDECC_PLACEONLY    3    // Use the given placement in the structure (Do not store ecc result on read)
  66. #define MTD_NANDECC_AUTOPL_USR     4    // Use the given autoplacement scheme rather than using the default
  67.  
  68. /* OTP mode selection */
  69. #define MTD_OTP_OFF        0
  70. #define MTD_OTP_FACTORY        1
  71. #define MTD_OTP_USER        2
  72.  
  73. struct mtd_info_user {
  74.     uint8_t type;
  75.     uint32_t flags;
  76.     uint32_t size;     // Total size of the MTD
  77.     uint32_t erasesize;
  78.     uint32_t oobblock;  // Size of OOB blocks (e.g. 512)
  79.     uint32_t oobsize;   // Amount of OOB data per block (e.g. 16)
  80.     uint32_t ecctype;
  81.     uint32_t eccsize;
  82. };
  83.  
  84. struct region_info_user {
  85.     uint32_t offset;        /* At which this region starts,
  86.                      * from the beginning of the MTD */
  87.     uint32_t erasesize;        /* For this region */
  88.     uint32_t numblocks;        /* Number of blocks in this region */
  89.     uint32_t regionindex;
  90. };
  91.  
  92. struct otp_info {
  93.     uint32_t start;
  94.     uint32_t length;
  95.     uint32_t locked;
  96. };
  97.  
  98. #define MEMGETINFO              _IOR('M', 1, struct mtd_info_user)
  99. #define MEMERASE                _IOW('M', 2, struct erase_info_user)
  100. #define MEMWRITEOOB             _IOWR('M', 3, struct mtd_oob_buf)
  101. #define MEMREADOOB              _IOWR('M', 4, struct mtd_oob_buf)
  102. #define MEMLOCK                 _IOW('M', 5, struct erase_info_user)
  103. #define MEMUNLOCK               _IOW('M', 6, struct erase_info_user)
  104. #define MEMGETREGIONCOUNT    _IOR('M', 7, int)
  105. #define MEMGETREGIONINFO    _IOWR('M', 8, struct region_info_user)
  106. #define MEMSETOOBSEL        _IOW('M', 9, struct nand_oobinfo)
  107. #define MEMGETOOBSEL        _IOR('M', 10, struct nand_oobinfo)
  108. #define MEMGETBADBLOCK        _IOW('M', 11, loff_t)
  109. #define MEMSETBADBLOCK        _IOW('M', 12, loff_t)
  110. #define OTPSELECT        _IOR('M', 13, int)
  111. #define OTPGETREGIONCOUNT    _IOW('M', 14, int)
  112. #define OTPGETREGIONINFO    _IOW('M', 15, struct otp_info)
  113. #define OTPLOCK        _IOR('M', 16, struct otp_info)
  114.  
  115. struct nand_oobinfo {
  116.     uint32_t useecc;
  117.     uint32_t eccbytes;
  118.     uint32_t oobfree[8][2];
  119.     uint32_t eccpos[32];
  120. };
  121.  
  122. #endif /* __MTD_ABI_H__ */
  123.