1/*
2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * The contents of this file constitute Original Code as defined in and
7 * are subject to the Apple Public Source License Version 1.1 (the
8 * "License").  You may not use this file except in compliance with the
9 * License.  Please obtain a copy of the License at
10 * http://www.apple.com/publicsource and read it before using this file.
11 *
12 * This Original Code and all software distributed under the License are
13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
17 * License for the specific language governing rights and limitations
18 * under the License.
19 *
20 * @APPLE_LICENSE_HEADER_END@
21 */
22
23/*
24 * IORS232SerialStreamSync.h
25 * This file contains RS232 specific extensions to the IOSerialStreamSync class.
26 *
27 * 2000-10-21	gvdl	Initial real change to IOKit serial family.
28 */
29
30#ifndef _SERIAL_IORS232SERIALSTREAMSYNC_H
31#define _SERIAL_IORS232SERIALSTREAMSYNC_H
32
33#include <sys/ioctl.h>
34#include <IOKit/serial/IOSerialStreamSync.h>
35
36/*
37 * Extra events for RS232 based PortDevices
38 */
39
40#define PD_RS232_E_RX_LINE_BREAK      (PD_DATA_VOID|PD_OP(63))  // line break was received
41#define PD_RS232_E_LINE_BREAK         (PD_DATA_BYTE|PD_OP(62))  // BOOL set/clear line break
42
43#define PD_RS232_E_RX_STOP_BITS       (PD_DATA_LONG|PD_OP(61))  // half stop bits
44#define PD_RS232_E_STOP_BITS          (PD_DATA_LONG|PD_OP(60))  // half stop bits
45
46#define PD_RS232_E_XON_BYTE           (PD_DATA_BYTE|PD_OP(59))  // The XON char for TX&RX
47#define PD_RS232_E_XOFF_BYTE          (PD_DATA_BYTE|PD_OP(58))  // The XOFF char for TX&RX
48
49#define PD_RS232_E_MIN_LATENCY        (PD_DATA_BYTE|PD_OP(57))  // BOOL true if low latency req
50
51/*
52 * RS232 Parity stuff, used with the DATA_INTEGRITY event
53 */
54#define PD_RS232_PARITY_DEFAULT	0	// Valid only for RX, means follow TX
55#define PD_RS232_PARITY_NONE	1	// No Parity bit inserted or expected
56#define PD_RS232_PARITY_ODD	2	// Odd Parity bit inserted or expected
57#define PD_RS232_PARITY_EVEN	3	// Even Parity bit inserted or expected
58#define PD_RS232_PARITY_MARK	4	// Mark inserted or expected
59#define PD_RS232_PARITY_SPACE	5	// Space inserted or expected
60#define PD_RS232_PARITY_ANY	6	// Valid only for RX, means discard parity
61
62/*
63 * RS232 Flow Control specifiers, used with the FLOW_CONTROL event
64 * NB. The XON  character is set with FLOW_START_DATA
65 * and the XOFF character is set with FLOW_STOP_DATA.
66 *
67 * Signal  Name                          Direction
68 *  RFR     Ready For Receive             Output generated by UART
69 *  RTS     Ready To Send (alias of RFR)  Output generated by UART
70 *  CTS     Clear To Send		  Input sensed by UART
71 *  DTR     Data Terminal Ready           Output generated by UART
72 *  DSR     Data Set Ready                Input sensed by UART
73 *  TXO     XON/XOFF/XANY protocol        Characters received by UART
74 *  RXO     XON/XOFF protocol             Characters transmitted by UART
75 *  DCD     Data Carrier Detect           Input sensed by UART
76 */
77
78/*
79 * RS232 State Word extensions, based on <bsd/sys/ioctl.h>
80 * Also the 'current state' bits for enq/deq of Flow Control event
81 */
82#define PD_RS232_S_MASK   0x0000ffffUL
83#define PD_RS232_S_SHIFT  0	// to align State bits for enq/deq event
84#define PD_RS232_D_MASK   0xffff0000UL
85#define PD_RS232_D_SHIFT  16	// to align Delta bits for enq/deq event
86#define PD_RS232_A_MASK   0x0000ffffUL
87#define PD_RS232_A_SHIFT  0	// to align Auto bits for req/exec event
88#define PD_RS232_N_MASK   0xffff0000UL
89#define PD_RS232_N_SHIFT  16	// to align Notify bits for req/exec event
90
91#define	PD_RS232_S_LE	TIOCM_LE	// line enable
92#define	PD_RS232_S_DTR	TIOCM_DTR	// data terminal ready
93#define	PD_RS232_S_RTS	TIOCM_RTS	// request to send
94#define	PD_RS232_S_RFR	PD_RS232_S_RTS	// ready for receive
95#define	PD_RS232_S_TXO	TIOCM_ST	// TX XON/XOFF
96#define	PD_RS232_S_RXO	TIOCM_SR	// RX XON/XOFF
97#define	PD_RS232_S_CTS	TIOCM_CTS	// clear to send
98#define	PD_RS232_S_CAR	TIOCM_CAR	// carrier detect
99#define	PD_RS232_S_DCD	PD_RS232_S_CAR
100#define	PD_RS232_S_RNG	TIOCM_RNG	// ring
101#define	PD_RS232_S_RI	PD_RS232_S_RNG
102#define	PD_RS232_S_DSR	TIOCM_DSR	// data set ready
103
104#define	PD_RS232_S_BRK	0x00000800UL	// break active Extension to TIOCM
105#define	PD_RS232_S_LOOP	0x00001000UL	// LOOP back Extension to TIOCM
106#define PD_RS232_S_TXQ	0x00002000UL	// User flowcontrol bit
107#define PD_RS232_S_RXQ	0x00004000UL	// User flowcontrol bit
108
109// The 'delta' bits for enq/deq of Flow Control event
110#define	PD_RS232_D_LE	(PD_RS232_S_LE  << PD_RS232_D_SHIFT)
111#define	PD_RS232_D_DTR	(PD_RS232_S_DTR << PD_RS232_D_SHIFT)
112#define	PD_RS232_D_RTS	(PD_RS232_S_RTS << PD_RS232_D_SHIFT)
113#define	PD_RS232_D_RFR	(PD_RS232_S_RFR << PD_RS232_D_SHIFT)
114#define	PD_RS232_D_TXO	(PD_RS232_S_TXO << PD_RS232_D_SHIFT)
115#define	PD_RS232_D_RXO	(PD_RS232_S_RXO << PD_RS232_D_SHIFT)
116#define	PD_RS232_D_CTS	(PD_RS232_S_CTS << PD_RS232_D_SHIFT)
117#define	PD_RS232_D_CAR	(PD_RS232_S_CAR << PD_RS232_D_SHIFT)
118#define	PD_RS232_D_DCD	(PD_RS232_S_DCD << PD_RS232_D_SHIFT)
119#define	PD_RS232_D_RNG	(PD_RS232_S_RNG << PD_RS232_D_SHIFT)
120#define	PD_RS232_D_RI	(PD_RS232_S_RI  << PD_RS232_D_SHIFT)
121#define	PD_RS232_D_DSR	(PD_RS232_S_DSR << PD_RS232_D_SHIFT)
122
123#define	PD_RS232_D_BRK	(PD_RS232_S_BRK  << PD_RS232_D_SHIFT)
124#define	PD_RS232_D_LOOP (PD_RS232_S_LOOP << PD_RS232_D_SHIFT)
125#define PD_RS232_D_TXQ	(PD_RS232_S_TXQ  << PD_RS232_D_SHIFT)
126#define PD_RS232_D_RXQ	(PD_RS232_S_RXQ  << PD_RS232_D_SHIFT)
127
128// The 'auto' bits for exec/req of Flow Control event
129#define	PD_RS232_A_LE	PD_RS232_S_LE
130#define	PD_RS232_A_DTR	PD_RS232_S_DTR
131#define	PD_RS232_A_RTS	PD_RS232_S_RTS
132#define	PD_RS232_A_RFR	PD_RS232_S_RFR
133#define	PD_RS232_A_TXO	PD_RS232_S_TXO
134#define	PD_RS232_A_RXO	PD_RS232_S_RXO
135#define	PD_RS232_A_CTS	PD_RS232_S_CTS
136#define	PD_RS232_A_CAR	PD_RS232_S_CAR
137#define	PD_RS232_A_DCD	PD_RS232_S_DCD
138#define	PD_RS232_A_RNG	PD_RS232_S_RNG
139#define	PD_RS232_A_RI	PD_RS232_S_RI
140#define	PD_RS232_A_DSR	PD_RS232_S_DSR
141#define PD_RS232_A_XANY	0x00000400	// changes _A_TXO from XON/XOFF to XANY/XOFF
142#define	PD_RS232_A_BRK	PD_RS232_S_BRK
143#define	PD_RS232_A_LOOP PD_RS232_S_LOOP
144#define PD_RS232_A_TXQ	PD_RS232_S_TXQ
145#define PD_RS232_A_RXQ	PD_RS232_S_RXQ
146
147// The 'notify' bits for exec/req of Flow Control event
148#define	PD_RS232_N_LE	(PD_RS232_S_LE  << PD_RS232_N_SHIFT)
149#define	PD_RS232_N_DTR	(PD_RS232_S_DTR << PD_RS232_N_SHIFT)
150#define	PD_RS232_N_RTS	(PD_RS232_S_RTS << PD_RS232_N_SHIFT)
151#define	PD_RS232_N_RFR	(PD_RS232_S_RFR << PD_RS232_N_SHIFT)
152#define	PD_RS232_N_TXO	(PD_RS232_S_TXO << PD_RS232_N_SHIFT)
153#define	PD_RS232_N_RXO	(PD_RS232_S_RXO << PD_RS232_N_SHIFT)
154#define	PD_RS232_N_CTS	(PD_RS232_S_CTS << PD_RS232_N_SHIFT)
155#define	PD_RS232_N_CAR	(PD_RS232_S_CAR << PD_RS232_N_SHIFT)
156#define	PD_RS232_N_DCD	(PD_RS232_S_DCD << PD_RS232_N_SHIFT)
157#define	PD_RS232_N_RNG	(PD_RS232_S_RNG << PD_RS232_N_SHIFT)
158#define	PD_RS232_N_RI	(PD_RS232_S_RI  << PD_RS232_N_SHIFT)
159#define	PD_RS232_N_DSR	(PD_RS232_S_DSR << PD_RS232_N_SHIFT)
160
161#define	PD_RS232_N_BRK	(PD_RS232_S_BRK  << PD_RS232_N_SHIFT)
162#define	PD_RS232_N_LOOP (PD_RS232_S_LOOP << PD_RS232_N_SHIFT)
163#define PD_RS232_N_TXQ	(PD_RS232_S_TXQ  << PD_RS232_N_SHIFT)
164#define PD_RS232_N_RXQ	(PD_RS232_S_RXQ  << PD_RS232_N_SHIFT)
165
166class IORS232SerialStreamSync : public IOSerialStreamSync
167{
168    OSDeclareDefaultStructors(IORS232SerialStreamSync)
169};
170
171#endif /* !_SERIAL_IORS232SERIALSTREAMSYNC_H */
172
173