|
|
1.1 ! root 1: #define MAXMPCC 16 /* max number of MPCCs in system */ ! 2: #define MAXMPCCPRT 32 /* max number of ports on a MPCC */ ! 3: #define MAXASYPRT 32 /* max number of async ports on MPCC */ ! 4: #define MAXASY16PRT 16 /* max async ports on 16 port MPCC */ ! 5: #define MAXSYNCPRT 16 /* max number of sync ports on MPCC */ ! 6: #define MAXBSCPRT 16 /* max number of bsc ports on MPCC */ ! 7: #define MAXPROTOCOL 5 /* max protocols supported by MPCC */ ! 8: /* ASYNC, X25, BSC, SNA, UNUSED */ ! 9: #define MP_INSET 8 ! 10: #define MP_OUTSET 8 ! 11: ! 12: #define MPDLBASE 0xa0 /* base vector for download interupt */ ! 13: #define MPHISBASE 0xb0 /* base vector for host interupt */ ! 14: #define MPMAGIC 1969 /* magic number for mblok */ ! 15: ! 16: /* Structure for x25 protocol */ ! 17: struct x25ent { ! 18: char *hsp; /* Host Structure Pointer */ ! 19: short error; /* error code - if any */ ! 20: short count; /* number of segments used */ ! 21: char **seg; /* ptr to list of ptrs to data */ ! 22: short *size; /* ptr to list of sizes of data */ ! 23: }; ! 24: ! 25: #define A_HSTXMT 4 /* # of transmit ptrs per ASYNC MP_WRITE event */ ! 26: #define A_MAJ16 27 /* major for first 16 ports */ ! 27: #define A_MAJ32 28 /* major for ports 16-31 for 32 port async */ ! 28: #define LP_MAJ16 37 /* major device for line printer on MPCC 16 */ ! 29: #define LP_MAJ32 38 /* major device for line printer on MPCC 32 */ ! 30: ! 31: /* ASYNC host transmit list structure */ ! 32: struct hxmtl { ! 33: unsigned char *dblock[A_HSTXMT]; /* ptrs to data blocks */ ! 34: unsigned short size[A_HSTXMT]; /* size of each block */ ! 35: }; ! 36: ! 37: typedef struct hxmtl HXMTL; ! 38: ! 39: /* Structure for ASYNC Protocol */ ! 40: struct asyevt { ! 41: unsigned short error; /* error status returned */ ! 42: unsigned short flags; /* optional event flags field */ ! 43: char *params; /* pointer to event parameters */ ! 44: /* virtual address ptr outbound */ ! 45: union { ! 46: HXMTL *hxl; /* pointer to host xmit list */ ! 47: unsigned char *rcvblk; /* pointer to receive block */ ! 48: }un; ! 49: unsigned short count; /* number of ptrs in xmit list */ ! 50: /* or number of receive chars */ ! 51: short unused; /* to make event a mult. of 4 */ ! 52: }; ! 53: ! 54: ! 55: /* structure for BSC protocol */ ! 56: ! 57: struct bscent { ! 58: short b_dev; /* device passed to level 2 */ ! 59: short b_count; /* data count */ ! 60: short ioctlcmd; /* ioctl command */ ! 61: char errflag; /* error returned from level 2 */ ! 62: char type; /* multistation of single stn */ ! 63: char *b_data; /* data pointer */ ! 64: char *b_mprt; /* pointer to port struct on host*/ ! 65: char *b_ps; /* pointer to portstatus on board*/ ! 66: }; ! 67: ! 68: /* defines for type */ ! 69: #define MULTI 1 ! 70: #define SINGLE 2 ! 71: #define TRACE 3 ! 72: ! 73: ! 74: ! 75: /* defines for flags (Bisync) */ ! 76: #define PAGAIN 1 ! 77: #define INUSE 2 ! 78: #define DSRWAIT 4 ! 79: #define WAITLST 8 ! 80: ! 81: ! 82: ! 83: /* ! 84: MPCC Inbound Entry and Queue ! 85: */ ! 86: ! 87: struct mpccinent { ! 88: char go_stat; /* Go Status */ ! 89: char op_code; /* Optional Op-code */ ! 90: short flags; /* Optional flags */ ! 91: union { ! 92: struct x25ent x25; ! 93: struct asyevt async; ! 94: struct bscent bsc; ! 95: /* put other protocol structures here */ ! 96: }un; ! 97: }; ! 98: ! 99: typedef struct mpccinent MPCCINENT; ! 100: ! 101: /* ! 102: MPCC Outbound Entry and Queue: ! 103: */ ! 104: ! 105: struct mpccoutent { ! 106: char go_stat; /* Go Status */ ! 107: char op_code; /* Optional Op-code */ ! 108: short flags; /* Optional flags */ ! 109: union { ! 110: struct x25ent x25; ! 111: struct asyevt async; ! 112: struct bscent bsc; ! 113: /* put other protocol structures here */ ! 114: }un; ! 115: }; ! 116: ! 117: typedef struct mpccoutent MPCCOUTENT; ! 118: ! 119: /* Defines for go_stat */ ! 120: #define MP_FREE 0 ! 121: #define MP_GO 1 ! 122: #define MP_BUSY 2 ! 123: #define MP_DONE 4 ! 124: ! 125: /* Defines for op_code */ ! 126: #define MP_OPEN 1 ! 127: #define MP_CLOSE 2 ! 128: #define MP_RESET 3 ! 129: #define MP_IOCTL 4 ! 130: #define MP_WRITE 5 ! 131: #define MP_READ 6 ! 132: #define MP_STATUS 7 ! 133: #define MP_EVENT 8 ! 134: ! 135: /* Defines for events recieved */ ! 136: #define MP_NORBUF 1 /* No recieve buffers */ ! 137: #define MP_NOBUFH 2 /* No recieve buffer headers */ ! 138: #define MP_LNKUP 3 /* Link up */ ! 139: #define MP_LNKDWN 4 /* Link down */ ! 140: #define MP_XMTTO 5 /* Transmitt timeout */ ! 141: ! 142: /* ! 143: The structure for the Host Interface Structure is as follows: ! 144: */ ! 145: struct his { ! 146: char semaphore; ! 147: char imok; ! 148: char brdnum; /* Virtual brd number for protocol */ ! 149: char unused; ! 150: struct { ! 151: char inbdone[MAXMPCCPRT]; /* Ports with inbound completed */ ! 152: char outbdone[MAXMPCCPRT]; /* Ports with outbound available */ ! 153: int (*incmpl)(); /* Protocol completion routine */ ! 154: int (*outcmpl)(); /* Protocol completion routine */ ! 155: }proto[MAXPROTOCOL]; ! 156: }; ! 157: ! 158: typedef struct his HIS; ! 159: ! 160: #define EOL -1 /* delimeter for end of ports */ ! 161: ! 162: /* defines for imok field of Host Interface Structure */ ! 163: #define MP_ALIVE 0x01 ! 164: #define MP_DEAD 0x80 ! 165: ! 166: /* Defines for semaphores */ ! 167: #define MP_NODATA 0 ! 168: #define MP_AVAILABLE 1 ! 169: #define MP_DATA 2 ! 170: #define MP_WORK 4 ! 171: ! 172: struct mpccprt { ! 173: short protocol; /* protocol of port */ ! 174: char on; /* Next available entry on Host */ ! 175: char off; /* Next expected 'DONE' entry on Host */ ! 176: struct mpccinent Inents[MP_INSET]; /* the Inbound Queue Entries */ ! 177: struct mpccoutent Outents[MP_OUTSET]; /* the Outbound Queue Entries */ ! 178: char nextrcv; /* Next expected 'DONE' entry on Host */ ! 179: char flags; /* flags for port on host */ ! 180: char unused[2]; ! 181: char *portdata; /* pointer to data for port */ ! 182: }; ! 183: ! 184: typedef struct mpccprt MPCCPRT; ! 185: ! 186: /* Defines for protocol */ ! 187: #define MP_UNUSED 0 /* port is not used */ ! 188: #define MP_ASYNC 1 /* port is opened for async */ ! 189: #define MP_X25 2 /* port is opened for x25 */ ! 190: #define MP_BISYNC 3 /* port is opened for bisync */ ! 191: #define MP_SNA 4 /* port is opened for sna */ ! 192: ! 193: /* Defines for flags */ ! 194: #define MP_PROGRESS 1 /* Open or Close is in progress */ ! 195: #define MP_PORTUP 2 /* link is up for port */ ! 196: #define MP_REMBSY 4 /* remote station busy */ ! 197: ! 198: struct mblok { ! 199: char status; /* MPCC status */ ! 200: char ivect; /* Interrupt vector to Host */ ! 201: short magic; ! 202: char di_swtch[2]; /* run diagnostics/application */ ! 203: char serr; /* 'soft' MPCC errors */ ! 204: char herr; /* 'hard' MPCC errors */ ! 205: struct dl { ! 206: kr char go_stat; /* 'data' is valid */ ! 207: char op_code; /* what 'data' is */ ! 208: short count; /* size of 'data' */ ! 209: char *data; ! 210: } dlcnf; /* download/config interface */ ! 211: char hiport; /* Highest Port number on MPCC */ ! 212: char loport; /* Lowest Port number on MPCC */ ! 213: char mpcc_num; /* mpcc number */ ! 214: char hndshk; /* handshaking timer */ ! 215: char *imokclk; /* handshaking clock */ ! 216: char nointcnt; /* no interrupt from handshake */ ! 217: char mpintcnt; /* count of outstanding interupts ! 218: * to the MPCC */ ! 219: char unused[2]; ! 220: char *mpintclk; /* MPCC interrupt clock */ ! 221: struct his hostint; /* To Talk with Host */ ! 222: char protoport[MAXMPCCPRT]; /* protocol for port */ ! 223: char intport[MAXMPCCPRT]; /* used for host to mpcc interrupt */ ! 224: struct mpccprt mpccport[MAXMPCCPRT]; /* See Port Interface */ ! 225: }; ! 226: ! 227: typedef struct mblok MBLOK; ! 228: ! 229: #define SZ_MPCC (sizeof(struct mblok)) ! 230: ! 231: /* status defines for mblok.status */ ! 232: ! 233: #define MP_DLPEND 1 ! 234: #define MP_DLOPEN 2 ! 235: #define MP_DLDONE 3 ! 236: #define MP_OPCLOSE 4 ! 237: #define MP_OPOPEN 5 ! 238: #define MP_DLTIME 6 ! 239: #define MP_DLERROR (-1) ! 240: ! 241: /* hard error status values loaded into mblock.herr */ ! 242: #define NOHERR 0 /* no error */ ! 243: #define MPBUSERR 1 /* bus error */ ! 244: #define ADDRERR 2 /* address error */ ! 245: #define UNDECC 3 /* undefined ecc interrupt */ ! 246: #define UNDINT 4 /* undefined interrupt */ ! 247: #define PWRFL 5 /* power fail occurred */ ! 248: #define NOXENTRY 6 /* xdone was enterred without an xmit entry on queue */ ! 249: #define TWOFTMRS 7 /* trying to start two fast timers on one port */ ! 250: #define INTQFULL 8 /* interupt queue full */ ! 251: #define INTQERR 9 /* interupt queue ack error */ ! 252: #define CBPERR 10 /* uncorrectable DMA parity error */ ! 253: #define ACPDEAD 11 /* acap has died */ ! 254: ! 255: #define PANIC1 101 /* clk_rem: timer not in queue */ ! 256: #define PANIC2 102 /* clk_res: illegal time value */ ! 257: #define PANIC3 103 /* clk_set: illegal tix */ ! 258: #define PANIC4 104 /* clkgetb: VRTX allocation error */ ! 259: #define PANIC5 105 /* clkgetb: Too many clocks */ ! 260: #define PANIC6 106 /* clkrelb: release error */ ! 261: #define PANIC7 107 /* Bad queue */ ! 262: #define PANIC8 108 /* mp_scan: VRTX sc_post error */ ! 263: #define PANIC9 109 /* mp_ipool: Buffer pools too big\n */ ! 264: #define PANIC10 110 /* xl_preprocess:VRTX sc_pend error */ ! 265: #define PANIC11 111 /* xl_1tompcc: unknown entry type\n */ ! 266: #define PANIC12 112 /* xl_ercv: unknown error status */ ! 267: #define PANIC13 113 /* xl_rxidtst:entry not busy */ ! 268: #define PANIC14 114 /* xl_3tompcc: undefined op_code */ ! 269: #define PANIC15 115 /* xl_ses: no buffer headers. */ ! 270: #define PANIC16 116 /* xl_ses:Unrecognized command */ ! 271: #define PANIC17 117 /* xl_seu: no data buffers. */ ! 272: #define PANIC18 118 /* xl_seu: no buffer headers. */ ! 273: #define PANIC19 119 /* xl_seu: Unrecognized command */ ! 274: #define PANIC20 120 /* xl_stch: Data error */ ! 275: #define PANIC21 121 /* xl_xidtst:entry not busy */ ! 276: #define PANIC22 122 /* xl_guframe: no uframes\n */ ! 277: #define PANIC23 123 /* xl_ruframe: not a uframe\n */ ! 278: #define PANIC24 124 /* xl_clkstr: Data error. */ ! 279: #define PANIC25 125 /* xl_clkstr:no timers in list */ ! 280: #define PANIC26 126 /* xl_tmcan: no such timer to cancel */ ! 281: #define PANIC27 127 /* xl_tmexp: unknown timer\n */ ! 282: #define PANIC28 128 /* xl_tmset: no such timer to set */ ! 283: #define PANIC29 129 /* xl_tmset: time left with no timers */ ! 284: ! 285: /* soft error status values loaded into mblock.serr */ ! 286: #define NOSERR 0 /* no error */ ! 287: #define DMAPERR 1 /* dma parity error */ ! 288: #define ECCERR 2 /* local memory ecc error */ ! 289: ! 290: struct ccinit { ! 291: char status; ! 292: char unused; ! 293: short magic; ! 294: struct mblok *mb; ! 295: } ; ! 296: ! 297: struct vbmem { ! 298: char dlstring[12]; ! 299: struct ccinit vbinit; ! 300: struct mblok *mbloks[MAXMPCC]; /* 2 mbloks per 32 port board */ ! 301: }; ! 302:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.