Files
Arquivotheca.Solaris-2.5/uts/sun/sys/stcio.h
seta75D 7c4988eac0 Init
2021-10-11 19:38:01 -03:00

299 lines
11 KiB
C
Executable File

/*
* Copyright (c) 1990-1993, by Sun Microsystems, Inc.
*/
#ifndef _SYS_STCIO_H
#define _SYS_STCIO_H
#pragma ident "@(#)stcio.h 1.23 93/06/25 SMI"
#ifdef __cplusplus
extern "C" {
#endif
/*
* Definitions for users of stc devices.
*/
/*
* Minor device number encoding:
*
* o p u u | u l l l
*
* o - set if this device is an outgoing serial line
* p - set if this is a parallel port device
* u - device unit number
* l - device line number
* if this is the parallel port line, 'p' should be 1 and
* 'lll' should be all 0's
* if this is the control line, both 'p' and 'lll' should be set
* to all 1's
*/
/*
*
* STC_SREGS - sets on-board register values
* STC_GREGS - get register values
* STC_SPPC - set parallel port parameters (until close())
* STC_GPPC - get parallel port parameters (valid until changed or close())
*
* #define STC_DCONTROL _IOWR('s', 254, struct stc_defaults_t)
* #define STC_SDEFAULTS _IOW('s', 251, struct stc_defaults_t)
* #define STC_GDEFAULTS _IOR('s', 250, struct stc_defaults_t)
* #define STC_SPPC _IOW('s', 252, struct ppc_params_t)
* #define STC_GPPC _IOR('s', 253, struct ppc_params_t)
* #define STC_GSTATS _IOWR('s', 260, struct stc_stats_t)
*/
#define sIOC ('s'<<8)
#define STC_SREGS (sIOC|251)
#define STC_GREGS (sIOC|252)
#define STC_SPPC (sIOC|253)
#define STC_GPPC (sIOC|254)
#define STC_GSTATS (sIOC|255)
/*
* we define this here so that it can be exported to users using the
* serial ioctl()'s to manipulate line default parameters; if you
* change this, the driver must be recompiled
*/
#define STC_SILOSIZE 1024 /* size of (soft) rx silo in line struct */
/*
* macro that returns 1 if parameter is out of range, used for range checking
* on valued parameters passed to driver via stc_defaults_t and ppc_params_t
*/
#define FUNKY(v, min, max) ((v < min) || (v > max))
/*
* fields of stc_default_t structure
*
* flags for the serial lines (line->flags)
*/
#define DTR_ASSERT 0x0001 /* assert DTR on open */
#define SOFT_CARR 0x0002 /* ignore CD input on open */
#define STC_DTRCLOSE 0x0004 /* use zs style DTR close() if clear */
#define STC_CFLOWFLUSH 0x0008 /* flush in close() for flow control */
#define STC_CFLOWMSG 0x0010 /* close() message for flow control */
#define STC_INSTANTFLOW 0x0020 /* when flow control off, enable xmtr */
#define STC_DTRFORCE 0x0040 /* force DTR always on */
/*
* parameters for the serial lines. min and max values are listed.
* if you put a strange value in, the ioctl will return an EINVAL and
* no defaults will be changed
*/
#define MIN_DRAIN_SIZE 4 /* min STREAMS size in drainsilo() */
#define MAX_DRAIN_SIZE 1024 /* max STREAMS size in drainsilo() */
#define MIN_HIWATER 2 /* min hiwater mark for Rx silo */
#define MAX_HIWATER (STC_SILOSIZE-2) /* max hiwater mark for Rx silo */
#define MIN_LOWWATER 2 /* min lowwater mark for Rx silo */
#define MAX_LOWWATER ((stc_defaults->stc_hiwater)-2) /* max lowwater mark */
#define MIN_RTPR 1 /* min Rx timeout regtister value */
#define MAX_RTPR 255 /* max Rx timeout regtister value */
#define MIN_RX_FIFO 1 /* min value for Rx FIFO threshold */
#define MAX_RX_FIFO 8 /* max value for Rx FIFO threshold */
/*
* flags for the parallel line (line->flags)
* (these also are returned in the "state" field of the ppc_param struct when
* you do a STC_GPPC ioctl(); setting them on a STC_SPPC ioctl() has no effect)
*
* if PP_MSG is clear, you'll get a console message when a particular error is
* first detected, and another console message when that error has cleared
* itself. if PP_MSG * is set, you'll get a console error message approx
* every 60 seconds for a particular * error condition until that error
* condition clears itself
*
* if PP_SIGNAL is set, you'll get a PP_SIGTYPE signal whenever we detect a
* printer error that you haven't masked off
*
* you get 2 versions of the interface status - the "soft" version, i.e. what
* the driver thinks the current status is qualified with the signals that
* you've masked off, and the "real" version which is read from the pins
* at the time the STC_GPPC ioctl() is done (no masking on the "real"
* version). the latter appears in the "state" field shifted left
* by PP_SHIFT
*/
#define PP_SHIFT 8 /* "real" interface status left shift */
#define PP_PAPER_OUT 0x00001 /* honour/return PAPER OUT */
#define PP_ERROR 0x00002 /* honour/return ERROR */
#define PP_BUSY 0x00004 /* honour/return BUSY */
#define PP_SELECT 0x00008 /* honour/return SELECT */
#define PP_MSG 0x20000 /* print message on error scan */
#define PP_SIGNAL 0x10000 /* send signal if printer error */
#define PP_SIGTYPE SIGURG /* signal to send on printer error */
/*
* some parameter ranges for the ppc defaults. min and max values are listed.
* if you put a strange value in, the ioctl will return an EINVAL and
* no defaults will be changed
*/
#define MIN_STBWIDTH 1 /* min ppc STROBE width, in uS */
#define MAX_STBWIDTH 30 /* max ppc STROBE width, in uS */
#define MIN_DATASETUP 0 /* min data setup time, in uS */
#define MAX_DATASETUP 30 /* max data setup time, in uS */
#define MIN_ACKTIMEOUT 5 /* min ACK timeout, in seconds */
#define MAX_ACKTIMEOUT 7200 /* max ACK timeout, in seconds */
#define MIN_ERRTIMEOUT 1 /* min ERROR timeout, in seconds */
#define MAX_ERRTIMEOUT 480 /* max ERROR timeout, in seconds */
#define NO_BUSYTIMEOUT 0 /* set this for infinite BUSY timeout */
#define MIN_BUSYTIMEOUT 0 /* min BUSY timeout, in seconds */
#define MAX_BUSYTIMEOUT 7200 /* max BUSY timeout, in seconds */
/*
* the structure that gets passed back and forth to deal with the defaults
*/
struct stc_defaults_t {
int flags; /* things like soft carrier, etc... */
/* serial port Rx handler parameters */
int drain_size; /* size of buffer in stc_drainsilo() */
int stc_hiwater; /* high water in CHECK_RTS() macro */
int stc_lowwater; /* low water in CHECK_RTS() macro */
int rtpr; /* inter-character receive timer */
int rx_fifo_thld; /* cd-180 RxFIFO threshold */
struct termios termios; /* baud rates, parity, etc... */
/* parallel line things */
int strobe_w; /* strobe width, in uS */
int data_setup; /* data setup time, in uS */
int ack_timeout; /* ACK timeout, in secs */
int error_timeout; /* PAPER OUT, etc, timeout in seconds */
int busy_timeout; /* BUSY timeout, in seconds */
/* for the control device */
int line_no; /* line number to operate on */
int op; /* operation */
/* for diagnostic access to registers */
u_char reg_offset; /* register offset to read/write */
u_char reg_data; /* register data to read/write */
};
/*
* op field return values for STC_GDEFAULTS, STC_DCONTROL(STC_CDEFGET)
* and STC_DCONTROL(STC_SPARAM_GET)
*/
#define STC_SERIAL 0x01 /* this is a serial line */
#define STC_PARALLEL 0x02 /* this is a parallel line */
#define STC_CNTRL 0x04 /* this is the control line */
/*
* the structure that gets passed to the GREGS and SREGS ioctls
*/
struct stc_diagregs_t {
int reg_flag; /* which register set */
u_char reg_offset; /* register offset to read/write */
u_char reg_data; /* register data to read/write */
};
/*
* the reg flag for tha above structure
*/
#define STC_IOREG 0x1
#define STC_PPCREG 0x0
/*
* the op parameters, only written for the control device per board
* used only with the STC_DCONTROL ioctl() and then only if the
* device is the board control device (read the man page)
*
* STC_GDEFAULTS will return the type of line it's connected to
* in the op field
*
* STC_DCONTROL(STC_CDEFGET) and STC_DCONTROL(STC_SPARAM_GET) will
* return the type of line specified by the line_no field in
* the op field
*
* STC_DCONTROL(STC_SPARAM_SET) and STC_DCONTROL(STC_SPARAM_GET) will
* return an STC_NOTOPEN_ERR error if the referenced line is not open
*
* Note on STC_CFLUSH: set the line # that you want to flush in
* the "line_no" field of the "stc_defaults_t" struct that you
* pass to STC_DCONTROL; if you want to flush the printer, set
* the line number to 64 or use the STC_LP_SETLINE() macro
*
* STC_REGIOR, STC_REGIOW, STC_PPCREGR and STC_PPCREGW are designed
* mostly for diagnostic use - don't try them unless you know what
* you're doing; you can cause all sorts of problems like enabling
* interrupts when they shouldn't be, resetting the cd180 and/or the
* PPC and generally wreaking havoc with the whole system
* to get register offsets for these, include <sbusdev/stcreg.h>
* for the diagnostic ops, specify the line number to operate on
* as 0 (unless you want the passed line number to be loaded into
* the cd180's CAR (channel address register) before each cd180
* register access; if so, OR in STC_SETCAR to the op field)
*/
#define STC_CDEFSET 0x00000001 /* set another line's defaults */
#define STC_CDEFGET 0x00000002 /* get another line's defaults */
#define STC_SPARAM_SET 0x00000004 /* set serial port parameters now */
#define STC_SPARAM_GET 0x00000008 /* get current serial port parameters */
#define STC_REGIOR 0x00000100 /* read cd180 register */
#define STC_REGIOW 0x00000200 /* write cd180 register */
#define STC_PPCREGR 0x00000400 /* read PPC register */
#define STC_PPCREGW 0x00000800 /* write PPC register */
#define STC_CFLUSH 0x00008000 /* flush a line's write queue */
#define STC_SETCAR 0x10000000 /* set cd180 car (diag use) */
#define STC_LP_SETLINE(line) (((line) & 0x3f) | 64)
#define STC_NOTOPEN_ERR ESRCH /* return if line is not open for use */
/*
* the parameter structure for the parallel port
*/
struct ppc_params_t {
int flags; /* same as above */
int state; /* status of the printer interface */
int strobe_w; /* strobe width, in uS */
int data_setup; /* data setup time, in uS */
int ack_timeout; /* ACK timeout, in secs */
int error_timeout; /* PAPER OUT, etc, timeout in seconds */
int busy_timeout; /* BUSY timeout, in seconds */
};
/*
* the stc_stats_t struct is used for statistics gathering and monitoring
* driver performance of the serial lines (statistics gathering is
* not supported on the parallel line)
*/
struct stc_stats_t {
int line_no; /* line number to operate on */
int cmd; /* command (see flags below) */
int qpunt; /* punting in stc_drainsilo() */
int drain_timer; /* posted a drainsilo timer */
int no_canput; /* drainsilo canput() failed */
int no_rcv_drain; /* call to drainsilo() failed */
int stc_drain; /* STC_DRAIN set on this line */
int stc_break; /* BREAK requested */
int stc_sbreak; /* start BREAK requested */
int stc_ebreak; /* end BREAK requested */
int set_modem; /* set modem control lines */
int get_modem; /* get modem control lines */
int ioc_error; /* bad ioctl() */
int set_params; /* call to stc_param() */
int no_start; /* already in stc_start() */
int xmit_int; /* transmit interrupts */
int rcv_int; /* receive interrupts */
int rcvex_int; /* rcv exception interrupts */
int modem_int; /* modem change interrupts */
int xmit_cc; /* characters transmitted */
int rcv_cc; /* characters received */
int break_cnt; /* BREAKs received */
int bufcall; /* times no STREAMS buffer */
int canwait; /* pending timer in drainsilo */
int nqfretry; /* number of queue retries */
};
/*
* flags in stc_stats_t.cmd field
*/
#define STAT_SET 0x0002 /* set line parameters */
#define STAT_CLEAR 0x0001 /* clear line statistics */
#define STAT_GET 0x0000 /* get line statistics */
#ifdef __cplusplus
}
#endif
#endif /* !_SYS_STCIO_H */