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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 1991,1997-1998 by Sun Microsystems, Inc.
* All rights reserved.
*/
#ifndef _SYS_SER_SYNC_H
#define _SYS_SER_SYNC_H
#pragma ident "%Z%%M% %I% %E% SMI"
/*
* Initial port setup parameters for sync lines
*/
#include <sys/stream.h>
#include <sys/time_impl.h>
#include <sys/ioccom.h>
#ifdef __cplusplus
extern "C" {
#endif
#define zIOC ('z' << 8)
#define S_IOCGETMODE (zIOC|01) /* return struct scc_mode */
#define S_IOCSETMODE (zIOC|02) /* set SCC from struct scc_mode */
#define S_IOCGETSTATS (zIOC|03) /* return sync data stats */
#define S_IOCCLRSTATS (zIOC|04) /* clear sync stats */
#define S_IOCGETSPEED (zIOC|05) /* return int baudrate */
#define S_IOCGETMRU (zIOC|06) /* return int max receive unit */
#define S_IOCSETMRU (zIOC|07) /* set max receive unit */
#define S_IOCGETMTU (zIOC|010) /* return int max transmission unit */
#define S_IOCSETMTU (zIOC|011) /* set max transmission unit */
#define S_IOCGETMCTL (zIOC|012) /* return current CD/CTS state */
#define S_IOCSETDTR (zIOC|013) /* Drive DTR signal */
/* reason codes for IOCSETMODE */
#define SMERR_TXC 0x0001 /* transmit clock source not valid */
#define SMERR_RXC 0x0002 /* receive clock source not valid */
#define SMERR_IFLAGS 0x0004 /* inversion flags not valid */
#define SMERR_HDX 0x0008 /* CONN_HDX set without CONN_IBM */
#define SMERR_MPT 0x0010 /* CONN_MPT set without CONN_IBM */
#define SMERR_LPBKS 0x0020 /* invalid loopback/echo combination */
#define SMERR_BAUDRATE 0x0040 /* baudrate translates to 0 timeconst */
#define SMERR_PLL 0x0080 /* PLL set with BRG or w/o NRZI */
/*
* Definitions for modes of operations of
* synchronous lines, both RS-232 and RS-449
*/
struct scc_mode {
char sm_txclock; /* enum - transmit clock sources */
char sm_rxclock; /* enum - receive clock sources */
char sm_iflags; /* data and clock invert flags: see hsparam.h */
uchar_t sm_config; /* see CONN defines below */
int sm_baudrate;
int sm_retval; /* SMERR codes go here, query with GETMODE */
};
/*
* defines for txclock
*/
#define TXC_IS_TXC 0 /* use incoming transmit clock */
#define TXC_IS_RXC 1 /* use incoming receive clock */
#define TXC_IS_BAUD 2 /* use baud rate generator */
#define TXC_IS_PLL 3 /* use phase-lock loop output */
/*
* defines for rxclock
*/
#define RXC_IS_RXC 0 /* use incoming receive clock */
#define RXC_IS_TXC 1 /* use incoming transmit clock */
#define RXC_IS_BAUD 2 /* use baud rate - only good for loopback */
#define RXC_IS_PLL 3 /* use phase-lock loop */
/*
* defines for clock/data inversion: from hsparam.h
*/
#define TXC_IS_SYSCLK 4
#define RXC_IS_SYSCLK 4
#define TXC_IS_INVERT 5
#define RXC_IS_INVERT 5
#define TRXD_NO_INVERT 0
#define RXD_IS_INVERT 1
#define TXD_IS_INVERT 2
#define TRXD_IS_INVERT 3
/*
* defines for config
*/
#define CONN_HDX 0x01 /* half-duplex if set, else full-duplex */
#define CONN_MPT 0x02 /* multipoint if set, else point-point */
#define CONN_IBM 0x04 /* set up in IBM-SDLC mode */
#define CONN_SIGNAL 0x08 /* report modem signal changes asynchronously */
#define CONN_NRZI 0x10 /* boolean - use NRZI */
#define CONN_LPBK 0x20 /* do internal loopback */
#define CONN_ECHO 0x40 /* place in auto echo mode */
struct sl_status {
int type;
int status;
timestruc_t tstamp;
};
#if defined(_SYSCALL32)
struct sl_status32 {
int32_t type;
int32_t status;
timestruc32_t tstamp;
};
#endif /* _SYSCALL32 */
/*
* defines for type field in sl_status
*/
#define SLS_MDMSTAT 0x01 /* Non-IBM modem line status change */
#define SLS_LINKERR 0x02 /* IBM mode Link Error, usually modem line. */
/*
* defines for status field in sl_status
* DO NOT change the values for CS_(DCD|CTS)_(UP|DOWN)!!!
*/
#define CS_DCD_DOWN 0x08
#define CS_DCD_UP 0x0c
#define CS_DCD_DROP 0x10
#define CS_CTS_DOWN 0x20
#define CS_CTS_UP 0x30
#define CS_CTS_DROP 0x40
#define CS_CTS_TO 0x80
#define CS_DCD CS_DCD_DOWN
#define CS_CTS CS_CTS_DOWN
/*
* Event statistics reported by hardware.
*/
struct sl_stats {
int ipack; /* input packets */
int opack; /* output packets */
int ichar; /* input bytes */
int ochar; /* output bytes */
int abort; /* abort received */
int crc; /* CRC error */
int cts; /* CTS timeouts */
int dcd; /* Carrier drops */
int overrun; /* receiver overrun */
int underrun; /* xmitter underrun */
int ierror; /* input error (rxbad) */
int oerror; /* output error (watchdog timeout) */
int nobuffers; /* no active receive block available */
};
/*
* Per-stream structure. Each of these points to only one device instance,
* but there may be more than one doing so. If marked as ST_CLONE, it has
* been opened throught the clone device, and cannot have the data path.
*/
struct ser_str {
queue_t *str_rq; /* This stream's read queue */
caddr_t str_com; /* Back pointer to device struct */
int str_inst; /* Device instance (unit) number */
int str_state; /* see below */
};
/*
* Synchronous Protocol Private Data Structure
*/
#define ZSH_MAX_RSTANDBY 6
#define ZSH_RDONE_MAX 20
struct syncline {
struct ser_str sl_stream; /* data path device points thru here */
struct scc_mode sl_mode; /* clock, etc. modes */
struct sl_stats sl_st; /* Data and error statistics */
mblk_t *sl_rhead; /* receive: head of active message */
mblk_t *sl_ractb; /* receive: active message block */
mblk_t *sl_rstandby[ZSH_MAX_RSTANDBY];
/* receive: standby message blocks */
mblk_t *sl_xhead; /* transmit: head of active message */
mblk_t *sl_xactb; /* transmit: active message block */
mblk_t *sl_xstandby; /* transmit: next available message */
mblk_t *sl_rdone[ZSH_RDONE_MAX];
/* complete messages to be sent up */
int sl_rdone_wptr;
int sl_rdone_rptr;
mblk_t *sl_mstat; /* most recent modem status change */
bufcall_id_t sl_bufcid; /* pending bufcall ID */
timeout_id_t sl_wd_id; /* watchdog timeout ID */
int sl_wd_count; /* watchdog counter */
int sl_ocnt; /* output message size */
int sl_mru; /* Maximum Receive Unit */
int sl_bad_count_int;
uchar_t sl_rr0; /* saved RR0 */
uchar_t sl_address; /* station address */
uchar_t sl_txstate; /* transmit state */
uchar_t sl_flags; /* see below */
uchar_t sl_m_error;
volatile uchar_t sl_soft_active; /* */
};
/*
* Bit definitions for sl_txstate.
*/
#define TX_OFF 0x0 /* Not available */
#define TX_IDLE 0x1 /* Initialized */
#define TX_RTS 0x2 /* IBM: RTS up, okay to transmit */
#define TX_ACTIVE 0x4 /* Transmission in progress */
#define TX_CRC 0x8 /* Sent all Data */
#define TX_FLAG 0x10 /* Sent CRC bytes */
#define TX_LAST 0x20 /* End-Of-Frame, OK to start new msg */
#define TX_ABORTED 0x40 /* Transmit was aborted */
/*
* Bit definitions for sl_flags.
*/
#define SF_FDXPTP 0x1 /* Full duplex AND Point-To-Point */
#define SF_XMT_INPROG 0x2 /* Write queue is not empty */
#define SF_LINKERR 0x4 /* Underrun or CTS/DCD drop */
#define SF_FLUSH_WQ 0x8 /* */
#define SF_INITIALIZED 0x10 /* This channel programmed for this protocol */
#define SF_PHONY 0x20 /* Dummy frame has been sent to close frame */
#define SF_ZSH_START 0x40 /* */
/*
* Bit definitions for str_state.
*/
#define STR_CLONE 1 /* This was opened thru clone device */
extern int hz;
#define SIO_WATCHDOG_TICK (2 * hz) /* Two second timeout */
#define SIO_WATCHDOG_ON (zss->sl_wd_id > 0) /* Is it on? */
#ifdef __cplusplus
}
#endif
#endif /* !_SYS_SER_SYNC_H */
|