xref: /csrg-svn/sys/tahoe/vba/vxreg.h (revision 25881)
1 /*	vxreg.h	1.2	86/01/13	*/
2 
3 /*
4  * Vioc hardware interface structure.
5  */
6 struct	vxdevice {
7 	char	v_vioc;		/*  0 type of interrupt + vioc busy flag */
8 	char	v_hdwre;	/*  1 trap, reset, or hard interrupt */
9 	char	v_vcbsy;	/*  2 command busy (set by host) */
10 	char	v_vcid;		/*  3 command identifier */
11 	short	v_vcp[2];	/*  4 command pointer (sent by host) */
12 	short	v_unused;	/*  8 unused */
13 	short	v_rspoff;	/*  a offset into vblock for response buf */
14 	char	v_ustat;	/*  c status */
15 	char	v_uqual;	/*  d interrupt qualifier */
16 	char	v_usdata[0x3E];	/*  e unsolicited interrupt data */
17 	short	v_maxxmt;	/* 4C max xmit block size */
18 	short	v_maxsilo;	/* 4E max silo size */
19 	char	v_ident;	/* 50 identifies type of vioc */
20 	char	v_fault;	/* 51 denotes fault or ready after reset */
21 	short	v_dcd;		/* 52 bit mask for carr detect by port */
22 	short	v_cts;		/* 54 bit mask for cts by port */
23 	short	v_dsr;		/* 56 bit mask for dsr by port */
24 	short	v_secrec;	/* 58 bit mask for secondary receive */
25 	short	v_badport;	/* 5a bit mask of failed ports */
26 	char	v_portyp[16];	/* 5c type of each port */
27 };
28 
29 /* control bits for v_vioc and v_hdwre */
30 #define V_RESET 0x1		/* cause a vioc reset */
31 #define V_TRP	0x2		/* cause a vioc trap */
32 #define V_INTR	0x4		/* cause a vioc interrupt */
33 #define V_ERR	0x80		/* generic error flag */
34 #define V_BSY	0x80		/* generic busy flag */
35 #define V_UNBSY	0x80		/* not busy for unsolicited interrupt */
36 
37 /* command identifier codes */
38 #define VXC_LIDENT	0x0000		/* load ident, set int vectors */
39 #define VXC_XMITDTA	0x0200		/* transmit */
40 #define VXC_XMITIMM	0x0400		/* xmit immediate */
41 #define VXC_FDTATOX	0x0300		/* flush data */
42 #define	VXC_LPARAX	0x0600		/* load params */
43 #define VXC_SNDBRKX	0x0C00		/* send break to port */
44 #define VXC_MDMCTL	0x1000		/* auto modem control */
45 /* bisync specific command identifiers */
46 #define VXC_LPARAX1	0x060a
47 #define VXC_MDMCTL1	0x1004
48 #define VXC_HUNTMD1	0x0804
49 
50 /* vioc types returned during config */
51 #define	VXT_VIOCBOP	0x05		/* vioc-bop */
52 #define VXT_PVIOCX	0x0A		/* old connector panel vioc-x */
53 #define VXT_VIOCX	0x0B		/* new connector panel vioc-x */
54 #define VXT_VIOCB	0x0C		/* vioc-bisync */
55 #define	VXT_NEW		0x10		/* new type bit (or'd in) */
56 
57 #define VX_BISYNC	0x1		/* bisync flag indicator for bscport */
58 
59 /* v_fault status values */
60 #define	VXF_READY	0x55		/* no err in vioc self-initializaton */
61 
62 /* modem control flags */
63 #define VMOD_ON		1
64 #define VMOD_OFF	0
65 
66 #define V_ENAB	0002			/* auto + DTR */
67 #define V_DISAB	0000			/* auto + disable DTR */
68 
69 #define BRK_CHR	040			/* break character */
70 #define DCD_ON	020			/* */
71 #define DCD_OFF	010			/* */
72 #define	CTS_ON	004			/* */
73 #define DSR_ON	0200			/* modem signal states for bisync */
74 #define DSR_OFF 0100
75 #define DSR_CHG	(DSR_ON|DSR_OFF)
76 
77 #define VX_SILO	0x800			/* offset to base of silo */
78 
79 /* input status bits returned in silo */
80 #define	VX_PE	0x40			/* parity error */
81 #define	VX_FE	0x80			/* framing error */
82 #define	VX_RO	0xc0			/* receiver overrun */
83 
84 #define VRESPLEN	12
85 #define VCMDLEN		64
86 #define VC_IQLEN	64		/* Interrupt circular queue length */
87 #define NVCXBUFS	16*3		/* 3 bufs per port per viocx */
88 #define VC_CMDBUFL	NVCXBUFS	/* circular cmd (to exec) queue len*/
89 
90 struct	vcmds {
91 	int	v_cmdsem;		/* # cmds waiting for itrque */
92 	int	v_curcnt;		/* # cmds in itrque and executing */
93 	caddr_t	v_curcmd[VCMDLEN];	/* pointers to cmds being executed */
94 	int	v_fill;			/* circular fill index */
95 	int	v_empty;		/* circular empty index */
96 	caddr_t	cmdbuf[VC_CMDBUFL];	/* circular cmd (to exec) queue */
97 	int	v_itrfill;		/* circular intr issue queue fill */
98 	int	v_itrempt;		/* circular intr issue queue empty */
99 	short	v_itrqueu[VC_IQLEN];	/* circular intr issue queue */
100 };
101 
102 struct	vxcmd {
103 	struct	vxcmd *c_fwd;
104 	short	cmd;
105 	char	par[58];		/* pad to 64 total size */
106 };
107 
108 struct	vxmit {
109 	char	line;
110 	char	bcount;
111 	char	ostream[6];
112 };
113 
114 #define SSPEED	13			/* standard speed 9600 bps */
115