hc
2024-03-22 f63cd4c03ea42695d5f9b0e1798edd196923aae6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/* SPDX-License-Identifier: GPL-1.0+ WITH Linux-syscall-note */
/*
 * include/linux/serial.h
 *
 * Copyright (C) 1992 by Theodore Ts'o.
 * 
 * Redistribution of this file is permitted under the terms of the GNU 
 * Public License (GPL)
 */
 
#ifndef _UAPI_LINUX_SERIAL_H
#define _UAPI_LINUX_SERIAL_H
 
#include <linux/types.h>
 
#include <linux/tty_flags.h>
 
 
struct serial_struct {
   int    type;
   int    line;
   unsigned int    port;
   int    irq;
   int    flags;
   int    xmit_fifo_size;
   int    custom_divisor;
   int    baud_base;
   unsigned short    close_delay;
   char    io_type;
   char    reserved_char[1];
   int    hub6;
   unsigned short    closing_wait; /* time to wait before closing */
   unsigned short    closing_wait2; /* no longer used... */
   unsigned char    *iomem_base;
   unsigned short    iomem_reg_shift;
   unsigned int    port_high;
   unsigned long    iomap_base;    /* cookie passed into ioremap */
};
 
/*
 * For the close wait times, 0 means wait forever for serial port to
 * flush its output.  65535 means don't wait at all.
 */
#define ASYNC_CLOSING_WAIT_INF    0
#define ASYNC_CLOSING_WAIT_NONE    65535
 
/*
 * These are the supported serial types.
 */
#define PORT_UNKNOWN    0
#define PORT_8250    1
#define PORT_16450    2
#define PORT_16550    3
#define PORT_16550A    4
#define PORT_CIRRUS     5    /* usurped by cyclades.c */
#define PORT_16650    6
#define PORT_16650V2    7
#define PORT_16750    8
#define PORT_STARTECH    9    /* usurped by cyclades.c */
#define PORT_16C950    10    /* Oxford Semiconductor */
#define PORT_16654    11
#define PORT_16850    12
#define PORT_RSA    13    /* RSA-DV II/S card */
#define PORT_MAX    13
 
#define SERIAL_IO_PORT    0
#define SERIAL_IO_HUB6    1
#define SERIAL_IO_MEM    2
#define SERIAL_IO_MEM32      3
#define SERIAL_IO_AU      4
#define SERIAL_IO_TSI      5
#define SERIAL_IO_MEM32BE 6
#define SERIAL_IO_MEM16    7
 
#define UART_CLEAR_FIFO        0x01
#define UART_USE_FIFO        0x02
#define UART_STARTECH        0x04
#define UART_NATSEMI        0x08
 
 
/*
 * Multiport serial configuration structure --- external structure
 */
struct serial_multiport_struct {
   int        irq;
   int        port1;
   unsigned char    mask1, match1;
   int        port2;
   unsigned char    mask2, match2;
   int        port3;
   unsigned char    mask3, match3;
   int        port4;
   unsigned char    mask4, match4;
   int        port_monitor;
   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 rx, tx;
   int frame, overrun, parity, brk;
   int buf_overrun;
   int reserved[9];
};
 
/*
 * Serial interface for controlling RS485 settings on chips with suitable
 * support. Set with TIOCSRS485 and get with TIOCGRS485 if supported by your
 * platform. The set function returns the new state, with any unsupported bits
 * reverted appropriately.
 */
 
struct serial_rs485 {
   __u32    flags;            /* RS485 feature flags */
#define SER_RS485_ENABLED        (1 << 0)    /* If enabled */
#define SER_RS485_RTS_ON_SEND        (1 << 1)    /* Logical level for
                              RTS pin when
                              sending */
#define SER_RS485_RTS_AFTER_SEND    (1 << 2)    /* Logical level for
                              RTS pin after sent*/
#define SER_RS485_RX_DURING_TX        (1 << 4)
#define SER_RS485_TERMINATE_BUS        (1 << 5)    /* Enable bus
                              termination
                              (if supported) */
   __u32    delay_rts_before_send;    /* Delay before send (milliseconds) */
   __u32    delay_rts_after_send;    /* Delay after send (milliseconds) */
   __u32    padding[5];        /* Memory is cheap, new structs
                      are a royal PITA .. */
};
 
/*
 * Serial interface for controlling ISO7816 settings on chips with suitable
 * support. Set with TIOCSISO7816 and get with TIOCGISO7816 if supported by
 * your platform.
 */
struct serial_iso7816 {
   __u32    flags;            /* ISO7816 feature flags */
#define SER_ISO7816_ENABLED        (1 << 0)
#define SER_ISO7816_T_PARAM        (0x0f << 4)
#define SER_ISO7816_T(t)        (((t) & 0x0f) << 4)
   __u32    tg;
   __u32    sc_fi;
   __u32    sc_di;
   __u32    clk;
   __u32    reserved[5];
};
 
#endif /* _UAPI_LINUX_SERIAL_H */