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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* Linux driver for Disk-On-Chip 2000       */
  2. /* (c) 1999 Machine Vision Holdings, Inc.   */
  3. /* Author: David Woodhouse <dwmw2@mvhi.com> */
  4. /* $Id: doc2000.h,v 1.15 2001/09/19 00:22:15 dwmw2 Exp $ */
  5. #ifndef __MTD_DOC2000_H__
  6. #define __MTD_DOC2000_H__
  7. #include <linux/mtd/mtd.h>
  8. #define DoC_Sig1 0
  9. #define DoC_Sig2 1
  10. #define DoC_ChipID 0x1000
  11. #define DoC_DOCStatus 0x1001
  12. #define DoC_DOCControl 0x1002
  13. #define DoC_FloorSelect 0x1003
  14. #define DoC_CDSNControl 0x1004
  15. #define DoC_CDSNDeviceSelect  0x1005
  16. #define DoC_ECCConf  0x1006
  17. #define DoC_2k_ECCStatus 0x1007
  18. #define DoC_CDSNSlowIO 0x100d
  19. #define DoC_ECCSyndrome0 0x1010
  20. #define DoC_ECCSyndrome1 0x1011
  21. #define DoC_ECCSyndrome2 0x1012
  22. #define DoC_ECCSyndrome3 0x1013
  23. #define DoC_ECCSyndrome4 0x1014
  24. #define DoC_ECCSyndrome5 0x1015
  25. #define DoC_AliasResolution  0x101b
  26. #define DoC_ConfigInput 0x101c
  27. #define DoC_ReadPipeInit  0x101d
  28. #define DoC_WritePipeTerm  0x101e
  29. #define DoC_LastDataRead  0x101f
  30. #define DoC_NOP  0x1020
  31. #define DoC_Mil_CDSN_IO  0x0800
  32. #define DoC_2k_CDSN_IO  0x1800
  33. /* How to access the device? 
  34.  * On ARM, it'll be mmap'd directly with 32-bit wide accesses. 
  35.  * On PPC, it's mmap'd and 16-bit wide.
  36.  * Others use readb/writeb 
  37.  */
  38. #if defined(__arm__)
  39. #define ReadDOC_(adr, reg)      ((unsigned char)(*(__u32 *)(((unsigned long)adr)+((reg)<<2))))
  40. #define WriteDOC_(d, adr, reg)  do{ *(__u32 *)(((unsigned long)adr)+((reg)<<2)) = (__u32)d; wmb();} while(0)
  41. #define DOC_IOREMAP_LEN 0x8000
  42. #elif defined(__ppc__)
  43. #define ReadDOC_(adr, reg)      ((unsigned char)(*(__u16 *)(((unsigned long)adr)+((reg)<<1))))
  44. #define WriteDOC_(d, adr, reg)  do{ *(__u16 *)(((unsigned long)adr)+((reg)<<1)) = (__u16)d; wmb();} while(0)
  45. #define DOC_IOREMAP_LEN 0x4000
  46. #else
  47. #define ReadDOC_(adr, reg)      readb(((unsigned long)adr) + (reg))
  48. #define WriteDOC_(d, adr, reg)  writeb(d, ((unsigned long)adr) + (reg))
  49. #define DOC_IOREMAP_LEN 0x2000
  50. #endif
  51. #if defined(__i386__) || defined(__x86_64__)
  52. #define USE_MEMCPY
  53. #endif
  54. /* These are provided to directly use the DoC_xxx defines */
  55. #define ReadDOC(adr, reg)      ReadDOC_(adr,DoC_##reg)
  56. #define WriteDOC(d, adr, reg)  WriteDOC_(d,adr,DoC_##reg)
  57. #define DOC_MODE_RESET  0
  58. #define DOC_MODE_NORMAL  1
  59. #define DOC_MODE_RESERVED1  2
  60. #define DOC_MODE_RESERVED2  3
  61. #define DOC_MODE_MDWREN  4
  62. #define DOC_MODE_CLR_ERR  0x80
  63. #define DOC_ChipID_Doc2k  0x20
  64. #define DOC_ChipID_DocMil  0x30
  65. #define CDSN_CTRL_FR_B  0x80
  66. #define CDSN_CTRL_ECC_IO  0x20
  67. #define CDSN_CTRL_FLASH_IO  0x10
  68. #define CDSN_CTRL_WP  0x08
  69. #define CDSN_CTRL_ALE  0x04
  70. #define CDSN_CTRL_CLE  0x02
  71. #define CDSN_CTRL_CE  0x01
  72. #define DOC_ECC_RESET  0
  73. #define DOC_ECC_ERROR  0x80
  74. #define DOC_ECC_RW  0x20
  75. #define DOC_ECC__EN  0x08
  76. #define DOC_TOGGLE_BIT  0x04
  77. #define DOC_ECC_RESV  0x02
  78. #define DOC_ECC_IGNORE 0x01
  79. /* We have to also set the reserved bit 1 for enable */
  80. #define DOC_ECC_EN (DOC_ECC__EN | DOC_ECC_RESV)
  81. #define DOC_ECC_DIS (DOC_ECC_RESV)
  82. struct Nand {
  83. char floor, chip;
  84. unsigned long curadr;
  85. unsigned char curmode;
  86. /* Also some erase/write/pipeline info when we get that far */
  87. };
  88. #define MAX_FLOORS 4
  89. #define MAX_CHIPS 4
  90. #define MAX_FLOORS_MIL 4
  91. #define MAX_CHIPS_MIL 1
  92. #define ADDR_COLUMN 1
  93. #define ADDR_PAGE 2
  94. #define ADDR_COLUMN_PAGE 3
  95. struct DiskOnChip {
  96. unsigned long physadr;
  97. unsigned long virtadr;
  98. unsigned long totlen;
  99. char ChipID; /* Type of DiskOnChip */
  100. int ioreg;
  101. unsigned long mfr; /* Flash IDs - only one type of flash per device */
  102. unsigned long id;
  103. int chipshift;
  104. char page256;
  105. char pageadrlen;
  106. unsigned long erasesize;
  107. int curfloor;
  108. int curchip;
  109. int numchips;
  110. struct Nand *chips;
  111. struct mtd_info *nextdoc;
  112. struct semaphore lock;
  113. };
  114. int doc_decode_ecc(unsigned char sector[512], unsigned char ecc1[6]);
  115. #endif /* __MTD_DOC2000_H__ */