FAS 2.08 async driver, part 4/4
Uwe Doering
gemini at geminix.in-berlin.de
Mon Feb 4 09:18:49 AEST 1991
Submitted-by: gemini at geminix.in-berlin.de
Archive-name: fas208/part04
#!/bin/sh
# this is fas208.04 (part 4 of fas208)
# do not concatenate these parts, unpack them in order with /bin/sh
# file fas.h continued
#
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 4; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping fas.h'
else
echo 'x - continuing file fas.h'
sed 's/^X//' << 'SHAR_EOF' >> 'fas.h' &&
X
X/* define an easy way to reference the port structures */
X
X#define RCV_DATA_PORT (fip->port_0)
X#define XMT_DATA_PORT (fip->port_0)
X#define INT_ENABLE_PORT (fip->port_1)
X#define INT_ID_PORT (fip->port_2)
X#define NS_FIFO_CTL_PORT (fip->port_2)
X#define I_BANK_PORT (fip->port_2)
X#define LINE_CTL_PORT (fip->port_3)
X#define MDM_CTL_PORT (fip->port_4)
X#define I_IDM_PORT (fip->port_4)
X#define LINE_STATUS_PORT (fip->port_5)
X#define I_RCM_PORT (fip->port_5)
X#define MDM_STATUS_PORT (fip->port_6)
X#define I_TCM_PORT (fip->port_6)
X#define DIVISOR_LSB_PORT (fip->port_0)
X#define DIVISOR_MSB_PORT (fip->port_1)
X#define CTL_PORT (fip->ctl_port)
X
X/* modem control port */
X
X#define MC_SET_DTR 0x01
X#define MC_SET_RTS 0x02
X#define MC_SET_OUT1 0x04
X#define MC_SET_OUT2 0x08 /* tristates int line when false */
X#define MC_SET_LOOPBACK 0x10
X
X#define MC_ANY_CONTROL (MC_SET_DTR | MC_SET_RTS)
X
X/* modem status port */
X
X#define MS_CTS_DELTA 0x01
X#define MS_DSR_DELTA 0x02
X#define MS_RING_TEDGE 0x04
X#define MS_DCD_DELTA 0x08
X#define MS_CTS_PRESENT 0x10
X#define MS_DSR_PRESENT 0x20
X#define MS_RING_PRESENT 0x40
X#define MS_DCD_PRESENT 0x80
X
X#define MS_ANY_DELTA (MS_CTS_DELTA | MS_DSR_DELTA | MS_RING_TEDGE \
X | MS_DCD_DELTA)
X#define MS_ANY_PRESENT (MS_CTS_PRESENT | MS_DSR_PRESENT | MS_RING_PRESENT \
X | MS_DCD_PRESENT)
X
X/* interrupt enable port */
X
X#define IE_NONE 0x00
X#define IE_RECV_DATA_AVAILABLE 0x01
X#define IE_XMIT_HOLDING_BUFFER_EMPTY 0x02
X#define IE_LINE_STATUS 0x04
X#define IE_MODEM_STATUS 0x08
X
X#define IE_INIT_MODE (IE_RECV_DATA_AVAILABLE | IE_XMIT_HOLDING_BUFFER_EMPTY \
X | IE_LINE_STATUS | IE_MODEM_STATUS)
X
X/* interrupt id port */
X
X#define II_NO_INTS_PENDING 0x01
X#define II_CODE_MASK 0x07
X#define II_MODEM_STATE 0x00
X#define II_XMTD_CHAR 0x02
X#define II_RCVD_CHAR 0x04
X#define II_RCV_ERROR 0x06
X#define II_NS_FIFO_TIMEOUT 0x08
X#define II_NS_FIFO_ENABLED 0xC0
X
X/* line control port */
X
X#define LC_WORDLEN_MASK 0x03
X#define LC_WORDLEN_5 0x00
X#define LC_WORDLEN_6 0x01
X#define LC_WORDLEN_7 0x02
X#define LC_WORDLEN_8 0x03
X#define LC_STOPBITS_LONG 0x04
X#define LC_ENABLE_PARITY 0x08
X#define LC_EVEN_PARITY 0x10
X#define LC_STICK_PARITY 0x20
X#define LC_SET_BREAK_LEVEL 0x40
X#define LC_ENABLE_DIVISOR 0x80
X
X/* line status port */
X
X#define LS_RCV_AVAIL 0x01
X#define LS_OVERRUN 0x02
X#define LS_PARITY_ERROR 0x04
X#define LS_FRAMING_ERROR 0x08
X#define LS_BREAK_DETECTED 0x10
X#define LS_XMIT_AVAIL 0x20
X#define LS_XMIT_COMPLETE 0x40
X#define LS_ERROR_IN_NS_FIFO 0x80 /* NS16550A only */
X
X#define LS_RCV_INT (LS_RCV_AVAIL | LS_OVERRUN | LS_PARITY_ERROR \
X | LS_FRAMING_ERROR | LS_BREAK_DETECTED)
X
X/* fifo control port (NS16550A only) */
X
X#define NS_FIFO_ENABLE 0x01
X#define NS_FIFO_CLR_RECV 0x02
X#define NS_FIFO_CLR_XMIT 0x04
X#define NS_FIFO_START_DMA 0x08
X#define NS_FIFO_SIZE_1 0x00
X#define NS_FIFO_SIZE_4 0x40
X#define NS_FIFO_SIZE_8 0x80
X#define NS_FIFO_SIZE_14 0xC0
X#define NS_FIFO_SIZE_MASK 0xC0
X
X#define NS_FIFO_CLEAR_CMD 0
X#define NS_FIFO_DROP_CMD (NS_FIFO_SIZE_1 | NS_FIFO_ENABLE)
X#define NS_FIFO_SETUP_CMD (NS_FIFO_SIZE_4 | NS_FIFO_ENABLE)
X#define NS_FIFO_INIT_CMD (NS_FIFO_SETUP_CMD | NS_FIFO_CLR_RECV \
X | NS_FIFO_CLR_XMIT)
X
X#define INPUT_NS_FIFO_SIZE 16
X#define OUTPUT_NS_FIFO_SIZE 16
X
X/* fifo control ports (i82510 only) */
X
X#define I_BANK_0 0x00
X#define I_BANK_1 0x20
X#define I_BANK_2 0x40
X#define I_BANK_3 0x60
X#define I_FIFO_ENABLE 0x08
X#define I_FIFO_CLR_RECV 0x30
X#define I_FIFO_CLR_XMIT 0x0c
X
X#define I_FIFO_CLEAR_CMD 0
X#define I_FIFO_SETUP_CMD I_FIFO_ENABLE
X
X#define INPUT_I_FIFO_SIZE 4
X#define OUTPUT_I_FIFO_SIZE 4
X
X/* defines for ioctl calls (VP/ix) */
X
X#define AIOC ('A'<<8)
X#define AIOCINTTYPE (AIOC|60) /* set interrupt type */
X#define AIOCDOSMODE (AIOC|61) /* set DOS mode */
X#define AIOCNONDOSMODE (AIOC|62) /* reset DOS mode */
X#define AIOCSERIALOUT (AIOC|63) /* serial device data write */
X#define AIOCSERIALIN (AIOC|64) /* serial device data read */
X#define AIOCSETSS (AIOC|65) /* set start/stop chars */
X#define AIOCINFO (AIOC|66) /* tell us what device we are */
X
X/* ioctl alternate names used by VP/ix */
X
X#define VPC_SERIAL_DOS AIOCDOSMODE
X#define VPC_SERIAL_NONDOS AIOCNONDOSMODE
X#define VPC_SERIAL_INFO AIOCINFO
X#define VPC_SERIAL_OUT AIOCSERIALOUT
X#define VPC_SERIAL_IN AIOCSERIALIN
X
X/* serial in/out requests */
X
X#define SO_DIVLLSB 1
X#define SO_DIVLMSB 2
X#define SO_LCR 3
X#define SO_MCR 4
X#define SI_MSR 1
X#define SIO_MASK(x) (1<<((x)-1))
X
X
X/* This structure contains everything one would like to know about
X an open device. There is one of it for each physical unit.
X
X We use several unions to eliminate most integer type conversions
X at run-time. The standard UNIX V 3.X/386 C compiler forces all
X operands in expressions and all function parameters to type int.
X To save some time, with the means of unions we deliver type int
X at the proper locations while dealing with the original type
X wherever int would be slower.
X
X This is highly compiler implementation specific. But for the sake
X of speed the end justifies the means.
X
X Take care that the size of the area that contains the various
X structure fields (up to, but excluding the ring buffers)
X is <= 128 bytes. Otherwise a 4-byte offset is used to access
X some of the structure fields. For the first 128 bytes a 1-byte
X offset is used, which is faster.
X*/
X
Xstruct fas_info
X{
X struct tty *tty; /* the tty structure */
X struct fas_info *prev_int_user;/* link to previous fas_info struct */
X struct fas_info *next_int_user;/* link to next fas_info struct */
X int timeout_idx; /* timeout index for untimeout () */
X uint iflag; /* current terminal input flags */
X uint cflag; /* current terminal hardware control flags */
X union { /* flags about the device state */
X ushort s;
X uint i;
X } device_flags;
X union { /* flags about the flow control state */
X ushort s;
X uint i;
X } flow_flags;
X union { /* flags about the scheduled events */
X ushort s;
X uint i;
X } event_flags;
X uint o_state; /* current open state */
X uint po_state; /* previous open state */
X union { /* modem control masks */
X struct {
X unchar di; /* mask for modem disable */
X unchar eo; /* mask for modem enable (dialout) */
X unchar ei; /* mask for modem enable (dialin) */
X unchar ca; /* mask for carrier detect */
X } m;
X ulong l;
X } modem;
X union { /* hardware flow control masks */
X struct {
X unchar ic; /* control mask for inp. flow ctrl */
X unchar oc; /* control mask for outp. flow ctrl */
X unchar oe; /* enable mask for outp. flow ctrl */
X unchar hc; /* control mask for hdx flow ctrl */
X } m;
X ulong l;
X } flow;
X unchar msr; /* modem status register value */
X unchar new_msr; /* new modem status register value */
X unchar mcr; /* modem control register value */
X unchar lcr; /* line control register value */
X unchar ier; /* interrupt enable register value */
X unchar vec; /* interrupt vector for this struct */
X unchar msi_cnt; /* modem status interrupt counter */
X#if defined (HAVE_VPIX)
X unchar v86_intmask; /* VP/ix pseudorupt mask */
X v86_t *v86_proc; /* VP/ix v86proc pointer for pseudorupts */
X struct termss v86_ss; /* VP/ix start/stop characters */
X#endif
X uint ctl_port; /* muliplexer control port */
X union { /* uart port addresses and control values */
X uint addr;
X struct {
X ushort addr;
X unchar ctl;
X } p;
X } port_0, port_1, port_2, port_3, port_4, port_5, port_6;
X uint recv_ring_cnt; /* receiver ring buffer counter */
X unchar *recv_ring_put_ptr; /* recv ring buf put ptr */
X unchar *recv_ring_take_ptr; /* recv ring buf take ptr */
X ushort xmit_fifo_size; /* transmitter FIFO size */
X ushort xmit_ring_size; /* transmitter ring buffer size */
X uint xmit_ring_cnt; /* transmitter ring buffer counter */
X unchar *xmit_ring_put_ptr; /* xmit ring buf put ptr */
X unchar *xmit_ring_take_ptr; /* xmit ring buf take ptr */
X unchar recv_buffer [RECV_BUFF_SIZE]; /* recv ring buf */
X unchar xmit_buffer [XMIT_BUFF_SIZE]; /* xmit ring buf */
X};
SHAR_EOF
echo 'File fas.h is complete' &&
true || echo 'restore of fas.h failed'
rm -f _shar_wnt_.tmp
fi
# ============= i_fas-ast4 ==============
if test -f 'i_fas-ast4' -a X"$1" != X"-c"; then
echo 'x - skipping i_fas-ast4 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting i_fas-ast4 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'i_fas-ast4' &&
XF0:23:off:/etc/getty ttyFM00 9600
XF1:23:off:/etc/getty ttyFM01 9600
XF2:23:off:/etc/getty ttyFM02 9600
XF3:23:off:/etc/getty ttyFM03 9600
SHAR_EOF
true || echo 'restore of i_fas-ast4 failed'
rm -f _shar_wnt_.tmp
fi
# ============= i_fas-ast4c12 ==============
if test -f 'i_fas-ast4c12' -a X"$1" != X"-c"; then
echo 'x - skipping i_fas-ast4c12 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting i_fas-ast4c12 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'i_fas-ast4c12' &&
XF0:23:off:/etc/getty ttyFM00 9600
XF1:23:off:/etc/getty ttyFM01 9600
XF2:23:off:/etc/getty ttyFM02 9600
XF3:23:off:/etc/getty ttyFM03 9600
XF4:23:off:/etc/getty ttyFM04 9600
XF5:23:off:/etc/getty ttyFM05 9600
SHAR_EOF
true || echo 'restore of i_fas-ast4c12 failed'
rm -f _shar_wnt_.tmp
fi
# ============= i_fas-c1-2 ==============
if test -f 'i_fas-c1-2' -a X"$1" != X"-c"; then
echo 'x - skipping i_fas-c1-2 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting i_fas-c1-2 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'i_fas-c1-2' &&
XF0:23:off:/etc/getty ttyFM00 9600
XF1:23:off:/etc/getty ttyFM01 9600
SHAR_EOF
true || echo 'restore of i_fas-c1-2 failed'
rm -f _shar_wnt_.tmp
fi
# ============= i_fas-c1-3 ==============
if test -f 'i_fas-c1-3' -a X"$1" != X"-c"; then
echo 'x - skipping i_fas-c1-3 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting i_fas-c1-3 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'i_fas-c1-3' &&
XF0:23:off:/etc/getty ttyFM00 9600
XF1:23:off:/etc/getty ttyFM01 9600
XF2:23:off:/etc/getty ttyFM02 9600
SHAR_EOF
true || echo 'restore of i_fas-c1-3 failed'
rm -f _shar_wnt_.tmp
fi
# ============= i_fas-hub6 ==============
if test -f 'i_fas-hub6' -a X"$1" != X"-c"; then
echo 'x - skipping i_fas-hub6 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting i_fas-hub6 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'i_fas-hub6' &&
XF0:23:off:/etc/getty ttyFM00 9600
XF1:23:off:/etc/getty ttyFM01 9600
XF2:23:off:/etc/getty ttyFM02 9600
XF3:23:off:/etc/getty ttyFM03 9600
XF4:23:off:/etc/getty ttyFM04 9600
XF5:23:off:/etc/getty ttyFM05 9600
SHAR_EOF
true || echo 'restore of i_fas-hub6 failed'
rm -f _shar_wnt_.tmp
fi
# ============= n_fas-ast4 ==============
if test -f 'n_fas-ast4' -a X"$1" != X"-c"; then
echo 'x - skipping n_fas-ast4 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting n_fas-ast4 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'n_fas-ast4' &&
Xfas ttyF00 c 80
Xfas ttyF01 c 81
Xfas ttyF02 c 82
Xfas ttyF03 c 83
Xfas ttyFM00 c 208
Xfas ttyFM01 c 209
Xfas ttyFM02 c 210
Xfas ttyFM03 c 211
SHAR_EOF
true || echo 'restore of n_fas-ast4 failed'
rm -f _shar_wnt_.tmp
fi
# ============= n_fas-ast4c12 ==============
if test -f 'n_fas-ast4c12' -a X"$1" != X"-c"; then
echo 'x - skipping n_fas-ast4c12 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting n_fas-ast4c12 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'n_fas-ast4c12' &&
Xfas ttyF00 c 80
Xfas ttyF01 c 81
Xfas ttyF02 c 82
Xfas ttyF03 c 83
Xfas ttyF04 c 84
Xfas ttyF05 c 85
Xfas ttyFM00 c 208
Xfas ttyFM01 c 209
Xfas ttyFM02 c 210
Xfas ttyFM03 c 211
Xfas ttyFM04 c 212
Xfas ttyFM05 c 213
SHAR_EOF
true || echo 'restore of n_fas-ast4c12 failed'
rm -f _shar_wnt_.tmp
fi
# ============= n_fas-c1-2 ==============
if test -f 'n_fas-c1-2' -a X"$1" != X"-c"; then
echo 'x - skipping n_fas-c1-2 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting n_fas-c1-2 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'n_fas-c1-2' &&
Xfas ttyF00 c 80
Xfas ttyF01 c 81
Xfas ttyFM00 c 208
Xfas ttyFM01 c 209
SHAR_EOF
true || echo 'restore of n_fas-c1-2 failed'
rm -f _shar_wnt_.tmp
fi
# ============= n_fas-c1-3 ==============
if test -f 'n_fas-c1-3' -a X"$1" != X"-c"; then
echo 'x - skipping n_fas-c1-3 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting n_fas-c1-3 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'n_fas-c1-3' &&
Xfas ttyF00 c 80
Xfas ttyF01 c 81
Xfas ttyF02 c 82
Xfas ttyFM00 c 208
Xfas ttyFM01 c 209
Xfas ttyFM02 c 210
SHAR_EOF
true || echo 'restore of n_fas-c1-3 failed'
rm -f _shar_wnt_.tmp
fi
# ============= n_fas-hub6 ==============
if test -f 'n_fas-hub6' -a X"$1" != X"-c"; then
echo 'x - skipping n_fas-hub6 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting n_fas-hub6 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'n_fas-hub6' &&
Xfas ttyF00 c 80
Xfas ttyF01 c 81
Xfas ttyF02 c 82
Xfas ttyF03 c 83
Xfas ttyF04 c 84
Xfas ttyF05 c 85
Xfas ttyFM00 c 208
Xfas ttyFM01 c 209
Xfas ttyFM02 c 210
Xfas ttyFM03 c 211
Xfas ttyFM04 c 212
Xfas ttyFM05 c 213
SHAR_EOF
true || echo 'restore of n_fas-hub6 failed'
rm -f _shar_wnt_.tmp
fi
# ============= s_fas-ast4 ==============
if test -f 's_fas-ast4' -a X"$1" != X"-c"; then
echo 'x - skipping s_fas-ast4 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting s_fas-ast4 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 's_fas-ast4' &&
Xfas Y 4 7 1 4 2a0 2bf 0 0
SHAR_EOF
true || echo 'restore of s_fas-ast4 failed'
rm -f _shar_wnt_.tmp
fi
# ============= s_fas-ast4c12 ==============
if test -f 's_fas-ast4c12' -a X"$1" != X"-c"; then
echo 'x - skipping s_fas-ast4c12 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting s_fas-ast4c12 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 's_fas-ast4c12' &&
Xfas Y 4 7 1 9 2a0 2bf 0 0
Xfas Y 1 7 1 4 3f8 3ff 0 0
Xfas Y 1 7 1 3 2f8 2ff 0 0
SHAR_EOF
true || echo 'restore of s_fas-ast4c12 failed'
rm -f _shar_wnt_.tmp
fi
# ============= s_fas-c1-2 ==============
if test -f 's_fas-c1-2' -a X"$1" != X"-c"; then
echo 'x - skipping s_fas-c1-2 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting s_fas-c1-2 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 's_fas-c1-2' &&
Xfas Y 1 7 1 4 3f8 3ff 0 0
Xfas Y 1 7 1 3 2f8 2ff 0 0
SHAR_EOF
true || echo 'restore of s_fas-c1-2 failed'
rm -f _shar_wnt_.tmp
fi
# ============= s_fas-c1-3 ==============
if test -f 's_fas-c1-3' -a X"$1" != X"-c"; then
echo 'x - skipping s_fas-c1-3 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting s_fas-c1-3 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 's_fas-c1-3' &&
Xfas Y 1 7 1 4 3f8 3ff 0 0
Xfas Y 1 7 1 3 2f8 2ff 0 0
Xfas Y 1 7 1 9 3e8 3ef 0 0
SHAR_EOF
true || echo 'restore of s_fas-c1-3 failed'
rm -f _shar_wnt_.tmp
fi
# ============= s_fas-hub6 ==============
if test -f 's_fas-hub6' -a X"$1" != X"-c"; then
echo 'x - skipping s_fas-hub6 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting s_fas-hub6 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 's_fas-hub6' &&
Xfas Y 6 7 1 3 302 308 0 0
SHAR_EOF
true || echo 'restore of s_fas-hub6 failed'
rm -f _shar_wnt_.tmp
fi
# ============= space-ast4 ==============
if test -f 'space-ast4' -a X"$1" != X"-c"; then
echo 'x - skipping space-ast4 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting space-ast4 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'space-ast4' &&
X/* Async device configuration file for the FAS async driver. */
X
X/* This version is for the AST 4-port card in expanded mode.
X*/
X
X/* FAS was developed by
XUwe Doering INET : gemini at geminix.in-berlin.de
XBillstedter Pfad 17 b UUCP : ...!unido!fub!geminix.in-berlin.de!gemini
X1000 Berlin 20
XGermany
X*/
X
X#if !defined (M_I286)
X#ident "@(#)space.c 2.08"
X#endif
X
X#if defined (XENIX)
X#include "fas.h"
X#else
X#include <sys/fas.h>
X#endif
X
X/* This is the number of devices to be handled by this driver.
X You may define up to 16 devices. If this number is changed
X the arrays below must be filled in accordingly.
X*/
X#define NUM_PHYSICAL_UNITS 4
X
X#if NUM_PHYSICAL_UNITS > MAX_UNITS
X#undef NUM_PHYSICAL_UNITS
X#define NUM_PHYSICAL_UNITS MAX_UNITS
X#endif
X
X/* let the driver know the number of devices */
Xuint fas_physical_units = NUM_PHYSICAL_UNITS;
X
X/* array of base port addresses
X If you deliberately want to force off the FIFOs of a UART you have
X to "or" the NO_FIFO macro to its base port address. This is useful
X for mouse devices where you need immediate response to the mouse
X movement.
X*/
Xulong fas_port [NUM_PHYSICAL_UNITS] =
X{
X 0x2a0, 0x2a8, 0x2b0, 0x2b8
X};
X
X/* array of interrupt vectors */
Xuint fas_vec [NUM_PHYSICAL_UNITS] =
X{
X 0x4, 0x4, 0x4, 0x4
X};
X
X/* initialization sequence for serial card
X This array contains pairs of values of the form:
X
X portaddress, value,
X :
X :
X portaddress, value,
X 0
X
X For every line `value' will be written to `portaddress'. If
X `value' is replaced with the macro `READ_PORT' then a value
X is read from `portaddress' instead. The value itself will be
X discarded. Therefor this makes only sense if the read access
X to the port has a side effect like setting or resetting
X certain flags.
X
X NOTE: This array *must* be terminated with a value of 0
X in the portaddress column!
X*/
Xuint fas_init_seq [] =
X{
X 0x2bf, 0x80,
X 0
X};
X
X/* initial modem control port info
X This value is ored into the modem control value for each UART. This is
X normaly used to force out2 which is used to enable the interrupts of
X the standard com1 and com2 ports. Several brands of cards have modes
X that allow them to work in compatible mode like com1 and com2 or as a
X shared interrupts card. One of these cards is the AST 4-port card. When
X this card is used in shared interrupts mode out2 must _not_ be set.
X
X Note: This is one of the major trouble-spots with shared interrupts
X cards. Check your manual.
X*/
Xuint fas_mcb [NUM_PHYSICAL_UNITS] =
X{
X 0, 0, 0, 0
X};
X
X/* array of modem control flags
X You can choose which signals to use for modem control. See fas.h
X for possible names and values. Whether or not modem control is
X used is determined by the minor device number at open time.
X*/
Xulong fas_modem [NUM_PHYSICAL_UNITS] =
X{
X EO_DTR | EI_DTR | CA_DCD,
X EO_DTR | EI_DTR | CA_DCD,
X EO_DTR | EI_DTR | CA_DCD,
X EO_DTR | EI_DTR | CA_DCD
X};
X
X/* array of hardware flow control flags
X You can choose which signals to use for hardware handshake. See fas.h
X for possible names and values. Whether or not hardware handshake is
X used is determined by the minor device number at open time and by the
X RTSFLOW/CTSFLOW termio(7) flags.
X*/
Xulong fas_flow [NUM_PHYSICAL_UNITS] =
X{
X HI_RTS | HO_CTS_ON_DSR | HX_RTS,
X HI_RTS | HO_CTS_ON_DSR | HX_RTS,
X HI_RTS | HO_CTS_ON_DSR | HX_RTS,
X HI_RTS | HO_CTS_ON_DSR | HX_RTS
X};
X
X/* array of control register addresses
X There are serial boards available that have all serial ports
X multiplexed to one address location in order to save I/O address
X space (Bell Tech HUB-6 card etc.). This multiplexing is controlled
X by a special register that needs to be written to before the actual
X port registers can be accessed. This array contains the addresses
X of these special registers.
X Enter the addresses on a per unit base. An address of zero
X disables this feature.
X*/
Xuint fas_ctl_port [NUM_PHYSICAL_UNITS] =
X{
X 0, 0, 0, 0
X};
X
X/* array of control register values
X These values are written to the corresponding control register
X before the first access to the actual port registers. If not only
X entire UART chips (blocks of 8 contiguous addresses) but even the
X single registers of the UART chips need to be multiplexed to one
X address you have to "or" a bit mask (shifted 8 times to the left)
X to the control register value. This mask determines at which bit
X locations the UART chip register number is "xored" into the control
X register value at runtime. This implies that you can also use
X negative logic by setting the bits in the control register value
X to 1 at the locations corresponding to the bit mask.
X*/
Xuint fas_ctl_val [NUM_PHYSICAL_UNITS] =
X{
X 0, 0, 0, 0
X};
X
X/* additional configurations for shared interrupts boards
X If you have a shared interrupts board, you may have to acknowledge
X interrupts by writing to a special register. The following arrays
X contain the special register addresses and the corresponding values
X that are written to them in response to an interrupt.
X*/
X
X/* array of int ack register addresses
X These registers are written to every time after all interrupt
X sources in all of the UARTs that are tied to the corresponding
X interrupt vector have been cleared.
X Enter the addresses on a per vector base. An address of zero
X disables this feature.
X*/
Xuint fas_int_ack_port [NUM_INT_VECTORS] =
X{
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0
X};
X
X/* array of int ack values
X These values are written to the corresponding int ack register
X in response to an interrupt.
X*/
Xuint fas_int_ack [NUM_INT_VECTORS] =
X{
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0
X};
X
X/* NOTHING NEEDS TO BE CHANGED BELOW THIS LINE.
X ============================================
X*/
X
X/* array of structures to hold all info for a physical minor device */
Xstruct fas_info fas_info [NUM_PHYSICAL_UNITS];
X
X/* array of ttys for logical minor devices */
Xstruct tty fas_tty [NUM_PHYSICAL_UNITS * 2];
X
X/* array of pointers to fas_info structures
X this prevents time consuming multiplications for index calculation
X*/
Xstruct fas_info *fas_info_ptr [NUM_PHYSICAL_UNITS];
X
X/* array of pointers to fas_tty structures
X this prevents time consuming multiplications for index calculation
X*/
Xstruct tty *fas_tty_ptr [NUM_PHYSICAL_UNITS * 2];
SHAR_EOF
true || echo 'restore of space-ast4 failed'
rm -f _shar_wnt_.tmp
fi
# ============= space-ast4c12 ==============
if test -f 'space-ast4c12' -a X"$1" != X"-c"; then
echo 'x - skipping space-ast4c12 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting space-ast4c12 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'space-ast4c12' &&
X/* Async device configuration file for the FAS async driver. */
X
X/* This version is for the AST 4-port card in expanded mode plus
X the standard COM1 and COM2 ports.
X*/
X
X/* FAS was developed by
XUwe Doering INET : gemini at geminix.in-berlin.de
XBillstedter Pfad 17 b UUCP : ...!unido!fub!geminix.in-berlin.de!gemini
X1000 Berlin 20
XGermany
X*/
X
X#if !defined (M_I286)
X#ident "@(#)space.c 2.08"
X#endif
X
X#if defined (XENIX)
X#include "fas.h"
X#else
X#include <sys/fas.h>
X#endif
X
X/* This is the number of devices to be handled by this driver.
X You may define up to 16 devices. If this number is changed
X the arrays below must be filled in accordingly.
X*/
X#define NUM_PHYSICAL_UNITS 6
X
X#if NUM_PHYSICAL_UNITS > MAX_UNITS
X#undef NUM_PHYSICAL_UNITS
X#define NUM_PHYSICAL_UNITS MAX_UNITS
X#endif
X
X/* let the driver know the number of devices */
Xuint fas_physical_units = NUM_PHYSICAL_UNITS;
X
X/* array of base port addresses
X If you deliberately want to force off the FIFOs of a UART you have
X to "or" the NO_FIFO macro to its base port address. This is useful
X for mouse devices where you need immediate response to the mouse
X movement.
X*/
Xulong fas_port [NUM_PHYSICAL_UNITS] =
X{
X 0x2a0, 0x2a8, 0x2b0, 0x2b8,
X 0x3f8, 0x2f8
X};
X
X/* array of interrupt vectors */
Xuint fas_vec [NUM_PHYSICAL_UNITS] =
X{
X 0x9, 0x9, 0x9, 0x9,
X 0x4, 0x3
X};
X
X/* initialization sequence for serial card
X This array contains pairs of values of the form:
X
X portaddress, value,
X :
X :
X portaddress, value,
X 0
X
X For every line `value' will be written to `portaddress'. If
X `value' is replaced with the macro `READ_PORT' then a value
X is read from `portaddress' instead. The value itself will be
X discarded. Therefor this makes only sense if the read access
X to the port has a side effect like setting or resetting
X certain flags.
X
X NOTE: This array *must* be terminated with a value of 0
X in the portaddress column!
X*/
Xuint fas_init_seq [] =
X{
X 0x2bf, 0x80,
X 0
X};
X
X/* initial modem control port info
X This value is ored into the modem control value for each UART. This is
X normaly used to force out2 which is used to enable the interrupts of
X the standard com1 and com2 ports. Several brands of cards have modes
X that allow them to work in compatible mode like com1 and com2 or as a
X shared interrupts card. One of these cards is the AST 4-port card. When
X this card is used in shared interrupts mode out2 must _not_ be set.
X
X Note: This is one of the major trouble-spots with shared interrupts
X cards. Check your manual.
X*/
Xuint fas_mcb [NUM_PHYSICAL_UNITS] =
X{
X 0, 0, 0, 0,
X MC_SET_OUT2, MC_SET_OUT2
X};
X
X/* array of modem control flags
X You can choose which signals to use for modem control. See fas.h
X for possible names and values. Whether or not modem control is
X used is determined by the minor device number at open time.
X*/
Xulong fas_modem [NUM_PHYSICAL_UNITS] =
X{
X EO_DTR | EI_DTR | CA_DCD,
X EO_DTR | EI_DTR | CA_DCD,
X EO_DTR | EI_DTR | CA_DCD,
X EO_DTR | EI_DTR | CA_DCD,
X EO_DTR | EI_DTR | CA_DCD,
X EO_DTR | EI_DTR | CA_DCD
X};
X
X/* array of hardware flow control flags
X You can choose which signals to use for hardware handshake. See fas.h
X for possible names and values. Whether or not hardware handshake is
X used is determined by the minor device number at open time and by the
X RTSFLOW/CTSFLOW termio(7) flags.
X*/
Xulong fas_flow [NUM_PHYSICAL_UNITS] =
X{
X HI_RTS | HO_CTS_ON_DSR | HX_RTS,
X HI_RTS | HO_CTS_ON_DSR | HX_RTS,
X HI_RTS | HO_CTS_ON_DSR | HX_RTS,
X HI_RTS | HO_CTS_ON_DSR | HX_RTS,
X HI_RTS | HO_CTS_ON_DSR | HX_RTS,
X HI_RTS | HO_CTS_ON_DSR | HX_RTS
X};
X
X/* array of control register addresses
X There are serial boards available that have all serial ports
X multiplexed to one address location in order to save I/O address
X space (Bell Tech HUB-6 card etc.). This multiplexing is controlled
X by a special register that needs to be written to before the actual
X port registers can be accessed. This array contains the addresses
X of these special registers.
X Enter the addresses on a per unit base. An address of zero
X disables this feature.
X*/
Xuint fas_ctl_port [NUM_PHYSICAL_UNITS] =
X{
X 0, 0, 0, 0,
X 0, 0
X};
X
X/* array of control register values
X These values are written to the corresponding control register
X before the first access to the actual port registers. If not only
X entire UART chips (blocks of 8 contiguous addresses) but even the
X single registers of the UART chips need to be multiplexed to one
X address you have to "or" a bit mask (shifted 8 times to the left)
X to the control register value. This mask determines at which bit
X locations the UART chip register number is "xored" into the control
X register value at runtime. This implies that you can also use
X negative logic by setting the bits in the control register value
X to 1 at the locations corresponding to the bit mask.
X*/
Xuint fas_ctl_val [NUM_PHYSICAL_UNITS] =
X{
X 0, 0, 0, 0,
X 0, 0
X};
X
X/* additional configurations for shared interrupts boards
X If you have a shared interrupts board, you may have to acknowledge
X interrupts by writing to a special register. The following arrays
X contain the special register addresses and the corresponding values
X that are written to them in response to an interrupt.
X*/
X
X/* array of int ack register addresses
X These registers are written to every time after all interrupt
X sources in all of the UARTs that are tied to the corresponding
X interrupt vector have been cleared.
X Enter the addresses on a per vector base. An address of zero
X disables this feature.
X*/
Xuint fas_int_ack_port [NUM_INT_VECTORS] =
X{
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0
X};
X
X/* array of int ack values
X These values are written to the corresponding int ack register
X in response to an interrupt.
X*/
Xuint fas_int_ack [NUM_INT_VECTORS] =
X{
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0
X};
X
X/* NOTHING NEEDS TO BE CHANGED BELOW THIS LINE.
X ============================================
X*/
X
X/* array of structures to hold all info for a physical minor device */
Xstruct fas_info fas_info [NUM_PHYSICAL_UNITS];
X
X/* array of ttys for logical minor devices */
Xstruct tty fas_tty [NUM_PHYSICAL_UNITS * 2];
X
X/* array of pointers to fas_info structures
X this prevents time consuming multiplications for index calculation
X*/
Xstruct fas_info *fas_info_ptr [NUM_PHYSICAL_UNITS];
X
X/* array of pointers to fas_tty structures
X this prevents time consuming multiplications for index calculation
X*/
Xstruct tty *fas_tty_ptr [NUM_PHYSICAL_UNITS * 2];
SHAR_EOF
true || echo 'restore of space-ast4c12 failed'
rm -f _shar_wnt_.tmp
fi
# ============= space-c1-2 ==============
if test -f 'space-c1-2' -a X"$1" != X"-c"; then
echo 'x - skipping space-c1-2 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting space-c1-2 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'space-c1-2' &&
X/* Async device configuration file for the FAS async driver. */
X
X/* This version is for the standard COM1 and COM2 ports.
X*/
X
X/* FAS was developed by
XUwe Doering INET : gemini at geminix.in-berlin.de
XBillstedter Pfad 17 b UUCP : ...!unido!fub!geminix.in-berlin.de!gemini
X1000 Berlin 20
XGermany
X*/
X
X#if !defined (M_I286)
X#ident "@(#)space.c 2.08"
X#endif
X
X#if defined (XENIX)
X#include "fas.h"
X#else
X#include <sys/fas.h>
X#endif
X
X/* This is the number of devices to be handled by this driver.
X You may define up to 16 devices. If this number is changed
X the arrays below must be filled in accordingly.
X*/
X#define NUM_PHYSICAL_UNITS 2
X
X#if NUM_PHYSICAL_UNITS > MAX_UNITS
X#undef NUM_PHYSICAL_UNITS
X#define NUM_PHYSICAL_UNITS MAX_UNITS
X#endif
X
X/* let the driver know the number of devices */
Xuint fas_physical_units = NUM_PHYSICAL_UNITS;
X
X/* array of base port addresses
X If you deliberately want to force off the FIFOs of a UART you have
X to "or" the NO_FIFO macro to its base port address. This is useful
X for mouse devices where you need immediate response to the mouse
X movement.
X*/
Xulong fas_port [NUM_PHYSICAL_UNITS] =
X{
X 0x3f8, 0x2f8
X};
X
X/* array of interrupt vectors */
Xuint fas_vec [NUM_PHYSICAL_UNITS] =
X{
X 0x4, 0x3
X};
X
X/* initialization sequence for serial card
X This array contains pairs of values of the form:
X
X portaddress, value,
X :
X :
X portaddress, value,
X 0
X
X For every line `value' will be written to `portaddress'. If
X `value' is replaced with the macro `READ_PORT' then a value
X is read from `portaddress' instead. The value itself will be
X discarded. Therefor this makes only sense if the read access
X to the port has a side effect like setting or resetting
X certain flags.
X
X NOTE: This array *must* be terminated with a value of 0
X in the portaddress column!
X*/
Xuint fas_init_seq [] =
X{
X 0
X};
X
X/* initial modem control port info
X This value is ored into the modem control value for each UART. This is
X normaly used to force out2 which is used to enable the interrupts of
X the standard com1 and com2 ports. Several brands of cards have modes
X that allow them to work in compatible mode like com1 and com2 or as a
X shared interrupts card. One of these cards is the AST 4-port card. When
X this card is used in shared interrupts mode out2 must _not_ be set.
X
X Note: This is one of the major trouble-spots with shared interrupts
X cards. Check your manual.
X*/
Xuint fas_mcb [NUM_PHYSICAL_UNITS] =
X{
X MC_SET_OUT2, MC_SET_OUT2
X};
X
X/* array of modem control flags
X You can choose which signals to use for modem control. See fas.h
X for possible names and values. Whether or not modem control is
X used is determined by the minor device number at open time.
X*/
Xulong fas_modem [NUM_PHYSICAL_UNITS] =
X{
X EO_DTR | EI_DTR | CA_DCD,
X EO_DTR | EI_DTR | CA_DCD
X};
X
X/* array of hardware flow control flags
X You can choose which signals to use for hardware handshake. See fas.h
X for possible names and values. Whether or not hardware handshake is
X used is determined by the minor device number at open time and by the
X RTSFLOW/CTSFLOW termio(7) flags.
X*/
Xulong fas_flow [NUM_PHYSICAL_UNITS] =
X{
X HI_RTS | HO_CTS_ON_DSR | HX_RTS,
X HI_RTS | HO_CTS_ON_DSR | HX_RTS
X};
X
X/* array of control register addresses
X There are serial boards available that have all serial ports
X multiplexed to one address location in order to save I/O address
X space (Bell Tech HUB-6 card etc.). This multiplexing is controlled
X by a special register that needs to be written to before the actual
X port registers can be accessed. This array contains the addresses
X of these special registers.
X Enter the addresses on a per unit base. An address of zero
X disables this feature.
X*/
Xuint fas_ctl_port [NUM_PHYSICAL_UNITS] =
X{
X 0, 0
X};
X
X/* array of control register values
X These values are written to the corresponding control register
X before the first access to the actual port registers. If not only
X entire UART chips (blocks of 8 contiguous addresses) but even the
X single registers of the UART chips need to be multiplexed to one
X address you have to "or" a bit mask (shifted 8 times to the left)
X to the control register value. This mask determines at which bit
X locations the UART chip register number is "xored" into the control
X register value at runtime. This implies that you can also use
X negative logic by setting the bits in the control register value
X to 1 at the locations corresponding to the bit mask.
X*/
Xuint fas_ctl_val [NUM_PHYSICAL_UNITS] =
X{
X 0, 0
X};
X
X/* additional configurations for shared interrupts boards
X If you have a shared interrupts board, you may have to acknowledge
X interrupts by writing to a special register. The following arrays
X contain the special register addresses and the corresponding values
X that are written to them in response to an interrupt.
X*/
X
X/* array of int ack register addresses
X These registers are written to every time after all interrupt
X sources in all of the UARTs that are tied to the corresponding
X interrupt vector have been cleared.
X Enter the addresses on a per vector base. An address of zero
X disables this feature.
X*/
Xuint fas_int_ack_port [NUM_INT_VECTORS] =
X{
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0
X};
X
X/* array of int ack values
X These values are written to the corresponding int ack register
X in response to an interrupt.
X*/
Xuint fas_int_ack [NUM_INT_VECTORS] =
X{
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0
X};
X
X/* NOTHING NEEDS TO BE CHANGED BELOW THIS LINE.
X ============================================
X*/
X
X/* array of structures to hold all info for a physical minor device */
Xstruct fas_info fas_info [NUM_PHYSICAL_UNITS];
X
X/* array of ttys for logical minor devices */
Xstruct tty fas_tty [NUM_PHYSICAL_UNITS * 2];
X
X/* array of pointers to fas_info structures
X this prevents time consuming multiplications for index calculation
X*/
Xstruct fas_info *fas_info_ptr [NUM_PHYSICAL_UNITS];
X
X/* array of pointers to fas_tty structures
X this prevents time consuming multiplications for index calculation
X*/
Xstruct tty *fas_tty_ptr [NUM_PHYSICAL_UNITS * 2];
SHAR_EOF
true || echo 'restore of space-c1-2 failed'
rm -f _shar_wnt_.tmp
fi
# ============= space-c1-3 ==============
if test -f 'space-c1-3' -a X"$1" != X"-c"; then
echo 'x - skipping space-c1-3 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting space-c1-3 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'space-c1-3' &&
X/* Async device configuration file for the FAS async driver. */
X
X/* This version is for the standard COM1 and COM2 and additional COM3
X ports.
X*/
X
X/* FAS was developed by
XUwe Doering INET : gemini at geminix.in-berlin.de
XBillstedter Pfad 17 b UUCP : ...!unido!fub!geminix.in-berlin.de!gemini
X1000 Berlin 20
XGermany
X*/
X
X#if !defined (M_I286)
X#ident "@(#)space.c 2.08"
X#endif
X
X#if defined (XENIX)
X#include "fas.h"
X#else
X#include <sys/fas.h>
X#endif
X
X/* This is the number of devices to be handled by this driver.
X You may define up to 16 devices. If this number is changed
X the arrays below must be filled in accordingly.
X*/
X#define NUM_PHYSICAL_UNITS 3
X
X#if NUM_PHYSICAL_UNITS > MAX_UNITS
X#undef NUM_PHYSICAL_UNITS
X#define NUM_PHYSICAL_UNITS MAX_UNITS
X#endif
X
X/* let the driver know the number of devices */
Xuint fas_physical_units = NUM_PHYSICAL_UNITS;
X
X/* array of base port addresses
X If you deliberately want to force off the FIFOs of a UART you have
X to "or" the NO_FIFO macro to its base port address. This is useful
X for mouse devices where you need immediate response to the mouse
X movement.
X*/
Xulong fas_port [NUM_PHYSICAL_UNITS] =
X{
X 0x3f8, 0x2f8, 0x3e8
X};
X
X/* array of interrupt vectors */
Xuint fas_vec [NUM_PHYSICAL_UNITS] =
X{
X 0x4, 0x3, 0x9
X};
X
X/* initialization sequence for serial card
X This array contains pairs of values of the form:
X
X portaddress, value,
X :
X :
X portaddress, value,
X 0
X
X For every line `value' will be written to `portaddress'. If
X `value' is replaced with the macro `READ_PORT' then a value
X is read from `portaddress' instead. The value itself will be
X discarded. Therefor this makes only sense if the read access
X to the port has a side effect like setting or resetting
X certain flags.
X
X NOTE: This array *must* be terminated with a value of 0
X in the portaddress column!
X*/
Xuint fas_init_seq [] =
X{
X 0
X};
X
X/* initial modem control port info
X This value is ored into the modem control value for each UART. This is
X normaly used to force out2 which is used to enable the interrupts of
X the standard com1 and com2 ports. Several brands of cards have modes
X that allow them to work in compatible mode like com1 and com2 or as a
X shared interrupts card. One of these cards is the AST 4-port card. When
X this card is used in shared interrupts mode out2 must _not_ be set.
X
X Note: This is one of the major trouble-spots with shared interrupts
X cards. Check your manual.
X*/
Xuint fas_mcb [NUM_PHYSICAL_UNITS] =
X{
X MC_SET_OUT2, MC_SET_OUT2, MC_SET_OUT2
X};
X
X/* array of modem control flags
X You can choose which signals to use for modem control. See fas.h
X for possible names and values. Whether or not modem control is
X used is determined by the minor device number at open time.
X*/
Xulong fas_modem [NUM_PHYSICAL_UNITS] =
X{
X EO_DTR | EI_DTR | CA_DCD,
X EO_DTR | EI_DTR | CA_DCD,
X EO_DTR | EI_DTR | CA_DCD
X};
X
X/* array of hardware flow control flags
X You can choose which signals to use for hardware handshake. See fas.h
X for possible names and values. Whether or not hardware handshake is
X used is determined by the minor device number at open time and by the
X RTSFLOW/CTSFLOW termio(7) flags.
X*/
Xulong fas_flow [NUM_PHYSICAL_UNITS] =
X{
X HI_RTS | HO_CTS_ON_DSR | HX_RTS,
X HI_RTS | HO_CTS_ON_DSR | HX_RTS,
X HI_RTS | HO_CTS_ON_DSR | HX_RTS
X};
X
X/* array of control register addresses
X There are serial boards available that have all serial ports
X multiplexed to one address location in order to save I/O address
X space (Bell Tech HUB-6 card etc.). This multiplexing is controlled
X by a special register that needs to be written to before the actual
X port registers can be accessed. This array contains the addresses
X of these special registers.
X Enter the addresses on a per unit base. An address of zero
X disables this feature.
X*/
Xuint fas_ctl_port [NUM_PHYSICAL_UNITS] =
X{
X 0, 0, 0
X};
X
X/* array of control register values
X These values are written to the corresponding control register
X before the first access to the actual port registers. If not only
X entire UART chips (blocks of 8 contiguous addresses) but even the
X single registers of the UART chips need to be multiplexed to one
X address you have to "or" a bit mask (shifted 8 times to the left)
X to the control register value. This mask determines at which bit
X locations the UART chip register number is "xored" into the control
X register value at runtime. This implies that you can also use
X negative logic by setting the bits in the control register value
X to 1 at the locations corresponding to the bit mask.
X*/
Xuint fas_ctl_val [NUM_PHYSICAL_UNITS] =
X{
X 0, 0, 0
X};
X
X/* additional configurations for shared interrupts boards
X If you have a shared interrupts board, you may have to acknowledge
X interrupts by writing to a special register. The following arrays
X contain the special register addresses and the corresponding values
X that are written to them in response to an interrupt.
X*/
X
X/* array of int ack register addresses
X These registers are written to every time after all interrupt
X sources in all of the UARTs that are tied to the corresponding
X interrupt vector have been cleared.
X Enter the addresses on a per vector base. An address of zero
X disables this feature.
X*/
Xuint fas_int_ack_port [NUM_INT_VECTORS] =
X{
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0
X};
X
X/* array of int ack values
X These values are written to the corresponding int ack register
X in response to an interrupt.
X*/
Xuint fas_int_ack [NUM_INT_VECTORS] =
X{
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0
X};
X
X/* NOTHING NEEDS TO BE CHANGED BELOW THIS LINE.
X ============================================
X*/
X
X/* array of structures to hold all info for a physical minor device */
Xstruct fas_info fas_info [NUM_PHYSICAL_UNITS];
X
X/* array of ttys for logical minor devices */
Xstruct tty fas_tty [NUM_PHYSICAL_UNITS * 2];
X
X/* array of pointers to fas_info structures
X this prevents time consuming multiplications for index calculation
X*/
Xstruct fas_info *fas_info_ptr [NUM_PHYSICAL_UNITS];
X
X/* array of pointers to fas_tty structures
X this prevents time consuming multiplications for index calculation
X*/
Xstruct tty *fas_tty_ptr [NUM_PHYSICAL_UNITS * 2];
SHAR_EOF
true || echo 'restore of space-c1-3 failed'
rm -f _shar_wnt_.tmp
fi
# ============= space-hub6 ==============
if test -f 'space-hub6' -a X"$1" != X"-c"; then
echo 'x - skipping space-hub6 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting space-hub6 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'space-hub6' &&
X/* Async device configuration file for the FAS async driver. */
X
X/* This version is for the Bell Tech HUB-6 card.
X*/
X
X/* FAS was developed by
XUwe Doering INET : gemini at geminix.in-berlin.de
XBillstedter Pfad 17 b UUCP : ...!unido!fub!geminix.in-berlin.de!gemini
X1000 Berlin 20
XGermany
X*/
X
X#if !defined (M_I286)
X#ident "@(#)space.c 2.08"
X#endif
X
X#if defined (XENIX)
X#include "fas.h"
X#else
X#include <sys/fas.h>
X#endif
X
X/* This is the number of devices to be handled by this driver.
X You may define up to 16 devices. If this number is changed
X the arrays below must be filled in accordingly.
X*/
X#define NUM_PHYSICAL_UNITS 6
X
X#if NUM_PHYSICAL_UNITS > MAX_UNITS
X#undef NUM_PHYSICAL_UNITS
X#define NUM_PHYSICAL_UNITS MAX_UNITS
X#endif
X
X/* let the driver know the number of devices */
Xuint fas_physical_units = NUM_PHYSICAL_UNITS;
X
X/* array of base port addresses
X If you deliberately want to force off the FIFOs of a UART you have
X to "or" the NO_FIFO macro to its base port address. This is useful
X for mouse devices where you need immediate response to the mouse
X movement.
X*/
Xulong fas_port [NUM_PHYSICAL_UNITS] =
X{
X 0x303, 0x303, 0x303, 0x303, 0x303, 0x303
X};
X
X/* array of interrupt vectors */
Xuint fas_vec [NUM_PHYSICAL_UNITS] =
X{
X 0x3, 0x3, 0x3, 0x3, 0x3, 0x3
X};
X
X/* initialization sequence for serial card
X This array contains pairs of values of the form:
X
X portaddress, value,
X :
X :
X portaddress, value,
X 0
X
X For every line `value' will be written to `portaddress'. If
X `value' is replaced with the macro `READ_PORT' then a value
X is read from `portaddress' instead. The value itself will be
X discarded. Therefor this makes only sense if the read access
X to the port has a side effect like setting or resetting
X certain flags.
X
X NOTE: This array *must* be terminated with a value of 0
X in the portaddress column!
X*/
Xuint fas_init_seq [] =
X{
X 0
X};
X
X/* initial modem control port info
X This value is ored into the modem control value for each UART. This is
X normaly used to force out2 which is used to enable the interrupts of
X the standard com1 and com2 ports. Several brands of cards have modes
X that allow them to work in compatible mode like com1 and com2 or as a
X shared interrupts card. One of these cards is the AST 4-port card. When
X this card is used in shared interrupts mode out2 must _not_ be set.
X
X Note: This is one of the major trouble-spots with shared interrupts
X cards. Check your manual.
X*/
Xuint fas_mcb [NUM_PHYSICAL_UNITS] =
X{
X 0, 0, 0, 0, 0, 0
X};
X
X/* array of modem control flags
X You can choose which signals to use for modem control. See fas.h
X for possible names and values. Whether or not modem control is
X used is determined by the minor device number at open time.
X*/
Xulong fas_modem [NUM_PHYSICAL_UNITS] =
X{
X EO_DTR | EI_DTR | CA_DCD,
X EO_DTR | EI_DTR | CA_DCD,
X EO_DTR | EI_DTR | CA_DCD,
X EO_DTR | EI_DTR | CA_DCD,
X EO_DTR | EI_DTR | CA_DCD,
X EO_DTR | EI_DTR | CA_DCD
X};
X
X/* array of hardware flow control flags
X You can choose which signals to use for hardware handshake. See fas.h
X for possible names and values. Whether or not hardware handshake is
X used is determined by the minor device number at open time and by the
X RTSFLOW/CTSFLOW termio(7) flags.
X*/
Xulong fas_flow [NUM_PHYSICAL_UNITS] =
X{
X HI_RTS | HO_CTS | HX_RTS,
X HI_RTS | HO_CTS | HX_RTS,
X HI_RTS | HO_CTS | HX_RTS,
X HI_RTS | HO_CTS | HX_RTS,
X HI_RTS | HO_CTS | HX_RTS,
X HI_RTS | HO_CTS | HX_RTS
X};
X
X/* array of control register addresses
X There are serial boards available that have all serial ports
X multiplexed to one address location in order to save I/O address
X space (Bell Tech HUB-6 card etc.). This multiplexing is controlled
X by a special register that needs to be written to before the actual
X port registers can be accessed. This array contains the addresses
X of these special registers.
X Enter the addresses on a per unit base. An address of zero
X disables this feature.
X*/
Xuint fas_ctl_port [NUM_PHYSICAL_UNITS] =
X{
X 0x302, 0x302, 0x302, 0x302, 0x302, 0x302
X};
X
X/* array of control register values
X These values are written to the corresponding control register
X before the first access to the actual port registers. If not only
X entire UART chips (blocks of 8 contiguous addresses) but even the
X single registers of the UART chips need to be multiplexed to one
X address you have to "or" a bit mask (shifted 8 times to the left)
X to the control register value. This mask determines at which bit
X locations the UART chip register number is "xored" into the control
X register value at runtime. This implies that you can also use
X negative logic by setting the bits in the control register value
X to 1 at the locations corresponding to the bit mask.
X*/
Xuint fas_ctl_val [NUM_PHYSICAL_UNITS] =
X{
X 0x700, 0x708, 0x710, 0x718, 0x720, 0x728
X};
X
X/* additional configurations for shared interrupts boards
X If you have a shared interrupts board, you may have to acknowledge
X interrupts by writing to a special register. The following arrays
X contain the special register addresses and the corresponding values
X that are written to them in response to an interrupt.
X*/
X
X/* array of int ack register addresses
X These registers are written to every time after all interrupt
X sources in all of the UARTs that are tied to the corresponding
X interrupt vector have been cleared.
X Enter the addresses on a per vector base. An address of zero
X disables this feature.
X*/
Xuint fas_int_ack_port [NUM_INT_VECTORS] =
X{
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0
X};
X
X/* array of int ack values
X These values are written to the corresponding int ack register
X in response to an interrupt.
X*/
Xuint fas_int_ack [NUM_INT_VECTORS] =
X{
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0, 0, 0
X};
X
X/* NOTHING NEEDS TO BE CHANGED BELOW THIS LINE.
X ============================================
X*/
X
X/* array of structures to hold all info for a physical minor device */
Xstruct fas_info fas_info [NUM_PHYSICAL_UNITS];
X
X/* array of ttys for logical minor devices */
Xstruct tty fas_tty [NUM_PHYSICAL_UNITS * 2];
X
X/* array of pointers to fas_info structures
X this prevents time consuming multiplications for index calculation
X*/
Xstruct fas_info *fas_info_ptr [NUM_PHYSICAL_UNITS];
X
X/* array of pointers to fas_tty structures
X this prevents time consuming multiplications for index calculation
X*/
Xstruct tty *fas_tty_ptr [NUM_PHYSICAL_UNITS * 2];
SHAR_EOF
true || echo 'restore of space-hub6 failed'
rm -f _shar_wnt_.tmp
fi
# ============= update_desc ==============
if test -f 'update_desc' -a X"$1" != X"-c"; then
echo 'x - skipping update_desc (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting update_desc (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'update_desc' &&
X# Update the kernel description file
X
Xgrep '^fas[ ]' $1 > /dev/null 2>&1
Xif [ $? -eq 1 ]
Xthen
X echo 'fas - - io - FAS Serial I/O Driver' >> $1
Xfi
SHAR_EOF
true || echo 'restore of update_desc failed'
rm -f _shar_wnt_.tmp
fi
rm -f _shar_seq_.tmp
echo You have unpacked the last part
exit 0
--
Uwe Doering | INET : gemini at geminix.in-berlin.de
Berlin |----------------------------------------------------------------
Germany | UUCP : ...!unido!fub!geminix.in-berlin.de!gemini
More information about the Alt.sources
mailing list