nand.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:4k
源码类别:

Linux/Unix编程

开发平台:

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.  *
  7.  * $Id: nand.h,v 1.8 2000/10/30 17:16:17 sjhill Exp $
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License version 2 as
  11.  * published by the Free Software Foundation.
  12.  *
  13.  *  Info:
  14.  *   Contains standard defines and IDs for NAND flash devices
  15.  *
  16.  *  Changelog:
  17.  *   01-31-2000 DMW     Created
  18.  *   09-18-2000 SJH     Moved structure out of the Disk-On-Chip drivers
  19.  * so it can be used by other NAND flash device
  20.  * drivers. I also changed the copyright since none
  21.  * of the original contents of this file are specific
  22.  * to DoC devices. David can whack me with a baseball
  23.  * bat later if I did something naughty.
  24.  *   10-11-2000 SJH     Added private NAND flash structure for driver
  25.  *   10-24-2000 SJH     Added prototype for 'nand_scan' function
  26.  */
  27. #ifndef __LINUX_MTD_NAND_H
  28. #define __LINUX_MTD_NAND_H
  29. #include <linux/config.h>
  30. #include <linux/sched.h>
  31. /*
  32.  * Searches for a NAND device
  33.  */
  34. extern int nand_scan (struct mtd_info *mtd);
  35. /*
  36.  * Standard NAND flash commands
  37.  */
  38. #define NAND_CMD_READ0 0
  39. #define NAND_CMD_READ1 1
  40. #define NAND_CMD_PAGEPROG 0x10
  41. #define NAND_CMD_READOOB 0x50
  42. #define NAND_CMD_ERASE1 0x60
  43. #define NAND_CMD_STATUS 0x70
  44. #define NAND_CMD_SEQIN 0x80
  45. #define NAND_CMD_READID 0x90
  46. #define NAND_CMD_ERASE2 0xd0
  47. #define NAND_CMD_RESET 0xff
  48. /*
  49.  * Enumeration for NAND flash chip state
  50.  */
  51. typedef enum {
  52. FL_READY,
  53. FL_READING,
  54. FL_WRITING,
  55. FL_ERASING,
  56. FL_SYNCING
  57. } nand_state_t;
  58. /*
  59.  * NAND Private Flash Chip Data
  60.  *
  61.  * Structure overview:
  62.  *
  63.  *  IO_ADDR - address to access the 8 I/O lines to the flash device
  64.  *
  65.  *  CTRL_ADDR - address where ALE, CLE and CE control bits are accessed
  66.  *
  67.  *  CLE - location in control word for Command Latch Enable bit
  68.  *
  69.  *  ALE - location in control word for Address Latch Enable bit
  70.  *
  71.  *  NCE - location in control word for nChip Enable bit
  72.  *
  73.  *  chip_lock - spinlock used to protect access to this structure
  74.  *
  75.  *  wq - wait queue to sleep on if a NAND operation is in progress
  76.  *
  77.  *  state - give the current state of the NAND device
  78.  *
  79.  *  page_shift - number of address bits in a page (column address bits)
  80.  *
  81.  *  data_buf - data buffer passed to/from MTD user modules
  82.  *
  83.  *  ecc_code_buf - used only for holding calculated or read ECCs for
  84.  *                 a page read or written when ECC is in use
  85.  *
  86.  *  reserved - padding to make structure fall on word boundary if
  87.  *             when ECC is in use
  88.  */
  89. struct nand_chip {
  90. unsigned long IO_ADDR;
  91. unsigned long CTRL_ADDR;
  92. unsigned int CLE;
  93. unsigned int ALE;
  94. unsigned int NCE;
  95. spinlock_t chip_lock;
  96. wait_queue_head_t wq;
  97. nand_state_t state;
  98. int page_shift;
  99. u_char *data_buf;
  100. #ifdef CONFIG_MTD_NAND_ECC
  101. u_char ecc_code_buf[6];
  102. u_char reserved[2];
  103. #endif
  104. };
  105. /*
  106.  * NAND Flash Manufacturer ID Codes
  107.  */
  108. #define NAND_MFR_TOSHIBA 0x98
  109. #define NAND_MFR_SAMSUNG 0xec
  110. /*
  111.  * NAND Flash Device ID Structure
  112.  *
  113.  * Structure overview:
  114.  *
  115.  *  name - Complete name of device
  116.  *
  117.  *  manufacture_id - manufacturer ID code of device.
  118.  *
  119.  *  model_id - model ID code of device.
  120.  *
  121.  *  chipshift - total number of address bits for the device which
  122.  *              is used to calculate address offsets and the total
  123.  *              number of bytes the device is capable of.
  124.  *
  125.  *  page256 - denotes if flash device has 256 byte pages or not.
  126.  *
  127.  *  pageadrlen - number of bytes minus one needed to hold the
  128.  *               complete address into the flash array. Keep in
  129.  *               mind that when a read or write is done to a
  130.  *               specific address, the address is input serially
  131.  *               8 bits at a time. This structure member is used
  132.  *               by the read/write routines as a loop index for
  133.  *               shifting the address out 8 bits at a time.
  134.  *
  135.  *  erasesize - size of an erase block in the flash device.
  136.  */
  137. struct nand_flash_dev {
  138. char * name;
  139. int manufacture_id;
  140. int model_id;
  141. int chipshift;
  142. char page256;
  143. char pageadrlen;
  144. unsigned long erasesize;
  145. };
  146. #endif /* __LINUX_MTD_NAND_H */