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

嵌入式Linux

开发平台:

Unix_Linux

  1. /* $Id: sab82532.h,v 1.7 2001/05/23 23:09:10 ecd Exp $
  2.  * sab82532.h: Register Definitions for the Siemens SAB82532 DUSCC
  3.  *
  4.  * Copyright (C) 1997  Eddie C. Dost  (ecd@skynet.be)
  5.  */
  6. #ifndef _SPARC64_SAB82532_H
  7. #define _SPARC64_SAB82532_H
  8. #include <linux/types.h>
  9. #include <linux/serial.h>
  10. #include <linux/circ_buf.h>
  11. struct sab82532_async_rd_regs {
  12. u8 rfifo[0x20]; /* Receive FIFO */
  13. u8 star; /* Status Register */
  14. u8 __pad1;
  15. u8 mode; /* Mode Register */
  16. u8 timr; /* Timer Register */
  17. u8 xon; /* XON Character */
  18. u8 xoff; /* XOFF Character */
  19. u8 tcr; /* Termination Character Register */
  20. u8 dafo; /* Data Format */
  21. u8 rfc; /* RFIFO Control Register */
  22. u8 __pad2;
  23. u8 rbcl; /* Receive Byte Count Low */
  24. u8 rbch; /* Receive Byte Count High */
  25. u8 ccr0; /* Channel Configuration Register 0 */
  26. u8 ccr1; /* Channel Configuration Register 1 */
  27. u8 ccr2; /* Channel Configuration Register 2 */
  28. u8 ccr3; /* Channel Configuration Register 3 */
  29. u8 __pad3[4];
  30. u8 vstr; /* Version Status Register */
  31. u8 __pad4[3];
  32. u8 gis; /* Global Interrupt Status */
  33. u8 ipc; /* Interrupt Port Configuration */
  34. u8 isr0; /* Interrupt Status 0 */
  35. u8 isr1; /* Interrupt Status 1 */
  36. u8 pvr; /* Port Value Register */
  37. u8 pis; /* Port Interrupt Status */
  38. u8 pcr; /* Port Configuration Register */
  39. u8 ccr4; /* Channel Configuration Register 4 */
  40. };
  41. struct sab82532_async_wr_regs {
  42. u8 xfifo[0x20]; /* Transmit FIFO */
  43. u8 cmdr; /* Command Register */
  44. u8 __pad1;
  45. u8 mode;
  46. u8 timr;
  47. u8 xon;
  48. u8 xoff;
  49. u8 tcr;
  50. u8 dafo;
  51. u8 rfc;
  52. u8 __pad2;
  53. u8 xbcl; /* Transmit Byte Count Low */
  54. u8 xbch; /* Transmit Byte Count High */
  55. u8 ccr0;
  56. u8 ccr1;
  57. u8 ccr2;
  58. u8 ccr3;
  59. u8 tsax; /* Time-Slot Assignment Reg. Transmit */
  60. u8 tsar; /* Time-Slot Assignment Reg. Receive */
  61. u8 xccr; /* Transmit Channel Capacity Register */
  62. u8 rccr; /* Receive Channel Capacity Register */
  63. u8 bgr; /* Baud Rate Generator Register */
  64. u8 tic; /* Transmit Immediate Character */
  65. u8 mxn; /* Mask XON Character */
  66. u8 mxf; /* Mask XOFF Character */
  67. u8 iva; /* Interrupt Vector Address */
  68. u8 ipc;
  69. u8 imr0; /* Interrupt Mask Register 0 */
  70. u8 imr1; /* Interrupt Mask Register 1 */
  71. u8 pvr;
  72. u8 pim; /* Port Interrupt Mask */
  73. u8 pcr;
  74. u8 ccr4;
  75. };
  76. struct sab82532_async_rw_regs { /* Read/Write registers */
  77. u8 __pad1[0x20];
  78. u8 __pad2;
  79. u8 __pad3;
  80. u8 mode;
  81. u8 timr;
  82. u8 xon;
  83. u8 xoff;
  84. u8 tcr;
  85. u8 dafo;
  86. u8 rfc;
  87. u8 __pad4;
  88. u8 __pad5;
  89. u8 __pad6;
  90. u8 ccr0;
  91. u8 ccr1;
  92. u8 ccr2;
  93. u8 ccr3;
  94. u8 __pad7;
  95. u8 __pad8;
  96. u8 __pad9;
  97. u8 __pad10;
  98. u8 __pad11;
  99. u8 __pad12;
  100. u8 __pad13;
  101. u8 __pad14;
  102. u8 __pad15;
  103. u8 ipc;
  104. u8 __pad16;
  105. u8 __pad17;
  106. u8 pvr;
  107. u8 __pad18;
  108. u8 pcr;
  109. u8 ccr4;
  110. };
  111. union sab82532_async_regs {
  112. __volatile__ struct sab82532_async_rd_regs r;
  113. __volatile__ struct sab82532_async_wr_regs w;
  114. __volatile__ struct sab82532_async_rw_regs rw;
  115. };
  116. #define NR_PORTS  2
  117. union sab82532_irq_status {
  118. unsigned short  stat;
  119. struct {
  120. unsigned char  isr0;
  121. unsigned char  isr1;
  122. } sreg;
  123. };
  124. struct sab82532 {
  125. int  magic;
  126. int  baud_base;
  127. union sab82532_async_regs *regs;
  128. int  irq;
  129. int  flags; /* defined in tty.h */
  130. int  type; /* SAB82532 version */
  131. struct tty_struct *tty;
  132. int  read_status_mask;
  133. int  ignore_status_mask;
  134. int  timeout;
  135. int  xmit_fifo_size;
  136. int  recv_fifo_size;
  137. int  custom_divisor;
  138. int  baud;
  139. unsigned int  cec_timeout;
  140. unsigned int  tec_timeout;
  141. int  x_char;
  142. int  close_delay;
  143. unsigned short  closing_wait;
  144. unsigned short  closing_wait2;
  145. unsigned long  irqflags;
  146. int  is_console;
  147. unsigned char  interrupt_mask0;
  148. unsigned char  interrupt_mask1;
  149. unsigned char  pvr_dtr_bit;
  150. unsigned char  pvr_dsr_bit;
  151. unsigned char  dcd;
  152. unsigned char  cts;
  153. unsigned char  dsr;
  154. unsigned long  event;
  155. unsigned long  last_active;
  156. int  line;
  157. int  count;
  158. int  blocked_open;
  159. long  session;
  160. long  pgrp;
  161. struct circ_buf  xmit;
  162. struct tq_struct  tqueue;
  163. struct tq_struct  tqueue_hangup;
  164. struct async_icount  icount;
  165. struct termios  normal_termios;
  166. struct termios  callout_termios;
  167. wait_queue_head_t  open_wait;
  168. wait_queue_head_t  close_wait;
  169. wait_queue_head_t  delta_msr_wait;
  170. struct sab82532 *next;
  171. struct sab82532 *prev;
  172. };
  173. /* irqflags bits */
  174. #define SAB82532_ALLS 0x00000001
  175. #define SAB82532_XPR 0x00000002
  176. /* RFIFO Status Byte */
  177. #define SAB82532_RSTAT_PE 0x80
  178. #define SAB82532_RSTAT_FE 0x40
  179. #define SAB82532_RSTAT_PARITY 0x01
  180. /* Status Register (STAR) */
  181. #define SAB82532_STAR_XDOV 0x80
  182. #define SAB82532_STAR_XFW 0x40
  183. #define SAB82532_STAR_RFNE 0x20
  184. #define SAB82532_STAR_FCS 0x10
  185. #define SAB82532_STAR_TEC 0x08
  186. #define SAB82532_STAR_CEC 0x04
  187. #define SAB82532_STAR_CTS 0x02
  188. /* Command Register (CMDR) */
  189. #define SAB82532_CMDR_RMC 0x80
  190. #define SAB82532_CMDR_RRES 0x40
  191. #define SAB82532_CMDR_RFRD 0x20
  192. #define SAB82532_CMDR_STI 0x10
  193. #define SAB82532_CMDR_XF 0x08
  194. #define SAB82532_CMDR_XRES 0x01
  195. /* Mode Register (MODE) */
  196. #define SAB82532_MODE_FRTS 0x40
  197. #define SAB82532_MODE_FCTS 0x20
  198. #define SAB82532_MODE_FLON 0x10
  199. #define SAB82532_MODE_RAC 0x08
  200. #define SAB82532_MODE_RTS 0x04
  201. #define SAB82532_MODE_TRS 0x02
  202. #define SAB82532_MODE_TLP 0x01
  203. /* Timer Register (TIMR) */
  204. #define SAB82532_TIMR_CNT_MASK 0xe0
  205. #define SAB82532_TIMR_VALUE_MASK 0x1f
  206. /* Data Format (DAFO) */
  207. #define SAB82532_DAFO_XBRK 0x40
  208. #define SAB82532_DAFO_STOP 0x20
  209. #define SAB82532_DAFO_PAR_SPACE 0x00
  210. #define SAB82532_DAFO_PAR_ODD 0x08
  211. #define SAB82532_DAFO_PAR_EVEN 0x10
  212. #define SAB82532_DAFO_PAR_MARK 0x18
  213. #define SAB82532_DAFO_PARE 0x04
  214. #define SAB82532_DAFO_CHL8 0x00
  215. #define SAB82532_DAFO_CHL7 0x01
  216. #define SAB82532_DAFO_CHL6 0x02
  217. #define SAB82532_DAFO_CHL5 0x03
  218. /* RFIFO Control Register (RFC) */
  219. #define SAB82532_RFC_DPS 0x40
  220. #define SAB82532_RFC_DXS 0x20
  221. #define SAB82532_RFC_RFDF 0x10
  222. #define SAB82532_RFC_RFTH_1 0x00
  223. #define SAB82532_RFC_RFTH_4 0x04
  224. #define SAB82532_RFC_RFTH_16 0x08
  225. #define SAB82532_RFC_RFTH_32 0x0c
  226. #define SAB82532_RFC_TCDE 0x01
  227. /* Received Byte Count High (RBCH) */
  228. #define SAB82532_RBCH_DMA 0x80
  229. #define SAB82532_RBCH_CAS 0x20
  230. /* Transmit Byte Count High (XBCH) */
  231. #define SAB82532_XBCH_DMA 0x80
  232. #define SAB82532_XBCH_CAS 0x20
  233. #define SAB82532_XBCH_XC 0x10
  234. /* Channel Configuration Register 0 (CCR0) */
  235. #define SAB82532_CCR0_PU 0x80
  236. #define SAB82532_CCR0_MCE 0x40
  237. #define SAB82532_CCR0_SC_NRZ 0x00
  238. #define SAB82532_CCR0_SC_NRZI 0x08
  239. #define SAB82532_CCR0_SC_FM0 0x10
  240. #define SAB82532_CCR0_SC_FM1 0x14
  241. #define SAB82532_CCR0_SC_MANCH 0x18
  242. #define SAB82532_CCR0_SM_HDLC 0x00
  243. #define SAB82532_CCR0_SM_SDLC_LOOP 0x01
  244. #define SAB82532_CCR0_SM_BISYNC 0x02
  245. #define SAB82532_CCR0_SM_ASYNC 0x03
  246. /* Channel Configuration Register 1 (CCR1) */
  247. #define SAB82532_CCR1_ODS 0x10
  248. #define SAB82532_CCR1_BCR 0x08
  249. #define SAB82532_CCR1_CM_MASK 0x07
  250. /* Channel Configuration Register 2 (CCR2) */
  251. #define SAB82532_CCR2_SOC1 0x80
  252. #define SAB82532_CCR2_SOC0 0x40
  253. #define SAB82532_CCR2_BR9 0x80
  254. #define SAB82532_CCR2_BR8 0x40
  255. #define SAB82532_CCR2_BDF 0x20
  256. #define SAB82532_CCR2_SSEL 0x10
  257. #define SAB82532_CCR2_XCS0 0x20
  258. #define SAB82532_CCR2_RCS0 0x10
  259. #define SAB82532_CCR2_TOE 0x08
  260. #define SAB82532_CCR2_RWX 0x04
  261. #define SAB82532_CCR2_DIV 0x01
  262. /* Channel Configuration Register 3 (CCR3) */
  263. #define SAB82532_CCR3_PSD 0x01
  264. /* Time Slot Assignment Register Transmit (TSAX) */
  265. #define SAB82532_TSAX_TSNX_MASK 0xfc
  266. #define SAB82532_TSAX_XCS2 0x02 /* see also CCR2 */
  267. #define SAB82532_TSAX_XCS1 0x01
  268. /* Time Slot Assignment Register Receive (TSAR) */
  269. #define SAB82532_TSAR_TSNR_MASK 0xfc
  270. #define SAB82532_TSAR_RCS2 0x02 /* see also CCR2 */
  271. #define SAB82532_TSAR_RCS1 0x01
  272. /* Version Status Register (VSTR) */
  273. #define SAB82532_VSTR_CD 0x80
  274. #define SAB82532_VSTR_DPLA 0x40
  275. #define SAB82532_VSTR_VN_MASK 0x0f
  276. #define SAB82532_VSTR_VN_1 0x00
  277. #define SAB82532_VSTR_VN_2 0x01
  278. #define SAB82532_VSTR_VN_3_2 0x02
  279. /* Global Interrupt Status Register (GIS) */
  280. #define SAB82532_GIS_PI 0x80
  281. #define SAB82532_GIS_ISA1 0x08
  282. #define SAB82532_GIS_ISA0 0x04
  283. #define SAB82532_GIS_ISB1 0x02
  284. #define SAB82532_GIS_ISB0 0x01
  285. /* Interrupt Vector Address (IVA) */
  286. #define SAB82532_IVA_MASK 0xf1
  287. /* Interrupt Port Configuration (IPC) */
  288. #define SAB82532_IPC_VIS 0x80
  289. #define SAB82532_IPC_SLA1 0x10
  290. #define SAB82532_IPC_SLA0 0x08
  291. #define SAB82532_IPC_CASM 0x04
  292. #define SAB82532_IPC_IC_OPEN_DRAIN 0x00
  293. #define SAB82532_IPC_IC_ACT_LOW 0x01
  294. #define SAB82532_IPC_IC_ACT_HIGH 0x03
  295. /* Interrupt Status Register 0 (ISR0) */
  296. #define SAB82532_ISR0_TCD 0x80
  297. #define SAB82532_ISR0_TIME 0x40
  298. #define SAB82532_ISR0_PERR 0x20
  299. #define SAB82532_ISR0_FERR 0x10
  300. #define SAB82532_ISR0_PLLA 0x08
  301. #define SAB82532_ISR0_CDSC 0x04
  302. #define SAB82532_ISR0_RFO 0x02
  303. #define SAB82532_ISR0_RPF 0x01
  304. /* Interrupt Status Register 1 (ISR1) */
  305. #define SAB82532_ISR1_BRK 0x80
  306. #define SAB82532_ISR1_BRKT 0x40
  307. #define SAB82532_ISR1_ALLS 0x20
  308. #define SAB82532_ISR1_XOFF 0x10
  309. #define SAB82532_ISR1_TIN 0x08
  310. #define SAB82532_ISR1_CSC 0x04
  311. #define SAB82532_ISR1_XON 0x02
  312. #define SAB82532_ISR1_XPR 0x01
  313. /* Interrupt Mask Register 0 (IMR0) */
  314. #define SAB82532_IMR0_TCD 0x80
  315. #define SAB82532_IMR0_TIME 0x40
  316. #define SAB82532_IMR0_PERR 0x20
  317. #define SAB82532_IMR0_FERR 0x10
  318. #define SAB82532_IMR0_PLLA 0x08
  319. #define SAB82532_IMR0_CDSC 0x04
  320. #define SAB82532_IMR0_RFO 0x02
  321. #define SAB82532_IMR0_RPF 0x01
  322. /* Interrupt Mask Register 1 (IMR1) */
  323. #define SAB82532_IMR1_BRK 0x80
  324. #define SAB82532_IMR1_BRKT 0x40
  325. #define SAB82532_IMR1_ALLS 0x20
  326. #define SAB82532_IMR1_XOFF 0x10
  327. #define SAB82532_IMR1_TIN 0x08
  328. #define SAB82532_IMR1_CSC 0x04
  329. #define SAB82532_IMR1_XON 0x02
  330. #define SAB82532_IMR1_XPR 0x01
  331. /* Port Interrupt Status Register (PIS) */
  332. #define SAB82532_PIS_SYNC_B 0x08
  333. #define SAB82532_PIS_DTR_B 0x04
  334. #define SAB82532_PIS_DTR_A 0x02
  335. #define SAB82532_PIS_SYNC_A 0x01
  336. /* Channel Configuration Register 4 (CCR4) */
  337. #define SAB82532_CCR4_MCK4 0x80
  338. #define SAB82532_CCR4_EBRG 0x40
  339. #define SAB82532_CCR4_TST1 0x20
  340. #define SAB82532_CCR4_ICD 0x10
  341. #endif /* !(_SPARC64_SAB82532_H) */