xref: /csrg-svn/sys/tahoe/vba/vxreg.h (revision 23999)
1 /*	vxreg.h	1.1	85/07/21	*/
2 
3 #define V_RESETTING 1		/* in process of reseting */
4 #define V_RESET 1		/* cause a vioc reset */
5 #define V_TRP	2		/* cause a vioc trap */
6 #define V_INTR	4		/* cause a vioc interrupt */
7 #define V_ERR	0x80		/* generic error flag */
8 #define V_BSY	0x80		/* generic busy flag */
9 #define V_UNBSY	0x80		/* not busy for unsolicited interrupt */
10 
11 #define	VCVECT	0x40 		/* base vioc vector */
12 
13 #define	VBAS(x)  ( (struct vblok *)(VIOCBAS[x]) )
14 
15 #define	NVIOCX NVX		/* nbr of viocx's - defined by config in vx.h */
16 #define NVXPORTS 16*NVIOCX	/* Total nbr of viocx terminal ports */
17 #define NVCXBUFS 16*3		/* 3 bufs per port per viocx */
18 #define	VREADY 0x55		/* denotes no err in vioc self-initializaton */
19 #define PVIOCX	0x0A		/* old connector panel vioc-x */
20 #define VIOCX	0x0B		/* new (modular) connector panel vioc-x */
21 #define	NPVIOCX	0x1A		/* new pviocx */
22 #define	NWVIOCX	0x1B		/* new viocx */
23 #define	VBOPID	0x5		/* Vioc-bop */
24 
25 #include "vbsc.h"
26 #if NVBSC > 0
27 #define VIOCB	0x0C
28 #define NWVIOCB 0x1C
29 #define BISYNC 0x1
30 #define LPARAX1 0x060a
31 #define MDMCTL1 0x1004
32 #define HUNTMD1 0x0804
33 #endif
34 
35 
36 #define	V_NEW	1		/* NPVIOCX | NVIOCX */
37 #define	V_OLD	0		/* PVIOCX | VIOCX */
38 /* Modem Control flags */
39 #define VMOD_ON 1
40 #define VMOD_OFF 0
41 
42 #define VRESPLEN 12
43 #define VCMDLEN 64
44 #define VC_IQLEN 64			/* Interrupt circular queue length */
45 #define VC_CMDBUFL NVCXBUFS		/* circular cmd (to exec) queue len*/
46 
47 #define SSPEED	13		/* standard speed 9600 bps */
48 
49 #define V_ENAB	0002	/* auto + DTR */
50 #define V_DISAB	0000	/* auto + disable DTR */
51 
52 #define BRK_CHR	040
53 #define DCD_ON	020
54 #define DCD_OFF	010
55 #define	CTS_ON	004
56 #define DSR_ON	0200	/* modem signal states for bisync */
57 #define DSR_OFF 0100
58 #define DSR_CHG	(DSR_ON | DSR_OFF)
59 
60 #define SILOBAS 0x800
61 /* Command Operation Codes */
62 #define LIDENT	0x0000		/* load ident, set int vectors */
63 #define XMITDTA	0x0200		/* transmit */
64 #define XMITIMM	0x0400		/* xmit immediate */
65 #define FDTATOX	0x0300		/* flush data */
66 #define	LPARAX	0x0600		/* load params */
67 #define SNDBRKX	0x0C00		/* send break to port */
68 #define MDMCTL	0x1000		/* auto modem control */
69 
70 #define PERROR	0x40
71 #define FERROR	0x80
72 #define RCVOVRN	0xc0
73 
74 /*
75  * Data Structures
76  */
77 
78 struct	vblok	{		/* command sent to vioc  */
79 	char	v_vioc;		/*  0 type of interrupt + voic bsy flg */
80 	char	v_hdwre;	/*  1 trap, reset, or hard interrupt */
81 	char	v_vcbsy;	/*  2 command busy (set by host) */
82 	char	v_vcid;		/*  3 command id. */
83 	short	v_vcp[2];	/*  4 command pointer (sent by host) */
84 	short	v_unused;	/*  8 unused */
85 	short	v_rspoff;	/*  a offset into vblock for response buf */
86 	char	v_ustat;	/*  c status */
87 	char	v_uqual;	/*  d qualifies the interrupt */
88 	char	v_usdata[0x3E];	/*  e unsolicited interrupt data */
89 	short	v_maxxmt ;	/* 4C max xmit block size */
90 	short	v_maxsilo ;	/* 4E max silo size */
91 	char	v_ident ;	/* 50 identifies type of vioc */
92 	char	v_fault ;	/* 51 denotes fault or ready after reset */
93 	short	v_dcd ;		/* 52 bit mask for carr detect by port */
94 	short	v_cts ;		/* 54 bit mask for cts by port */
95 	short	v_dsr;		/* 56 bit mask for dsr by port */
96 	short	v_secrec;	/* 58 bit mask for secondary receive */
97 	short	v_badport;	/* 5a bit mask of failed ports */
98 	char	v_portyp[16];	/* 5c type of each port */
99 } ;
100 
101 struct	vcmds	{
102 	int	v_cmdsem;		/* cmds waiting for itrque */
103 	int	v_curcnt;		/* count of cmds in itrque and executing */
104 	caddr_t	v_curcmd[VCMDLEN] ;	/* pointers to cmds being executed */
105 	int	v_fill ;		/* circular fill index */
106 	int	v_empty ;		/* circular empty index */
107 	caddr_t	cmdbuf[VC_CMDBUFL] ;	/* circular cmd (to exec) queue */
108 	int	v_itrfill ;		/* circular intr issue queue fill */
109 	int	v_itrempt ;		/* circular intr issue queue empty */
110 	short	v_itrqueu[VC_IQLEN] ;	/* circular intr issue queue */
111 } ;
112 
113 struct	vxcmd	{
114 	struct	vxcmd	*c_fwd ;
115 	short	cmd ;
116 	char	par[58] ; /* 64 total size */
117 } ;
118 
119 struct	vxmit	{
120 	char	line ;
121 	char	bcount ;
122 	char	ostream[6] ;
123 } ;
124 /* should be sizeof(struct vxmit), but has alignment problems */
125 #define sizvxmit 6
126 
127 struct	vcx	{
128 	char	v_loport ;	/* low port nbr */
129 	char	v_hiport ;	/* high port nbr */
130 	short	v_nbr ;		/* viocx number */
131 	short	v_maxcmd ;	/* max number of concurrent cmds */
132 	short	v_silosiz ;	/* silo size */
133 	short	v_vers ;	/* vioc/pvioc version */
134 	char	v_actflg ;	/* active command */
135 	char	v_xmtcnt ;	/* xmit commands pending */
136 	char	v_actport[16] ;	/* act flag per port per port */
137 	short	v_brkreq ;	/* send break requests pending */
138 	struct	vxcmd	*vx_avail ;
139 	struct	vxcmd	*vx_build ;
140 	struct	vxcmd	vx_lst[NVCXBUFS] ;
141 	short 	v_state;
142 	caddr_t v_mricmd;	/* Most recent issued cmd */
143 };
144 
145 #ifdef KERNEL
146 caddr_t VIOCBAS[NVIOCX];	/* base I/O addr */
147 #define vpanic(x) printf("%s\n", x)
148 #endif
149