home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
unix
/
volume27
/
fas-2.12.0
/
part07
< prev
next >
Wrap
Text File
|
1994-01-25
|
61KB
|
1,992 lines
Newsgroups: comp.sources.unix
From: fas@geminix.in-berlin.de (FAS Support Account)
Subject: v27i204: fas-2.12.0 - asynch serial driver for System V, Part07/08
References: <1.759531570.7983@gw.home.vix.com>
Sender: unix-sources-moderator@gw.home.vix.com
Approved: vixie@gw.home.vix.com
Submitted-By: fas@geminix.in-berlin.de (FAS Support Account)
Posting-Number: Volume 27, Issue 204
Archive-Name: fas-2.12.0/part07
#!/bin/sh
# this is fas212pl0.07 (part 7 of a multipart archive)
# 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" != 7; 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#define DF_MSI_ENABLED 0x0080 /* modem status interrupts enabled */
X#define DF_RDI_ENABLED 0x0100 /* receiver data interrupts enabled */
X#define DF_HUP_PROTECT 0x0200 /* protect device after hangup */
X#define DF_NO_OVERRUN 0x0400 /* device is overrun protected */
X#define DF_DEVICE_CONFIGURED 0x0800 /* device is configured */
X#define DF_DEVICE_OPEN 0x1000 /* physical device is open */
X#define DF_DEVICE_LOCKED 0x2000 /* physical device locked */
X#define DF_DO_HANGUP 0x4000 /* delayed hangup request */
X#define DF_DO_BREAK 0x8000 /* delayed break request */
X
X/* define the flow control status flags */
X
X#define FF_HWO_HANDSHAKE 0x0001 /* output hw handshake enabled */
X#define FF_HWI_HANDSHAKE 0x0002 /* input hw handshake enabled */
X#define FF_HDX_HANDSHAKE 0x0004 /* output hdx hw handshake enabled */
X#define FF_HWO_STOPPED 0x0008 /* output stopped by hw handshake */
X#define FF_HWI_STARTED 0x0010 /* input started by hw handshake */
X#define FF_HDX_STARTED 0x0020 /* output buffer contains characters */
X#define FF_CARR_STOPPED 0x0040 /* output stopped by carrier detect */
X#define FF_SWO_STOPPED 0x0080 /* output stopped by sw flow control */
X#define FF_SWI_STOPPED 0x0100 /* input stopped by sw flow control */
X#define FF_SW_FC_REQ 0x0200 /* sw input flow control request */
X#define FF_RXFER_STOPPED 0x0400 /* rxfer function stopped */
X#define FF_NEW_CTSRTS 0x0800 /* CTS/RTSFLOW do fdx hw handshake */
X#define FF_DEF_HHO_LOW 0x1000 /* hw handshake outp. is low by deflt */
X#define FF_OUTPUT_BUSY 0x2000 /* output buffers/circuits are busy */
X#define FF_CD_ENABLED 0x4000 /* carrier detect enabled */
X#define FF_CARRIER_ON 0x8000 /* carrier detect */
X
X/* define the scheduled events flags */
X
X#define EF_DO_RXFER 0x0001 /* rxfer function request */
X#define EF_DO_XXFER 0x0002 /* xxfer function request */
X#define EF_DO_BRKINT 0x0004 /* break int request */
X#define EF_DO_MPROC 0x0008 /* mproc function request */
X#define EF_RESET_DELTA_BITS 0x0010 /* reset accumulated msr delta bits */
X#define EF_WAKEUP_VPIX 0x0020 /* wakeup VP/ix until rawq is empty */
X
X/* define the device types
X The symbolic constant for the device type that allows the lowest interrupt
X latency (usually a 16450) has the lowest numerical value. Devices that
X allow a higher interrupt latency have a higher numerical value. With this
X ordering the device type can be used as a priority indicator during the
X interrupt processing, that is, devices that can't hold the received
X characters for very long are serviced first while devices with FIFOs
X are serviced only after all devices with higher priority are done.
X Usually, the following rule applies: The longer the FIFOs, the higher
X the assigned device type value should be, and the lower the interrupt
X priority will be.
X*/
X
X#define NUMBER_OF_TYPES 3 /* adjust this to the highest */
X /* device type + 1 */
X#define TYPE_NS16450 0
X#define TYPE_I82510 1
X#define TYPE_NS16550A 2
X
X/* modifier flags that can be set in fas_modify [] (`space.c') */
X
X#define NO_TEST 0x0001 /* don't test the UART */
X#define NO_HUP_PROTECT 0x0002 /* don't protect device after hangup */
X#define NO_OVERRUN 0x0004 /* device is overrun protected */
X#define NEW_CTSRTS 0x0008 /* CTS/RTSFLOW do fdx hw handshake */
X
X/* read from port rather than write to it (for fas_init_seq [] and
X fas_int_ack_seq [] in `space.c')
X*/
X
X#define READ_PORT 0x0100
X
X/* define the FIFO operating modes for the fas_fifo_ctl array in space.c
X (FIFO_POINTER_DEV and FIFO_TRIGGER_* apply to NS16550A UART, only)
X*/
X
X#define FIFO_DEFAULT 0 /* default mode (OS dependent) */
X#define FIFO_OFF 1 /* 16450 compatible mode */
X#define FIFO_EMUL_NS16450 2 /* emulate 16450 in FIFO mode */
X#define FIFO_POINTER_DEV 3 /* pointer device (mouse etc.) */
X#define FIFO_TRIGGER_1 4 /* set trigger level to 1 char */
X#define FIFO_TRIGGER_4 5 /* set trigger level to 4 chars */
X#define FIFO_TRIGGER_8 6 /* set trigger level to 8 chars */
X#define FIFO_TRIGGER_14 7 /* set trigger level to 14 chars */
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/* UART related variables */
X
X#define BT_SELECT (fip->port [0].p.val)
X#define IER (fip->port [1].p.val)
X#define FCR (fip->port [2].p.val)
X#define LCR (fip->port [3].p.val)
X#define MCR (fip->port [4].p.val)
X#define NEW_MSR (fip->port [5].p.val)
X#define MSR (fip->port [6].p.val)
X#define DEVICE_TYPE (fip->ctl_port.p.val1)
X#define INT_PRIO (fip->ctl_port.p.val2)
X
X/* ring buffer management */
X
X#define RECV_SW_LOW_WATER (fip->recv_sw_low_water)
X#define RECV_SW_HIGH_WATER (fip->recv_sw_high_water)
X#define RECV_HW_LOW_WATER (fip->recv_hw_low_water)
X#define RECV_HW_HIGH_WATER (fip->recv_hw_high_water)
X#if defined (M_I286)
X#define RECV_BUFF_SIZE RECV_BUFF_MAX_SIZE
X#define RECV_BUFF_BEGIN (&fip->recv_buffer [0])
X#define RECV_BUFF_END (&fip->recv_buffer [RECV_BUFF_MAX_SIZE])
X#define XMIT_BUFF_SIZE XMIT_BUFF_MAX_SIZE
X#define XMIT_BUFF_BEGIN (&fip->xmit_buffer [0])
X#define XMIT_BUFF_END (&fip->xmit_buffer [XMIT_BUFF_MAX_SIZE])
X#else
X#define RECV_BUFF_SIZE (fip->recv_buff_size)
X#define RECV_BUFF_BEGIN (fip->recv_buff_begin)
X#define RECV_BUFF_END (fip->recv_buff_end)
X#define XMIT_BUFF_SIZE (fip->xmit_buff_size)
X#define XMIT_BUFF_BEGIN (fip->xmit_buff_begin)
X#define XMIT_BUFF_END (fip->xmit_buff_end)
X#endif
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
X#define MC_SET_LOOPBACK 0x10
X
X#define MC_ANY_CONTROL (MC_SET_DTR | MC_SET_RTS | MC_SET_OUT1 | MC_SET_OUT2)
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/* 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_INIT_CMD (NS_FIFO_SIZE_1 | NS_FIFO_ENABLE \
X | NS_FIFO_CLR_RECV | 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 baud rate dependent informations. */
X
Xstruct fas_speed
X{
X union {
X uint ctime; /* kernel clock ticks until xmitter is empty */
X uint max_rate; /* max baud rate index */
X } i;
X union { /* UART counter divisor value */
X struct {
X unchar low; /* low byte */
X unchar high; /* high byte */
X } b;
X ushort val;
X } div;
X ushort xbuf_size; /* xmit buffer size that fits the baud rate */
X};
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 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_internals
X{
X struct tty *tty; /* the tty structure */
X struct fas_internals *next_int_user; /* link to next struct */
X struct fas_internals *prev_int_user; /* link to previous struct */
X uint device_flags; /* flags about the device state */
X uint flow_flags; /* flags about the flow control state */
X uint event_flags; /* flags about scheduled events */
X uint o_state; /* current open state */
X uint po_state; /* previous open state */
X uint iflag; /* current terminal input flags */
X uint cflag; /* current terminal hardware control flags */
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 union { /* muliplexer control port */
X uint addr;
X struct {
X ushort addr;
X unchar val1;
X unchar val2;
X } p;
X } ctl_port;
X union { /* uart port addresses and control values */
X uint addr;
X struct {
X ushort addr;
X unchar ctl;
X unchar val;
X } p;
X } port [NUM_UART_REGS];
X int timeout_idx; /* timeout index for untimeout () */
X uint rxfer_timeout; /* timeout counter for recv char transfer */
X unchar start_char; /* start character for software flow control */
X unchar stop_char; /* stop character for software flow control */
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#endif
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 uint xmit_fifo_size; /* transmitter FIFO size */
X uint xmit_ring_max; /* transmitter ring buffer max fill level */
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 uint recv_sw_low_water; /* recv software fc low water level */
X uint recv_sw_high_water; /* recv software fc high water level */
X uint recv_hw_low_water; /* recv hardware fc low water level */
X uint recv_hw_high_water; /* recv hardware fc high water level */
X#if defined (M_I286)
X unchar recv_buffer [RECV_BUFF_MAX_SIZE]; /* recv ring buf */
X unchar xmit_buffer [XMIT_BUFF_MAX_SIZE]; /* xmit ring buf */
X#else
X uint recv_buff_size; /* recv ring buffer size */
X unchar *recv_buff_begin; /* recv ring buffer begin ptr */
X unchar *recv_buff_end; /* recv ring buffer end ptr */
X uint xmit_buff_size; /* xmit ring buffer size */
X unchar *xmit_buff_begin; /* xmit ring buffer begin ptr */
X unchar *xmit_buff_end; /* xmit ring buffer end ptr */
X#endif
X};
SHAR_EOF
echo 'File fas.h is complete' &&
true || echo 'restore of fas.h 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 -t 60 ttyFM00 9600
XF1:23:off:/etc/getty -t 60 ttyFM01 9600
XF2:23:off:/etc/getty -t 60 ttyFM02 9600
XF3:23:off:/etc/getty -t 60 ttyFM03 9600
XF4:23:off:/etc/getty -t 60 ttyFM04 9600
XF5:23:off:/etc/getty -t 60 ttyFM05 9600
SHAR_EOF
true || echo 'restore of i_fas-ast4c12 failed'
rm -f _shar_wnt_.tmp
fi
# ============= i_fas-ast8c12 ==============
if test -f 'i_fas-ast8c12' -a X"$1" != X"-c"; then
echo 'x - skipping i_fas-ast8c12 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting i_fas-ast8c12 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'i_fas-ast8c12' &&
XF0:23:off:/etc/getty -t 60 ttyFM00 9600
XF1:23:off:/etc/getty -t 60 ttyFM01 9600
XF2:23:off:/etc/getty -t 60 ttyFM02 9600
XF3:23:off:/etc/getty -t 60 ttyFM03 9600
XF4:23:off:/etc/getty -t 60 ttyFM04 9600
XF5:23:off:/etc/getty -t 60 ttyFM05 9600
XF6:23:off:/etc/getty -t 60 ttyFM06 9600
XF7:23:off:/etc/getty -t 60 ttyFM07 9600
XF8:23:off:/etc/getty -t 60 ttyFM08 9600
XF9:23:off:/etc/getty -t 60 ttyFM09 9600
SHAR_EOF
true || echo 'restore of i_fas-ast8c12 failed'
rm -f _shar_wnt_.tmp
fi
# ============= i_fas-c123 ==============
if test -f 'i_fas-c123' -a X"$1" != X"-c"; then
echo 'x - skipping i_fas-c123 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting i_fas-c123 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'i_fas-c123' &&
XF0:23:off:/etc/getty -t 60 ttyFM00 9600
XF1:23:off:/etc/getty -t 60 ttyFM01 9600
XF2:23:off:/etc/getty -t 60 ttyFM02 9600
SHAR_EOF
true || echo 'restore of i_fas-c123 failed'
rm -f _shar_wnt_.tmp
fi
# ============= i_fas-gen8c12 ==============
if test -f 'i_fas-gen8c12' -a X"$1" != X"-c"; then
echo 'x - skipping i_fas-gen8c12 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting i_fas-gen8c12 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'i_fas-gen8c12' &&
XF0:23:off:/etc/getty -t 60 ttyFM00 9600
XF1:23:off:/etc/getty -t 60 ttyFM01 9600
XF2:23:off:/etc/getty -t 60 ttyFM02 9600
XF3:23:off:/etc/getty -t 60 ttyFM03 9600
XF4:23:off:/etc/getty -t 60 ttyFM04 9600
XF5:23:off:/etc/getty -t 60 ttyFM05 9600
XF6:23:off:/etc/getty -t 60 ttyFM06 9600
XF7:23:off:/etc/getty -t 60 ttyFM07 9600
XF8:23:off:/etc/getty -t 60 ttyFM08 9600
XF9:23:off:/etc/getty -t 60 ttyFM09 9600
SHAR_EOF
true || echo 'restore of i_fas-gen8c12 failed'
rm -f _shar_wnt_.tmp
fi
# ============= i_fas-hub6c12 ==============
if test -f 'i_fas-hub6c12' -a X"$1" != X"-c"; then
echo 'x - skipping i_fas-hub6c12 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting i_fas-hub6c12 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'i_fas-hub6c12' &&
XF0:23:off:/etc/getty -t 60 ttyFM00 9600
XF1:23:off:/etc/getty -t 60 ttyFM01 9600
XF2:23:off:/etc/getty -t 60 ttyFM02 9600
XF3:23:off:/etc/getty -t 60 ttyFM03 9600
XF4:23:off:/etc/getty -t 60 ttyFM04 9600
XF5:23:off:/etc/getty -t 60 ttyFM05 9600
XF6:23:off:/etc/getty -t 60 ttyFM06 9600
XF7:23:off:/etc/getty -t 60 ttyFM07 9600
SHAR_EOF
true || echo 'restore of i_fas-hub6c12 failed'
rm -f _shar_wnt_.tmp
fi
# ============= i_fas-use4c12 ==============
if test -f 'i_fas-use4c12' -a X"$1" != X"-c"; then
echo 'x - skipping i_fas-use4c12 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting i_fas-use4c12 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'i_fas-use4c12' &&
XF0:23:off:/etc/getty -t 60 ttyFM00 9600
XF1:23:off:/etc/getty -t 60 ttyFM01 9600
XF2:23:off:/etc/getty -t 60 ttyFM02 9600
XF3:23:off:/etc/getty -t 60 ttyFM03 9600
XF4:23:off:/etc/getty -t 60 ttyFM04 9600
XF5:23:off:/etc/getty -t 60 ttyFM05 9600
SHAR_EOF
true || echo 'restore of i_fas-use4c12 failed'
rm -f _shar_wnt_.tmp
fi
# ============= m_fas ==============
if test -f 'm_fas' -a X"$1" != X"-c"; then
echo 'x - skipping m_fas (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting m_fas (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'm_fas' &&
Xfas Iocrwi iHct fas 0 3 1 16 -1
SHAR_EOF
true || echo 'restore of m_fas 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-ast8c12 ==============
if test -f 'n_fas-ast8c12' -a X"$1" != X"-c"; then
echo 'x - skipping n_fas-ast8c12 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting n_fas-ast8c12 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'n_fas-ast8c12' &&
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 ttyF06 c 86
Xfas ttyF07 c 87
Xfas ttyF08 c 88
Xfas ttyF09 c 89
Xfas ttyFM00 c 208
Xfas ttyFM01 c 209
Xfas ttyFM02 c 210
Xfas ttyFM03 c 211
Xfas ttyFM04 c 212
Xfas ttyFM05 c 213
Xfas ttyFM06 c 214
Xfas ttyFM07 c 215
Xfas ttyFM08 c 216
Xfas ttyFM09 c 217
SHAR_EOF
true || echo 'restore of n_fas-ast8c12 failed'
rm -f _shar_wnt_.tmp
fi
# ============= n_fas-c123 ==============
if test -f 'n_fas-c123' -a X"$1" != X"-c"; then
echo 'x - skipping n_fas-c123 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting n_fas-c123 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'n_fas-c123' &&
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-c123 failed'
rm -f _shar_wnt_.tmp
fi
# ============= n_fas-gen8c12 ==============
if test -f 'n_fas-gen8c12' -a X"$1" != X"-c"; then
echo 'x - skipping n_fas-gen8c12 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting n_fas-gen8c12 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'n_fas-gen8c12' &&
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 ttyF06 c 86
Xfas ttyF07 c 87
Xfas ttyF08 c 88
Xfas ttyF09 c 89
Xfas ttyFM00 c 208
Xfas ttyFM01 c 209
Xfas ttyFM02 c 210
Xfas ttyFM03 c 211
Xfas ttyFM04 c 212
Xfas ttyFM05 c 213
Xfas ttyFM06 c 214
Xfas ttyFM07 c 215
Xfas ttyFM08 c 216
Xfas ttyFM09 c 217
SHAR_EOF
true || echo 'restore of n_fas-gen8c12 failed'
rm -f _shar_wnt_.tmp
fi
# ============= n_fas-hub6c12 ==============
if test -f 'n_fas-hub6c12' -a X"$1" != X"-c"; then
echo 'x - skipping n_fas-hub6c12 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting n_fas-hub6c12 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'n_fas-hub6c12' &&
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 ttyF06 c 86
Xfas ttyF07 c 87
Xfas ttyFM00 c 208
Xfas ttyFM01 c 209
Xfas ttyFM02 c 210
Xfas ttyFM03 c 211
Xfas ttyFM04 c 212
Xfas ttyFM05 c 213
Xfas ttyFM06 c 214
Xfas ttyFM07 c 215
SHAR_EOF
true || echo 'restore of n_fas-hub6c12 failed'
rm -f _shar_wnt_.tmp
fi
# ============= n_fas-use4c12 ==============
if test -f 'n_fas-use4c12' -a X"$1" != X"-c"; then
echo 'x - skipping n_fas-use4c12 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting n_fas-use4c12 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'n_fas-use4c12' &&
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-use4c12 failed'
rm -f _shar_wnt_.tmp
fi
# ============= optim_att.awk ==============
if test -f 'optim_att.awk' -a X"$1" != X"-c"; then
echo 'x - skipping optim_att.awk (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting optim_att.awk (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'optim_att.awk' &&
X# optim_att.awk
X#
X# filter AT&T assembler file format
X#
X# Replace all calls to outb(), inb() and fas_mem_copy() with the necessary
X# assembler mnemonics and do some optimizations for bit tests.
X
XBEGIN {
X nl = 0
X prevline = ""
X}
X
X{
X if ($1 == "popl") {
X print prevline
X if ($2 == "%ecx" && split(prevline, argsp) > 0 \
X && argsp[1] == "call") {
X prevline = "\taddl\t$4,%esp"
X } else {
X prevline = $0
X }
X next
X } else if ($1 == "pushl") {
X if ($2 == "%eax" && split(prevline, argsp) == 2 \
X && argsp[1] == "movl" && argsp[2] == "%esp,%ebp") {
X print prevline
X prevline = "\tsubl\t$4,%esp"
X next
X }
X lines[nl++] = $0
X getline
X if ($1 == "pushl") {
X lines[nl++] = $0
X getline
X if ($1 == "call" && $2 == "outb") {
X lines[nl++] = $0
X getline
X if ($1 == "addl" && $2 == "$8,%esp") {
X split(lines[0], args0)
X split(lines[1], args1)
X if (args1[2] == "%eax") {
X print prevline
X if (args0[2] == "%edx") {
X print "\tmovl\t%eax,%ecx"
X print "\tmovl\t%edx,%eax"
X print "\tmovl\t%ecx,%edx"
X } else {
X print "\tmovl\t%eax,%edx"
X print "\tmovl\t" args0[2] ",%eax"
X }
X } else {
X if (args0[2] == "%eax") {
X res = 0
X if (prevline ~ /,%eax$/) {
X argsline = substr(prevline, 1, \
X length(prevline) - 5) \
X " %eax"
X split(argsline, argsp)
X res = 1
X }
X if (res && argsp[3] == "%eax") {
X if (argsp[1] == "movzbl" \
X || argsp[1] == "movsbl") {
X if (argsp[2] != "%al") {
X print "\tmovb\t" argsp[2] ",%al"
X }
X } else if (argsp[1] == "movzwl" \
X || argsp[1] == "movswl") {
X if (argsp[2] != "%ax") {
X if (argsp[2] ~ /^%/) {
X print "\tmovw\t" argsp[2] ",%ax"
X } else {
X print "\tmovb\t" argsp[2] ",%al"
X }
X }
X } else {
X print prevline
X }
X } else {
X print prevline
X }
X } else {
X print prevline
X if (args0[2] ~ /^%/) {
X print "\tmovl\t" args0[2] ",%eax"
X } else {
X print "\tmovb\t" args0[2] ",%al"
X }
X }
X if (args1[2] != "%edx") {
X print "\tmovl\t" args1[2] ",%edx"
X }
X }
X prevline = "\toutb\t(%dx)"
X nl = 0
X next
X }
X } else if ($1 == "pushl") {
X lines[nl++] = $0
X getline
X if ($1 == "call" && $2 == "fas_mem_copy") {
X lines[nl++] = $0
X getline
X if ($1 == "addl" && $2 == "$12,%esp") {
X split(lines[0], args0)
X split(lines[1], args1)
X split(lines[2], args2)
X print prevline
X print "\tmovl\t" args2[2] ",%edi"
X print "\tmovl\t" args1[2] ",%esi"
X reg = ""
X if (args0[2] != "%ecx") {
X if (args0[2] ~ /^[%$]/) {
X reg = args0[2]
X }
X print "\tmovl\t" args0[2] ",%ecx"
X }
X print "\tcld"
X if (reg == "") {
X reg = "%eax"
X print "\tmovl\t%ecx,%eax"
X }
X print "\tshrl\t$2,%ecx"
X print "\trep"
X print "\tmovsl"
X print "\tmovl\t" reg ",%ecx"
X print "\tandl\t$3,%ecx"
X print "\trep"
X prevline = "\tmovsb"
X nl = 0
X next
X }
X }
X }
X } else if ($1 == "call" && $2 == "inb") {
X lines[nl++] = $0
X getline
X if ($1 == "popl" || ($1 == "addl" && $2 == "$4,%esp")) {
X split(lines[0], args0)
X print prevline
X if (args0[2] != "%edx") {
X print "\tmovl\t" args0[2] ",%edx"
X }
X print "\txorl\t%eax,%eax"
X prevline = "\tinb\t(%dx)"
X nl = 0
X next
X }
X }
X
X print prevline
X prevline = $0
X
X for (i = 0; i < nl; i++) {
X print lines[i]
X }
X nl = 0
X } else {
X print prevline
X prevline = $0
X }
X
X cmd = substr($1, 1, length($1) - 1)
X class = substr($1, length($1))
X
X if (cmd == "test" && (class == "l" || class == "w") && $2 ~ /^\$/) {
X split($2, args, ",")
X args[2] = substr($2, length(args[1]) + 2)
X if (args[2] ~ /^%.*x$/) {
X reg = substr(args[2], length(args[2]) - 1, 1)
X } else {
X reg = ""
X }
X if (reg != "" || args[2] !~ /^%/) {
X val = substr(args[1], 2) + 0
X if (class == "w" && val <= -1 && val >= -65536) {
X val += 65536
X }
X if (val >= 0 && val <= 255) {
X if (reg != "") {
X prevline = "\t" cmd "b\t" args[1] ",%" reg "l"
X } else {
X prevline = "\t" cmd "b\t" args[1] "," args[2]
X }
X } else if (val >= 0 && val <= 65535 && (val % 256) == 0) {
X if (reg != "") {
X prevline = "\t" cmd "b\t$" val / 256 ",%" reg "h"
X } else if (args[2] ~ /^[-(]/) {
X prevline = "\t" cmd "b\t$" val / 256 ",1" args[2]
X } else {
X prevline = "\t" cmd "b\t$" val / 256 ",1+" args[2]
X }
X }
X }
X }
X}
X
XEND {
X print prevline
X}
SHAR_EOF
true || echo 'restore of optim_att.awk failed'
rm -f _shar_wnt_.tmp
fi
# ============= os_dep_update ==============
if test -f 'os_dep_update' -a X"$1" != X"-c"; then
echo 'x - skipping os_dep_update (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting os_dep_update (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'os_dep_update' &&
X# update OS dependent defines
X
Xif [ $# -lt 1 ]
Xthen
X echo 'illegal numer of parameters' >&2
X exit 1
Xfi
X
Xfname=$1
Xshift
X
Xfor flag in $*
Xdo
X echo "#undef ${flag}"
X echo "#define ${flag}"
Xdone > ${fname}.upd
X
Xsed -e '1,/@@OS_DEP_BEGIN@@/d;/@@OS_DEP_END@@/,$d' ${fname} > ${fname}.cur
Xcmp -s ${fname}.cur ${fname}.upd
Xres=$?
X
Xif [ ${res} -ne 1 ]
Xthen
X rm -f ${fname}.cur ${fname}.upd
X exit ${res}
Xfi
X
Xsed -e '1,/@@OS_DEP_BEGIN@@/{
X /@@OS_DEP_BEGIN@@/r '${fname}.upd'
X b
X }
X /@@OS_DEP_END@@/,$b
X d' ${fname} > ${fname}.tmp
X
Xmv -f ${fname}.tmp ${fname}
Xrm -f ${fname}.cur ${fname}.upd
X
Xexit 0
SHAR_EOF
true || echo 'restore of os_dep_update 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 5 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-ast8c12 ==============
if test -f 's_fas-ast8c12' -a X"$1" != X"-c"; then
echo 'x - skipping s_fas-ast8c12 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting s_fas-ast8c12 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 's_fas-ast8c12' &&
Xfas Y 4 7 1 5 2a0 2bf 0 0
Xfas Y 4 7 1 9 1a0 1bf 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-ast8c12 failed'
rm -f _shar_wnt_.tmp
fi
# ============= s_fas-c123 ==============
if test -f 's_fas-c123' -a X"$1" != X"-c"; then
echo 'x - skipping s_fas-c123 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting s_fas-c123 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 's_fas-c123' &&
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 5 3e8 3ef 0 0
SHAR_EOF
true || echo 'restore of s_fas-c123 failed'
rm -f _shar_wnt_.tmp
fi
# ============= s_fas-gen8c12 ==============
if test -f 's_fas-gen8c12' -a X"$1" != X"-c"; then
echo 'x - skipping s_fas-gen8c12 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting s_fas-gen8c12 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 's_fas-gen8c12' &&
Xfas Y 8 7 1 5 100 13f 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-gen8c12 failed'
rm -f _shar_wnt_.tmp
fi
# ============= s_fas-hub6c12 ==============
if test -f 's_fas-hub6c12' -a X"$1" != X"-c"; then
echo 'x - skipping s_fas-hub6c12 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting s_fas-hub6c12 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 's_fas-hub6c12' &&
Xfas Y 6 7 1 5 302 308 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-hub6c12 failed'
rm -f _shar_wnt_.tmp
fi
# ============= s_fas-use4c12 ==============
if test -f 's_fas-use4c12' -a X"$1" != X"-c"; then
echo 'x - skipping s_fas-use4c12 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting s_fas-use4c12 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 's_fas-use4c12' &&
Xfas Y 4 7 1 15 2c0 2df 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-use4c12 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/* Device configuration file for the FAS async driver. */
X
X/* This version is for the AST 4-port card in shared interrupts mode plus
X the standard COM1 and COM2 ports.
X*/
X
X/* FAS was developed by
XUwe Doering <fas@geminix.in-berlin.de>
XBillstedter Pfad 17 b
X13591 Berlin
XGermany
X*/
X
X#if !defined (M_I286)
X#ident "@(#)space.c 2.12"
X#endif
X
X#if defined (LOCAL_INCLUDE)
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 If it is changed, make sure that the initializer parts of all arrays
X dimensioned with `NUM_PHYSICAL_UNITS' have a corresponding number of
X entries. You may define up to 16 devices.
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/* array of base port addresses
X These values are the base i/o addresses of the UART chips.
X*/
Xuint fas_port [NUM_PHYSICAL_UNITS] =
X{
X 0x2a0, 0x2a8, 0x2b0, 0x2b8,
X 0x3f8, 0x2f8
X};
X
X#if defined (SCO) || defined (XENIX)
X/* array of interrupt vectors (SCO UNIX and Xenix, only)
X FAS doesn't need informations about interrupt vectors during normal
X operation. Therefore, the only function of these values is to be
X displayed by the FAS boot message. So if you want vector infos at
X boot time you can enter the vector numbers here. But make sure that
X the values correspond with the entries in the kernel config files.
X A value of `-1' means that no vector number is displayed for the
X respective port.
X Users of other UNIX flavors can savely ignore this array.
X*/
Xint fas_vec [NUM_PHYSICAL_UNITS] =
X{
X -1, -1, -1, -1,
X -1, -1
X};
X#endif
X
X/* array of modifier flags
X You can modify certain features of each port. See fas.h for possible
X names and values.
X*/
Xuint fas_modify [NUM_PHYSICAL_UNITS] =
X{
X 0, 0, 0, 0,
X 0, 0
X};
X
X/* array of FIFO operating mode values
X These values select the mode to which the UART FIFOs are set when
X a port is activated. For device types that don't have FIFOs the
X respective value is ignored, so you can set up this array for
X FIFO operation now and add the FIFO UARTs later. There are several
X operating modes predefined. See fas.h for possible names and values.
X*/
Xuint fas_fifo_ctl [NUM_PHYSICAL_UNITS] =
X{
X FIFO_DEFAULT,
X FIFO_DEFAULT,
X FIFO_DEFAULT,
X FIFO_DEFAULT,
X FIFO_DEFAULT,
X FIFO_DEFAULT
X};
X
X/* initialization sequence for serial cards
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. Therefore, 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/* interrupt acknowledge sequence for serial cards
X This sequence is executed by the fasintr () function after all pending
X interrupts on all serial cards have been processed. The contents of this
X array has the same form as in the fas_init_seq [] array above.
X*/
Xuint fas_int_ack_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,
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/* This is the number of available port layout tables.
X If this number is changed the arrays below must be filled
X in accordingly.
X*/
X#define NUM_PORT_LAYOUTS 1
X
X/* array of port layout table selection values
X These values select the port layout table in fas_layout [] []
X that is used for the respective port.
X*/
Xuint fas_pl_select [NUM_PHYSICAL_UNITS] =
X{
X 0, 0, 0, 0,
X 0, 0
X};
X
X/* array of port layout tables
X This two-dimensional array contains the base port offsets of the
X seven UART registers used by FAS. There are one or more port layout
X tables that are selected by the values in fas_pl_select [].
X
X Each port layout table is arranged like this (the position of the values
X corresponds to the respective UART register acronym):
X
X RBR/THR, IER, IIR/FCR, LCR, MCR, LSR, MSR
X*/
Xuint fas_layout [NUM_PORT_LAYOUTS] [NUM_UART_REGS] =
X{
X { /* table 0 */
X 0, 1, 2, 3, 4, 5, 6
X }
X};
X
X/* This is the number of available baud rate tables.
X You may define up to 256 tables. If this number is changed
X the arrays below must be filled in accordingly.
X*/
X#define NUM_BAUD_TABLES 2
X
X#if NUM_BAUD_TABLES > MAX_BAUD_TABLES
X#undef NUM_BAUD_TABLES
X#define NUM_BAUD_TABLES MAX_BAUD_TABLES
X#endif
X
X/* array of baud rate table selection values
X These values select the baud rate table in fas_baud [] []
X that is used for the respective port.
X*/
Xuint fas_bt_select [NUM_PHYSICAL_UNITS] =
X{
X 0, 0, 0, 0,
X 0, 0
X};
X
X/* array of baud rate tables
X This two-dimensional array contains the 15 possible UNIX baud rates
X plus the baud rate base that these 15 baud rates are derived from. There
X are one or more baud rate tables that are selected by the values in
X fas_bt_select [].
X
X The values in the baud rate tables are multiplied by ten to allow an
X accuracy of 0.1 baud. The baud rate base can be computed by dividing the
X external oscillator frequency (fed to the UART) by 16, and afterwards it
X is also mutiplied by ten to make its scale match the scale of the baud
X rate values.
X
X Each baud rate table is arranged like this (the position of the values
X corresponds to the respective baud rate symbol):
X
X BASE, B50, B75, B110,
X B134, B150, B200, B300,
X B600, B1200, B1800, B2400,
X B4800, B9600, B19200, B38400
X*/
Xulong fas_baud [NUM_BAUD_TABLES] [CBAUD + 1] =
X{
X { /* table 0 */
X 1152000, 500, 750, 1100,
X 1345, 1500, 2000, 3000,
X 6000, 12000, 18000, 24000,
X 48000, 96000, 192000, 384000
X },
X { /* table 1 */
X 1152000, 500, 750, 1100,
X 1345, 1500, 2000, 3000,
X 6000, 12000, 18000, 24000,
X 48000, 96000, 576000, 1152000
X }
X};
X
X/* NOTHING NEEDS TO BE CHANGED BELOW THIS LINE.
X ============================================
X*/
X
X/* let the driver know the number of devices */
Xuint fas_physical_units = NUM_PHYSICAL_UNITS;
X
X/* let the driver know the number of port layout tables */
Xuint fas_port_layouts = NUM_PORT_LAYOUTS;
X
X/* let the driver know the number of baud rate tables */
Xuint fas_baud_tables = NUM_BAUD_TABLES;
X
X/* array of structures to hold all info for a physical minor device */
Xstruct fas_internals fas_internals [NUM_PHYSICAL_UNITS];
X
X/* array of tty structures for logical devices */
Xstruct tty fas_tty [NUM_PHYSICAL_UNITS * 2];
X
X/* array of fas_speed structure arrays that contain baud rate dependent
X informations
X*/
Xstruct fas_speed fas_speed [NUM_BAUD_TABLES] [CBAUD + 1];
X
X/* array of pointers to fas_internals structures
X this prevents time consuming multiplications for index calculation
X*/
Xstruct fas_internals *fas_internals_ptr [NUM_PHYSICAL_UNITS];
X
X/* array of pointers to tty structures
X this prevents time consuming multiplications for index calculation
X*/
Xstruct tty *fas_tty_ptr [NUM_PHYSICAL_UNITS * 2];
X
X/* array of pointers to fas_speed structure arrays
X this prevents time consuming multiplications for index calculation
X*/
Xstruct fas_speed *fas_speed_ptr [NUM_BAUD_TABLES];
X
X/* array of pointers to the baud rate tables in fas_baud [] []
X this prevents time consuming multiplications for index calculation
X*/
Xulong *fas_baud_ptr [NUM_BAUD_TABLES];
SHAR_EOF
true || echo 'restore of space-ast4c12 failed'
rm -f _shar_wnt_.tmp
fi
# ============= space-ast8c12 ==============
if test -f 'space-ast8c12' -a X"$1" != X"-c"; then
echo 'x - skipping space-ast8c12 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting space-ast8c12 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'space-ast8c12' &&
X/* Device configuration file for the FAS async driver. */
X
X/* This version is for two AST 4-port cards (or a card with two AST 4-port
X blocks on a single PCB) in shared interrupts mode plus the standard COM1
X and COM2 ports.
X*/
X
X/* FAS was developed by
XUwe Doering <fas@geminix.in-berlin.de>
XBillstedter Pfad 17 b
X13591 Berlin
XGermany
X*/
X
X#if !defined (M_I286)
X#ident "@(#)space.c 2.12"
X#endif
X
X#if defined (LOCAL_INCLUDE)
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 If it is changed, make sure that the initializer parts of all arrays
X dimensioned with `NUM_PHYSICAL_UNITS' have a corresponding number of
X entries. You may define up to 16 devices.
X*/
X#define NUM_PHYSICAL_UNITS 10
X
X#if NUM_PHYSICAL_UNITS > MAX_UNITS
X#undef NUM_PHYSICAL_UNITS
X#define NUM_PHYSICAL_UNITS MAX_UNITS
X#endif
X
X/* array of base port addresses
X These values are the base i/o addresses of the UART chips.
X*/
Xuint fas_port [NUM_PHYSICAL_UNITS] =
X{
X 0x2a0, 0x2a8, 0x2b0, 0x2b8,
X 0x1a0, 0x1a8, 0x1b0, 0x1b8,
X 0x3f8, 0x2f8
X};
X
X#if defined (SCO) || defined (XENIX)
X/* array of interrupt vectors (SCO UNIX and Xenix, only)
X FAS doesn't need informations about interrupt vectors during normal
X operation. Therefore, the only function of these values is to be
X displayed by the FAS boot message. So if you want vector infos at
X boot time you can enter the vector numbers here. But make sure that
X the values correspond with the entries in the kernel config files.
X A value of `-1' means that no vector number is displayed for the
X respective port.
X Users of other UNIX flavors can savely ignore this array.
X*/
Xint fas_vec [NUM_PHYSICAL_UNITS] =
X{
X -1, -1, -1, -1,
X -1, -1, -1, -1,
X -1, -1
X};
X#endif
X
X/* array of modifier flags
X You can modify certain features of each port. See fas.h for possible
X names and values.
X*/
Xuint fas_modify [NUM_PHYSICAL_UNITS] =
X{
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0
X};
X
X/* array of FIFO operating mode values
X These values select the mode to which the UART FIFOs are set when
X a port is activated. For device types that don't have FIFOs the
X respective value is ignored, so you can set up this array for
X FIFO operation now and add the FIFO UARTs later. There are several
X operating modes predefined. See fas.h for possible names and values.
X*/
Xuint fas_fifo_ctl [NUM_PHYSICAL_UNITS] =
X{
X FIFO_DEFAULT,
X FIFO_DEFAULT,
X FIFO_DEFAULT,
X FIFO_DEFAULT,
X FIFO_DEFAULT,
X FIFO_DEFAULT,
X FIFO_DEFAULT,
X FIFO_DEFAULT,
X FIFO_DEFAULT,
X FIFO_DEFAULT
X};
X
X/* initialization sequence for serial cards
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. Therefore, 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 0x1bf, 0x80,
X 0
X};
X
X/* interrupt acknowledge sequence for serial cards
X This sequence is executed by the fasintr () function after all pending
X interrupts on all serial cards have been processed. The contents of this
X array has the same form as in the fas_init_seq [] array above.
X*/
Xuint fas_int_ack_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,
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 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 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, 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, 0, 0,
X 0, 0
X};
X
X/* This is the number of available port layout tables.
X If this number is changed the arrays below must be filled
X in accordingly.
X*/
X#define NUM_PORT_LAYOUTS 1
X
X/* array of port layout table selection values
X These values select the port layout table in fas_layout [] []
X that is used for the respective port.
X*/
Xuint fas_pl_select [NUM_PHYSICAL_UNITS] =
X{
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0
X};
X
X/* array of port layout tables
X This two-dimensional array contains the base port offsets of the
X seven UART registers used by FAS. There are one or more port layout
X tables that are selected by the values in fas_pl_select [].
X
X Each port layout table is arranged like this (the position of the values
X corresponds to the respective UART register acronym):
X
X RBR/THR, IER, IIR/FCR, LCR, MCR, LSR, MSR
X*/
Xuint fas_layout [NUM_PORT_LAYOUTS] [NUM_UART_REGS] =
X{
X { /* table 0 */
X 0, 1, 2, 3, 4, 5, 6
X }
X};
X
X/* This is the number of available baud rate tables.
X You may define up to 256 tables. If this number is changed
X the arrays below must be filled in accordingly.
X*/
X#define NUM_BAUD_TABLES 2
X
X#if NUM_BAUD_TABLES > MAX_BAUD_TABLES
X#undef NUM_BAUD_TABLES
X#define NUM_BAUD_TABLES MAX_BAUD_TABLES
X#endif
X
X/* array of baud rate table selection values
X These values select the baud rate table in fas_baud [] []
X that is used for the respective port.
X*/
Xuint fas_bt_select [NUM_PHYSICAL_UNITS] =
X{
X 0, 0, 0, 0,
X 0, 0, 0, 0,
X 0, 0
X};
X
X/* array of baud rate tables
X This two-dimensional array contains the 15 possible UNIX baud rates
X plus the baud rate base that these 15 baud rates are derived from. There
X are one or more baud rate tables that are selected by the values in
X fas_bt_select [].
X
X The values in the baud rate tables are multiplied by ten to allow an
X accuracy of 0.1 baud. The baud rate base can be computed by dividing the
X external oscillator frequency (fed to the UART) by 16, and afterwards it
X is also mutiplied by ten to make its scale match the scale of the baud
X rate values.
X
X Each baud rate table is arranged like this (the position of the values
X corresponds to the respective baud rate symbol):
X
X BASE, B50, B75, B110,
X B134, B150, B200, B300,
X B600, B1200, B1800, B2400,
X B4800, B9600, B19200, B38400
X*/
Xulong fas_baud [NUM_BAUD_TABLES] [CBAUD + 1] =
X{
X { /* table 0 */
X 1152000, 500, 750, 1100,
X 1345, 1500, 2000, 3000,
X 6000, 12000, 18000, 24000,
X 48000, 96000, 192000, 384000
X },
X { /* table 1 */
X 1152000, 500, 750, 1100,
X 1345, 1500, 2000, 3000,
X 6000, 12000, 18000, 24000,
X 48000, 96000, 576000, 1152000
X }
X};
X
X/* NOTHING NEEDS TO BE CHANGED BELOW THIS LINE.
X ============================================
X*/
X
X/* let the driver know the number of devices */
Xuint fas_physical_units = NUM_PHYSICAL_UNITS;
X
X/* let the driver know the number of port layout tables */
Xuint fas_port_layouts = NUM_PORT_LAYOUTS;
X
X/* let the driver know the number of baud rate tables */
Xuint fas_baud_tables = NUM_BAUD_TABLES;
X
X/* array of structures to hold all info for a physical minor device */
Xstruct fas_internals fas_internals [NUM_PHYSICAL_UNITS];
X
X/* array of tty structures for logical devices */
Xstruct tty fas_tty [NUM_PHYSICAL_UNITS * 2];
X
X/* array of fas_speed structure arrays that contain baud rate dependent
X informations
X*/
Xstruct fas_speed fas_speed [NUM_BAUD_TABLES] [CBAUD + 1];
X
X/* array of pointers to fas_internals structures
X this prevents time consuming multiplications for index calculation
X*/
Xstruct fas_internals *fas_internals_ptr [NUM_PHYSICAL_UNITS];
X
X/* array of pointers to tty structures
X this prevents time consuming multiplications for index calculation
X*/
Xstruct tty *fas_tty_ptr [NUM_PHYSICAL_UNITS * 2];
X
X/* array of pointers to fas_speed structure arrays
X this prevents time consuming multiplications for index calculation
X*/
Xstruct fas_speed *fas_speed_ptr [NUM_BAUD_TABLES];
X
X/* array of pointers to the baud rate tables in fas_baud [] []
X this prevents time consuming multiplications for index calculation
X*/
Xulong *fas_baud_ptr [NUM_BAUD_TABLES];
SHAR_EOF
true || echo 'restore of space-ast8c12 failed'
rm -f _shar_wnt_.tmp
fi
# ============= space-c123 ==============
if test -f 'space-c123' -a X"$1" != X"-c"; then
echo 'x - skipping space-c123 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting space-c123 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'space-c123' &&
X/* 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 <fas@geminix.in-berlin.de>
XBillstedter Pfad 17 b
X13591 Berlin
XGermany
X*/
X
X#if !defined (M_I286)
X#ident "@(#)space.c 2.12"
X#endif
X
X#if defined (LOCAL_INCLUDE)
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 If it is changed, make sure that the initializer parts of all arrays
X dimensioned with `NUM_PHYSICAL_UNITS' have a corresponding number of
X entries. You may define up to 16 devices.
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/* array of base port addresses
X These values are the base i/o addresses of the UART chips.
X*/
Xuint fas_port [NUM_PHYSICAL_UNITS] =
X{
X 0x3f8, 0x2f8, 0x3e8
X};
X
X#if defined (SCO) || defined (XENIX)
X/* array of interrupt vectors (SCO UNIX and Xenix, only)
X FAS doesn't need informations about interrupt vectors during normal
X operation. Therefore, the only function of these values is to be
X displayed by the FAS boot message. So if you want vector infos at
X boot time you can enter the vector numbers here. But make sure that
X the values correspond with the entries in the kernel config files.
X A value of `-1' means that no vector number is displayed for the
X respective port.
X Users of other UNIX flavors can savely ignore this array.
X*/
Xint fas_vec [NUM_PHYSICAL_UNITS] =
X{
X -1, -1, -1
X};
X#endif
X
X/* array of modifier flags
X You can modify certain features of each port. See fas.h for possible
X names and values.
X*/
Xuint fas_modify [NUM_PHYSICAL_UNITS] =
X{
X 0, 0, 0
X};
X
X/* array of FIFO operating mode values
X These values select the mode to which the UART FIFOs are set when
X a port is activated. For device types that don't have FIFOs the
X respective value is ignored, so you can set up this array for
X FIFO operation now and add the FIFO UARTs later. There are several
X operating modes predefined. See fas.h for possible names and values.
X*/
Xuint fas_fifo_ctl [NUM_PHYSICAL_UNITS] =
X{
X FIFO_DEFAULT,
X FIFO_DEFAULT,
X FIFO_DEFAULT
X};
X
X/* initialization sequence for serial cards
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. Therefore, 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/* interrupt acknowledge sequence for serial cards
X This sequence is executed by the fasintr () function after all pending
X interrupts on all serial cards have been processed. The contents of this
X array has the same form as in the fas_init_seq [] array above.
X*/
Xuint fas_int_ack_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/* This is the number of available port layout tables.
X If this number is changed the arrays below must be filled
X in accordingly.
X*/
X#define NUM_PORT_LAYOUTS 1
SHAR_EOF
true || echo 'restore of space-c123 failed'
fi
echo 'End of part 7'
echo 'File space-c123 is continued in part 8'
echo 8 > _shar_seq_.tmp
exit 0