summaryrefslogtreecommitdiffstats
path: root/include/linux/serial.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/serial.h')
-rw-r--r--include/linux/serial.h84
1 files changed, 70 insertions, 14 deletions
diff --git a/include/linux/serial.h b/include/linux/serial.h
index 02af4746a..141c6706c 100644
--- a/include/linux/serial.h
+++ b/include/linux/serial.h
@@ -44,7 +44,19 @@ struct serial_struct {
#define PORT_16550A 4
#define PORT_CIRRUS 5
#define PORT_16650 6
-#define PORT_MAX 6
+#define PORT_16650V2 7
+#define PORT_16750 8
+#define PORT_MAX 8
+
+struct serial_uart_config {
+ char *name;
+ int dfl_xmit_fifo_size;
+ int flags;
+};
+
+#define UART_CLEAR_FIFO 0x01
+#define UART_USE_FIFO 0x02
+#define UART_STARTECH 0x04
/*
* Definitions for async_struct (and serial_struct) flags field
@@ -55,7 +67,7 @@ struct serial_struct {
#define ASYNC_SAK 0x0004 /* Secure Attention Key (Orange book) */
#define ASYNC_SPLIT_TERMIOS 0x0008 /* Separate termios for dialin/callout */
-#define ASYNC_SPD_MASK 0x0030
+#define ASYNC_SPD_MASK 0x1030
#define ASYNC_SPD_HI 0x0010 /* Use 56000 instead of 38400 bps */
#define ASYNC_SPD_VHI 0x0020 /* Use 115200 instead of 38400 bps */
@@ -67,8 +79,13 @@ struct serial_struct {
#define ASYNC_PGRP_LOCKOUT 0x0200 /* Lock out cua opens based on pgrp */
#define ASYNC_CALLOUT_NOHUP 0x0400 /* Don't do hangups for cua device */
-#define ASYNC_FLAGS 0x0FFF /* Possible legal async flags */
-#define ASYNC_USR_MASK 0x0430 /* Legal flags that non-privileged
+#define ASYNC_HARDPPS_CD 0x0800 /* Call hardpps when CD goes high */
+
+#define ASYNC_SPD_SHI 0x1000 /* Use 230400 instead of 38400 bps */
+#define ASYNC_SPD_WARP 0x1010 /* Use 460800 instead of 38400 bps */
+
+#define ASYNC_FLAGS 0x1FFF /* Possible legal async flags */
+#define ASYNC_USR_MASK 0x1430 /* Legal flags that non-privileged
* users can set or reset */
/* Internal flags used only by kernel/chr_drv/serial.c */
@@ -79,6 +96,9 @@ struct serial_struct {
#define ASYNC_CLOSING 0x08000000 /* Serial port is closing */
#define ASYNC_CTS_FLOW 0x04000000 /* Do CTS flow control */
#define ASYNC_CHECK_CD 0x02000000 /* i.e., CLOCAL */
+#define ASYNC_SHARE_IRQ 0x01000000 /* for multifunction cards */
+
+#define ASYNC_INTERNAL_FLAGS 0xFF000000 /* Internal flags */
/*
* Multiport serial configuration structure --- external structure
@@ -97,6 +117,16 @@ struct serial_multiport_struct {
int reserved[32];
};
+/*
+ * Serial input interrupt line counters -- external structure
+ * Four lines can interrupt: CTS, DSR, RI, DCD
+ */
+struct serial_icounter_struct {
+ int cts, dsr, rng, dcd;
+ int reserved[16];
+};
+
+
#ifdef __KERNEL__
/*
* This is our internal structure for each serial port's state.
@@ -107,20 +137,47 @@ struct serial_multiport_struct {
* For definitions of the flags field, see tty.h
*/
+#include <linux/termios.h>
+#include <linux/tqueue.h>
+
+/*
+ * Counters of the input lines (CTS, DSR, RI, CD) interrupts
+ */
+struct async_icount {
+ __u32 cts, dsr, rng, dcd;
+};
+
+struct serial_state {
+ int magic;
+ int baud_base;
+ int port;
+ int irq;
+ int flags;
+ int hub6;
+ int type;
+ int line;
+ int xmit_fifo_size;
+ int custom_divisor;
+ int count;
+ unsigned short close_delay;
+ unsigned short closing_wait; /* time to wait before closing */
+ struct async_icount icount;
+ struct termios normal_termios;
+ struct termios callout_termios;
+ struct async_struct *info;
+};
+
struct async_struct {
int magic;
- int baud_base;
int port;
- int irq;
- int flags; /* defined in tty.h */
- int hub6; /* HUB6 plus one */
- int type; /* UART type */
+ int hub6;
+ int flags;
+ int xmit_fifo_size;
+ struct serial_state *state;
struct tty_struct *tty;
int read_status_mask;
int ignore_status_mask;
int timeout;
- int xmit_fifo_size;
- int custom_divisor;
int x_char; /* xon/xoff character */
int close_delay;
unsigned short closing_wait;
@@ -131,7 +188,6 @@ struct async_struct {
unsigned long event;
unsigned long last_active;
int line;
- int count; /* # of fd on device */
int blocked_open; /* # of blocked opens */
long session; /* Session of opening process */
long pgrp; /* pgrp of opening process */
@@ -141,15 +197,15 @@ struct async_struct {
int xmit_cnt;
struct tq_struct tqueue;
struct tq_struct tqueue_hangup;
- struct termios normal_termios;
- struct termios callout_termios;
struct wait_queue *open_wait;
struct wait_queue *close_wait;
+ struct wait_queue *delta_msr_wait;
struct async_struct *next_port; /* For the linked list */
struct async_struct *prev_port;
};
#define SERIAL_MAGIC 0x5301
+#define SSTATE_MAGIC 0x5302
/*
* The size of the serial xmit buffer is 1 page, or 4096 bytes