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