nand.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:6k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/include/linux/mtd/nand.h
  3.  *
  4.  *  Copyright (c) 2000 David Woodhouse <dwmw2@mvhi.com>
  5.  *                     Steven J. Hill <sjhill@cotw.com>
  6.  *        Thomas Gleixner <gleixner@autronix.de>
  7.  *
  8.  * $Id: nand.h,v 1.11 2002/02/26 17:58:24 gleixner Exp $
  9.  *
  10.  * This program is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU General Public License version 2 as
  12.  * published by the Free Software Foundation.
  13.  *
  14.  *  Info:
  15.  *   Contains standard defines and IDs for NAND flash devices
  16.  *
  17.  *  Changelog:
  18.  *   01-31-2000 DMW     Created
  19.  *   09-18-2000 SJH     Moved structure out of the Disk-On-Chip drivers
  20.  * so it can be used by other NAND flash device
  21.  * drivers. I also changed the copyright since none
  22.  * of the original contents of this file are specific
  23.  * to DoC devices. David can whack me with a baseball
  24.  * bat later if I did something naughty.
  25.  *   10-11-2000 SJH     Added private NAND flash structure for driver
  26.  *   10-24-2000 SJH     Added prototype for 'nand_scan' function
  27.  *   10-29-2001 TG changed nand_chip structure to support 
  28.  * hardwarespecific function for accessing control lines
  29.  *   02-21-2002 TG added support for different read/write adress and
  30.  * ready/busy line access function
  31.  *   02-26-2002 TG added chip_delay to nand_chip structure to optimize
  32.  * command delay times for different chips
  33.  */
  34. #ifndef __LINUX_MTD_NAND_H
  35. #define __LINUX_MTD_NAND_H
  36. #include <linux/config.h>
  37. #include <linux/sched.h>
  38. /*
  39.  * Searches for a NAND device
  40.  */
  41. extern int nand_scan (struct mtd_info *mtd);
  42. extern int smc_scan (struct mtd_info *mtd);
  43. /*
  44.  * Constants for hardware specific CLE/ALE/NCE function
  45. */
  46. #define NAND_CTL_SETNCE  1
  47. #define NAND_CTL_CLRNCE 2
  48. #define NAND_CTL_SETCLE 3
  49. #define NAND_CTL_CLRCLE 4
  50. #define NAND_CTL_SETALE 5
  51. #define NAND_CTL_CLRALE 6
  52. #define NAND_CTL_DAT_IN         7
  53. #define NAND_CTL_DAT_OUT        8
  54. #define SMC_OOB_USER           0
  55. #define SMC_OOB_DAT_FLAG       4
  56. #define SMC_OOB_BLK_FLAG       5
  57. #define SMC_OOB_ADDR1          6
  58. #define SMC_OOB_ECC2           8
  59. #define SMC_OOB_ADDR2          11
  60. #define SMC_OOB_ECC1           13
  61. #define SMC_OOB_SIZE           16
  62. #define SMC_STAT_WRITE_ERR     0x01    /* 1: Error in Program/Erase */
  63. #define SMC_STAT_READY         0x40    /* 0: Busy, 1: Ready */
  64. #define SMC_STAT_NOT_WP        0x80    /* 0: Protected, 1: Not */
  65. #define SMC_OOB256_SIZE        8
  66. #define SMC_OOB256_ECC1        (SMC_OOB_ECC1 - SMC_OOB256_SIZE)
  67. #define SMC_OOB256_ECC2        (SMC_OOB_ECC2 - SMC_OOB256_SIZE)
  68. struct nand_smc_dev {
  69. unsigned long CpV;      /* Cylinder/Volume */
  70. unsigned long HpC;      /* Head/Cylinder */
  71. unsigned long SpH;      /* Sector/Head */
  72. unsigned long allS;     /* Number of Sectors */
  73. unsigned long szS;      /* Sector Size */
  74. unsigned long PBpV;     /* Number of Physical Blocks in Volume */
  75. unsigned long LBpV;     /* Number of Logical Blocks in Volume */
  76. unsigned long SpB;      /* Sector/Block */
  77. unsigned long PpB;      /* Page/Block */
  78. unsigned long szP;      /* Page Size */
  79. };
  80. /*
  81.  * Standard NAND flash commands
  82.  */
  83. #define NAND_CMD_READ0 0
  84. #define NAND_CMD_READ1 1
  85. #define NAND_CMD_PAGEPROG 0x10
  86. #define NAND_CMD_READOOB 0x50
  87. #define NAND_CMD_ERASE1 0x60
  88. #define NAND_CMD_STATUS 0x70
  89. #define NAND_CMD_SEQIN 0x80
  90. #define NAND_CMD_READID 0x90
  91. #define NAND_CMD_ERASE2 0xd0
  92. #define NAND_CMD_RESET 0xff
  93. /*
  94.  * Enumeration for NAND flash chip state
  95.  */
  96. typedef enum {
  97. FL_READY,
  98. FL_READING,
  99. FL_WRITING,
  100. FL_ERASING,
  101. FL_SYNCING
  102. } nand_state_t;
  103. /*
  104.  * NAND Private Flash Chip Data
  105.  *
  106.  * Structure overview:
  107.  *
  108.  *  IO_ADDR_R - address to read the 8 I/O lines of the flash device 
  109.  *
  110.  *  IO_ADDR_W - address to write the 8 I/O lines of the flash device 
  111.  *
  112.  *  hwcontrol - hardwarespecific function for accesing control-lines
  113.  *
  114.  *  dev_ready - hardwarespecific function for accesing device ready/busy line
  115.  *
  116.  *  chip_lock - spinlock used to protect access to this structure
  117.  *
  118.  *  wq - wait queue to sleep on if a NAND operation is in progress
  119.  *
  120.  *  state - give the current state of the NAND device
  121.  *
  122.  *  page_shift - number of address bits in a page (column address bits)
  123.  *
  124.  *  data_buf - data buffer passed to/from MTD user modules
  125.  *
  126.  *  data_cache - data cache for redundant page access and shadow for
  127.  *  ECC failure
  128.  *
  129.  *  ecc_code_buf - used only for holding calculated or read ECCs for
  130.  *                 a page read or written when ECC is in use
  131.  *
  132.  *  reserved - padding to make structure fall on word boundary if
  133.  *             when ECC is in use
  134.  */
  135. struct nand_chip {
  136. #ifdef CONFIG_MTD_NANDY
  137. void (*hwcontrol)(int cmd);
  138. void (*write_cmd)(u_char val);
  139. void (*write_addr)(u_char val);
  140. u_char (*read_data)(void);
  141. void (*write_data)(u_char val);
  142. void (*wait_for_ready)(void);
  143. spinlock_t chip_lock;
  144. wait_queue_head_t wq;
  145. nand_state_t state;
  146. int page_shift;
  147. u_char *data_buf;
  148. u_char *data_cache;
  149. int cache_page;
  150. struct nand_smc_dev *dev;
  151. u_char spare[SMC_OOB_SIZE];
  152. #else /* CONFIG_MTD_NANDY */
  153. unsigned long IO_ADDR_R;
  154. unsigned long IO_ADDR_W;
  155. void (*hwcontrol)(int cmd);
  156. int (*dev_ready)(void);
  157. int chip_delay;
  158. spinlock_t chip_lock;
  159. wait_queue_head_t wq;
  160. nand_state_t state;
  161. int page_shift;
  162. u_char *data_buf;
  163. u_char *data_cache;
  164. int cache_page;
  165. #ifdef CONFIG_MTD_NAND_ECC
  166. u_char ecc_code_buf[6];
  167. u_char reserved[2];
  168. #endif
  169. #endif /* CONFIG_MTD_NANDY */
  170. };
  171. /*
  172.  * NAND Flash Manufacturer ID Codes
  173.  */
  174. #define NAND_MFR_TOSHIBA 0x98
  175. #define NAND_MFR_SAMSUNG 0xec
  176. /*
  177.  * NAND Flash Device ID Structure
  178.  *
  179.  * Structure overview:
  180.  *
  181.  *  name - Complete name of device
  182.  *
  183.  *  manufacture_id - manufacturer ID code of device.
  184.  *
  185.  *  model_id - model ID code of device.
  186.  *
  187.  *  chipshift - total number of address bits for the device which
  188.  *              is used to calculate address offsets and the total
  189.  *              number of bytes the device is capable of.
  190.  *
  191.  *  page256 - denotes if flash device has 256 byte pages or not.
  192.  *
  193.  *  pageadrlen - number of bytes minus one needed to hold the
  194.  *               complete address into the flash array. Keep in
  195.  *               mind that when a read or write is done to a
  196.  *               specific address, the address is input serially
  197.  *               8 bits at a time. This structure member is used
  198.  *               by the read/write routines as a loop index for
  199.  *               shifting the address out 8 bits at a time.
  200.  *
  201.  *  erasesize - size of an erase block in the flash device.
  202.  */
  203. struct nand_flash_dev {
  204. char * name;
  205. int manufacture_id;
  206. int model_id;
  207. int chipshift;
  208. char page256;
  209. char pageadrlen;
  210. unsigned long erasesize;
  211. };
  212. #endif /* __LINUX_MTD_NAND_H */