nec7210_registers.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /***************************************************************************
  3. * copyright : (C) 2002 by Frank Mori Hess
  4. ***************************************************************************/
  5. #ifndef _NEC7210_REGISTERS_H
  6. #define _NEC7210_REGISTERS_H
  7. enum nec7210_chipset {
  8. NEC7210, // The original
  9. TNT4882, // NI
  10. NAT4882, // NI
  11. CB7210, // measurement computing
  12. IOT7210, // iotech
  13. IGPIB7210, // Ines
  14. TNT5004, // NI (minor differences to TNT4882)
  15. };
  16. /*
  17. * nec7210 register numbers (might need to be multiplied by
  18. * a board-dependent offset to get actually io address offset)
  19. */
  20. // write registers
  21. enum nec7210_write_regs {
  22. CDOR, // command/data out
  23. IMR1, // interrupt mask 1
  24. IMR2, // interrupt mask 2
  25. SPMR, // serial poll mode
  26. ADMR, // address mode
  27. AUXMR, // auxiliary mode
  28. ADR, // address
  29. EOSR, // end-of-string
  30. // nec7210 has 8 registers
  31. nec7210_num_registers = 8,
  32. };
  33. // read registers
  34. enum nec7210_read_regs {
  35. DIR, // data in
  36. ISR1, // interrupt status 1
  37. ISR2, // interrupt status 2
  38. SPSR, // serial poll status
  39. ADSR, // address status
  40. CPTR, // command pass though
  41. ADR0, // address 1
  42. ADR1, // address 2
  43. };
  44. // bit definitions common to nec-7210 compatible registers
  45. // ISR1: interrupt status register 1
  46. enum isr1_bits {
  47. HR_DI = (1 << 0),
  48. HR_DO = (1 << 1),
  49. HR_ERR = (1 << 2),
  50. HR_DEC = (1 << 3),
  51. HR_END = (1 << 4),
  52. HR_DET = (1 << 5),
  53. HR_APT = (1 << 6),
  54. HR_CPT = (1 << 7),
  55. };
  56. // IMR1: interrupt mask register 1
  57. enum imr1_bits {
  58. HR_DIIE = (1 << 0),
  59. HR_DOIE = (1 << 1),
  60. HR_ERRIE = (1 << 2),
  61. HR_DECIE = (1 << 3),
  62. HR_ENDIE = (1 << 4),
  63. HR_DETIE = (1 << 5),
  64. HR_APTIE = (1 << 6),
  65. HR_CPTIE = (1 << 7),
  66. };
  67. // ISR2, interrupt status register 2
  68. enum isr2_bits {
  69. HR_ADSC = (1 << 0),
  70. HR_REMC = (1 << 1),
  71. HR_LOKC = (1 << 2),
  72. HR_CO = (1 << 3),
  73. HR_REM = (1 << 4),
  74. HR_LOK = (1 << 5),
  75. HR_SRQI = (1 << 6),
  76. HR_INT = (1 << 7),
  77. };
  78. // IMR2, interrupt mask register 2
  79. enum imr2_bits {
  80. // all the bits in this register that enable interrupts
  81. IMR2_ENABLE_INTR_MASK = 0x4f,
  82. HR_ACIE = (1 << 0),
  83. HR_REMIE = (1 << 1),
  84. HR_LOKIE = (1 << 2),
  85. HR_COIE = (1 << 3),
  86. HR_DMAI = (1 << 4),
  87. HR_DMAO = (1 << 5),
  88. HR_SRQIE = (1 << 6),
  89. };
  90. // SPSR, serial poll status register
  91. enum spsr_bits {
  92. HR_PEND = (1 << 6),
  93. };
  94. // SPMR, serial poll mode register
  95. enum spmr_bits {
  96. HR_RSV = (1 << 6),
  97. };
  98. // ADSR, address status register
  99. enum adsr_bits {
  100. HR_MJMN = (1 << 0),
  101. HR_TA = (1 << 1),
  102. HR_LA = (1 << 2),
  103. HR_TPAS = (1 << 3),
  104. HR_LPAS = (1 << 4),
  105. HR_SPMS = (1 << 5),
  106. HR_NATN = (1 << 6),
  107. HR_CIC = (1 << 7),
  108. };
  109. // ADMR, address mode register
  110. enum admr_bits {
  111. HR_ADM0 = (1 << 0),
  112. HR_ADM1 = (1 << 1),
  113. HR_TRM0 = (1 << 4),
  114. HR_TRM1 = (1 << 5),
  115. HR_TRM_EOIOE_TRIG = 0,
  116. HR_TRM_CIC_TRIG = HR_TRM0,
  117. HR_TRM_CIC_EOIOE = HR_TRM1,
  118. HR_TRM_CIC_PE = HR_TRM0 | HR_TRM1,
  119. HR_LON = (1 << 6),
  120. HR_TON = (1 << 7),
  121. };
  122. // ADR, bits used in address0, address1 and address0/1 registers
  123. enum adr_bits {
  124. ADDRESS_MASK = 0x1f, /* mask to specify lower 5 bits */
  125. HR_DL = (1 << 5),
  126. HR_DT = (1 << 6),
  127. HR_ARS = (1 << 7),
  128. };
  129. // ADR1, address1 register
  130. enum adr1_bits {
  131. HR_EOI = (1 << 7),
  132. };
  133. // AUXMR, auxiliary mode register
  134. enum auxmr_bits {
  135. ICR = 0x20,
  136. PPR = 0x60,
  137. AUXRA = 0x80,
  138. AUXRB = 0xa0,
  139. AUXRE = 0xc0,
  140. };
  141. // auxra, auxiliary register A
  142. enum auxra_bits {
  143. HR_HANDSHAKE_MASK = 0x3,
  144. HR_HLDA = 0x1,
  145. HR_HLDE = 0x2,
  146. HR_LCM = 0x3, /* auxra listen continuous */
  147. HR_REOS = 0x4,
  148. HR_XEOS = 0x8,
  149. HR_BIN = 0x10,
  150. };
  151. // auxrb, auxiliary register B
  152. enum auxrb_bits {
  153. HR_CPTE = (1 << 0),
  154. HR_SPEOI = (1 << 1),
  155. HR_TRI = (1 << 2),
  156. HR_INV = (1 << 3),
  157. HR_ISS = (1 << 4),
  158. };
  159. enum auxre_bits {
  160. HR_DAC_HLD_DCAS = 0x1, /* perform DAC holdoff on receiving clear */
  161. HR_DAC_HLD_DTAS = 0x2, /* perform DAC holdoff on receiving trigger */
  162. };
  163. // parallel poll register
  164. enum ppr_bits {
  165. HR_PPS = (1 << 3),
  166. HR_PPU = (1 << 4),
  167. };
  168. /* 7210 Auxiliary Commands */
  169. enum aux_cmds {
  170. AUX_PON = 0x0, /* Immediate Execute pon */
  171. AUX_CPPF = 0x1, /* Clear Parallel Poll Flag */
  172. AUX_CR = 0x2, /* Chip Reset */
  173. AUX_FH = 0x3, /* Finish Handshake */
  174. AUX_TRIG = 0x4, /* Trigger */
  175. AUX_RTL = 0x5, /* Return to local */
  176. AUX_SEOI = 0x6, /* Send EOI */
  177. AUX_NVAL = 0x7, /* Non-Valid Secondary Command or Address */
  178. AUX_SPPF = 0x9, /* Set Parallel Poll Flag */
  179. AUX_VAL = 0xf, /* Valid Secondary Command or Address */
  180. AUX_GTS = 0x10, /* Go To Standby */
  181. AUX_TCA = 0x11, /* Take Control Asynchronously */
  182. AUX_TCS = 0x12, /* Take Control Synchronously */
  183. AUX_LTN = 0x13, /* Listen */
  184. AUX_DSC = 0x14, /* Disable System Control */
  185. AUX_CIFC = 0x16, /* Clear IFC */
  186. AUX_CREN = 0x17, /* Clear REN */
  187. AUX_TCSE = 0x1a, /* Take Control Synchronously on End */
  188. AUX_LTNC = 0x1b, /* Listen in Continuous Mode */
  189. AUX_LUN = 0x1c, /* Local Unlisten */
  190. AUX_EPP = 0x1d, /* Execute Parallel Poll */
  191. AUX_SIFC = 0x1e, /* Set IFC */
  192. AUX_SREN = 0x1f, /* Set REN */
  193. };
  194. #endif //_NEC7210_REGISTERS_H