serial.h 6.6 KB

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