serial.h 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. /*
  2. * include/linux/serial.h
  3. *
  4. * Copyright (C) 1992 by Theodore Ts'o.
  5. *
  6. * Redistribution of this file is permitted under the terms of the GNU
  7. * Public License (GPL)
  8. */
  9. #ifndef _LINUX_SERIAL_H
  10. #define _LINUX_SERIAL_H
  11. #include <linux/types.h>
  12. #ifdef __KERNEL__
  13. #include <asm/page.h>
  14. /*
  15. * Counters of the input lines (CTS, DSR, RI, CD) interrupts
  16. */
  17. struct async_icount {
  18. __u32 cts, dsr, rng, dcd, tx, rx;
  19. __u32 frame, parity, overrun, brk;
  20. __u32 buf_overrun;
  21. };
  22. /*
  23. * The size of the serial xmit buffer is 1 page, or 4096 bytes
  24. */
  25. #define SERIAL_XMIT_SIZE PAGE_SIZE
  26. #endif
  27. struct serial_struct {
  28. int type;
  29. int line;
  30. unsigned int port;
  31. int irq;
  32. int flags;
  33. int xmit_fifo_size;
  34. int custom_divisor;
  35. int baud_base;
  36. unsigned short close_delay;
  37. char io_type;
  38. char reserved_char[1];
  39. int hub6;
  40. unsigned short closing_wait; /* time to wait before closing */
  41. unsigned short closing_wait2; /* no longer used... */
  42. unsigned char *iomem_base;
  43. unsigned short iomem_reg_shift;
  44. unsigned int port_high;
  45. unsigned long iomap_base; /* cookie passed into ioremap */
  46. };
  47. /*
  48. * For the close wait times, 0 means wait forever for serial port to
  49. * flush its output. 65535 means don't wait at all.
  50. */
  51. #define ASYNC_CLOSING_WAIT_INF 0
  52. #define ASYNC_CLOSING_WAIT_NONE 65535
  53. /*
  54. * These are the supported serial types.
  55. */
  56. #define PORT_UNKNOWN 0
  57. #define PORT_8250 1
  58. #define PORT_16450 2
  59. #define PORT_16550 3
  60. #define PORT_16550A 4
  61. #define PORT_CIRRUS 5 /* usurped by cyclades.c */
  62. #define PORT_16650 6
  63. #define PORT_16650V2 7
  64. #define PORT_16750 8
  65. #define PORT_STARTECH 9 /* usurped by cyclades.c */
  66. #define PORT_16C950 10 /* Oxford Semiconductor */
  67. #define PORT_16654 11
  68. #define PORT_16850 12
  69. #define PORT_RSA 13 /* RSA-DV II/S card */
  70. #define PORT_MAX 13
  71. #define SERIAL_IO_PORT 0
  72. #define SERIAL_IO_HUB6 1
  73. #define SERIAL_IO_MEM 2
  74. struct serial_uart_config {
  75. char *name;
  76. int dfl_xmit_fifo_size;
  77. int flags;
  78. };
  79. #define UART_CLEAR_FIFO 0x01
  80. #define UART_USE_FIFO 0x02
  81. #define UART_STARTECH 0x04
  82. #define UART_NATSEMI 0x08
  83. /*
  84. * Definitions for async_struct (and serial_struct) flags field
  85. *
  86. * Define ASYNCB_* for convenient use with {test,set,clear}_bit.
  87. */
  88. #define ASYNCB_HUP_NOTIFY 0 /* Notify getty on hangups and closes
  89. * on the callout port */
  90. #define ASYNCB_FOURPORT 1 /* Set OU1, OUT2 per AST Fourport settings */
  91. #define ASYNCB_SAK 2 /* Secure Attention Key (Orange book) */
  92. #define ASYNCB_SPLIT_TERMIOS 3 /* Separate termios for dialin/callout */
  93. #define ASYNCB_SPD_HI 4 /* Use 56000 instead of 38400 bps */
  94. #define ASYNCB_SPD_VHI 5 /* Use 115200 instead of 38400 bps */
  95. #define ASYNCB_SKIP_TEST 6 /* Skip UART test during autoconfiguration */
  96. #define ASYNCB_AUTO_IRQ 7 /* Do automatic IRQ during
  97. * autoconfiguration */
  98. #define ASYNCB_SESSION_LOCKOUT 8 /* Lock out cua opens based on session */
  99. #define ASYNCB_PGRP_LOCKOUT 9 /* Lock out cua opens based on pgrp */
  100. #define ASYNCB_CALLOUT_NOHUP 10 /* Don't do hangups for cua device */
  101. #define ASYNCB_HARDPPS_CD 11 /* Call hardpps when CD goes high */
  102. #define ASYNCB_SPD_SHI 12 /* Use 230400 instead of 38400 bps */
  103. #define ASYNCB_LOW_LATENCY 13 /* Request low latency behaviour */
  104. #define ASYNCB_BUGGY_UART 14 /* This is a buggy UART, skip some safety
  105. * checks. Note: can be dangerous! */
  106. #define ASYNCB_AUTOPROBE 15 /* Port was autoprobed by PCI or PNP code */
  107. #define ASYNCB_LAST_USER 15
  108. /* Internal flags used only by kernel */
  109. #define ASYNCB_INITIALIZED 31 /* Serial port was initialized */
  110. #define ASYNCB_SUSPENDED 30 /* Serial port is suspended */
  111. #define ASYNCB_NORMAL_ACTIVE 29 /* Normal device is active */
  112. #define ASYNCB_BOOT_AUTOCONF 28 /* Autoconfigure port on bootup */
  113. #define ASYNCB_CLOSING 27 /* Serial port is closing */
  114. #define ASYNCB_CTS_FLOW 26 /* Do CTS flow control */
  115. #define ASYNCB_CHECK_CD 25 /* i.e., CLOCAL */
  116. #define ASYNCB_SHARE_IRQ 24 /* for multifunction cards, no longer used */
  117. #define ASYNCB_CONS_FLOW 23 /* flow control for console */
  118. #define ASYNCB_BOOT_ONLYMCA 22 /* Probe only if MCA bus */
  119. #define ASYNCB_FIRST_KERNEL 22
  120. #define ASYNC_HUP_NOTIFY (1U << ASYNCB_HUP_NOTIFY)
  121. #define ASYNC_SUSPENDED (1U << ASYNCB_SUSPENDED)
  122. #define ASYNC_FOURPORT (1U << ASYNCB_FOURPORT)
  123. #define ASYNC_SAK (1U << ASYNCB_SAK)
  124. #define ASYNC_SPLIT_TERMIOS (1U << ASYNCB_SPLIT_TERMIOS)
  125. #define ASYNC_SPD_HI (1U << ASYNCB_SPD_HI)
  126. #define ASYNC_SPD_VHI (1U << ASYNCB_SPD_VHI)
  127. #define ASYNC_SKIP_TEST (1U << ASYNCB_SKIP_TEST)
  128. #define ASYNC_AUTO_IRQ (1U << ASYNCB_AUTO_IRQ)
  129. #define ASYNC_SESSION_LOCKOUT (1U << ASYNCB_SESSION_LOCKOUT)
  130. #define ASYNC_PGRP_LOCKOUT (1U << ASYNCB_PGRP_LOCKOUT)
  131. #define ASYNC_CALLOUT_NOHUP (1U << ASYNCB_CALLOUT_NOHUP)
  132. #define ASYNC_HARDPPS_CD (1U << ASYNCB_HARDPPS_CD)
  133. #define ASYNC_SPD_SHI (1U << ASYNCB_SPD_SHI)
  134. #define ASYNC_LOW_LATENCY (1U << ASYNCB_LOW_LATENCY)
  135. #define ASYNC_BUGGY_UART (1U << ASYNCB_BUGGY_UART)
  136. #define ASYNC_AUTOPROBE (1U << ASYNCB_AUTOPROBE)
  137. #define ASYNC_FLAGS ((1U << (ASYNCB_LAST_USER + 1)) - 1)
  138. #define ASYNC_USR_MASK (ASYNC_SPD_MASK|ASYNC_CALLOUT_NOHUP| \
  139. ASYNC_LOW_LATENCY)
  140. #define ASYNC_SPD_CUST (ASYNC_SPD_HI|ASYNC_SPD_VHI)
  141. #define ASYNC_SPD_WARP (ASYNC_SPD_HI|ASYNC_SPD_SHI)
  142. #define ASYNC_SPD_MASK (ASYNC_SPD_HI|ASYNC_SPD_VHI|ASYNC_SPD_SHI)
  143. #define ASYNC_INITIALIZED (1U << ASYNCB_INITIALIZED)
  144. #define ASYNC_NORMAL_ACTIVE (1U << ASYNCB_NORMAL_ACTIVE)
  145. #define ASYNC_BOOT_AUTOCONF (1U << ASYNCB_BOOT_AUTOCONF)
  146. #define ASYNC_CLOSING (1U << ASYNCB_CLOSING)
  147. #define ASYNC_CTS_FLOW (1U << ASYNCB_CTS_FLOW)
  148. #define ASYNC_CHECK_CD (1U << ASYNCB_CHECK_CD)
  149. #define ASYNC_SHARE_IRQ (1U << ASYNCB_SHARE_IRQ)
  150. #define ASYNC_CONS_FLOW (1U << ASYNCB_CONS_FLOW)
  151. #define ASYNC_BOOT_ONLYMCA (1U << ASYNCB_BOOT_ONLYMCA)
  152. #define ASYNC_INTERNAL_FLAGS (~((1U << ASYNCB_FIRST_KERNEL) - 1))
  153. /*
  154. * Multiport serial configuration structure --- external structure
  155. */
  156. struct serial_multiport_struct {
  157. int irq;
  158. int port1;
  159. unsigned char mask1, match1;
  160. int port2;
  161. unsigned char mask2, match2;
  162. int port3;
  163. unsigned char mask3, match3;
  164. int port4;
  165. unsigned char mask4, match4;
  166. int port_monitor;
  167. int reserved[32];
  168. };
  169. /*
  170. * Serial input interrupt line counters -- external structure
  171. * Four lines can interrupt: CTS, DSR, RI, DCD
  172. */
  173. struct serial_icounter_struct {
  174. int cts, dsr, rng, dcd;
  175. int rx, tx;
  176. int frame, overrun, parity, brk;
  177. int buf_overrun;
  178. int reserved[9];
  179. };
  180. /*
  181. * Serial interface for controlling RS485 settings on chips with suitable
  182. * support. Set with TIOCSRS485 and get with TIOCGRS485 if supported by your
  183. * platform. The set function returns the new state, with any unsupported bits
  184. * reverted appropriately.
  185. */
  186. struct serial_rs485 {
  187. __u32 flags; /* RS485 feature flags */
  188. #define SER_RS485_ENABLED (1 << 0) /* If enabled */
  189. #define SER_RS485_RTS_ON_SEND (1 << 1) /* Logical level for
  190. RTS pin when
  191. sending */
  192. #define SER_RS485_RTS_AFTER_SEND (1 << 2) /* Logical level for
  193. RTS pin after sent*/
  194. #define SER_RS485_RX_DURING_TX (1 << 4)
  195. __u32 delay_rts_before_send; /* Delay before send (milliseconds) */
  196. __u32 delay_rts_after_send; /* Delay after send (milliseconds) */
  197. __u32 padding[5]; /* Memory is cheap, new structs
  198. are a royal PITA .. */
  199. };
  200. #ifdef __KERNEL__
  201. #include <linux/compiler.h>
  202. #endif /* __KERNEL__ */
  203. #endif /* _LINUX_SERIAL_H */