home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / sys / tahoe / vba / mpreg.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-05-08  |  15.5 KB  |  451 lines

  1. /*
  2.  * Copyright (c) 1988 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * This code is derived from software contributed to Berkeley by
  6.  * Computer Consoles Inc.
  7.  *
  8.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, are permitted provided that the following conditions
  10.  * are met:
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer.
  13.  * 2. Redistributions in binary form must reproduce the above copyright
  14.  *    notice, this list of conditions and the following disclaimer in the
  15.  *    documentation and/or other materials provided with the distribution.
  16.  * 3. All advertising materials mentioning features or use of this software
  17.  *    must display the following acknowledgement:
  18.  *    This product includes software developed by the University of
  19.  *    California, Berkeley and its contributors.
  20.  * 4. Neither the name of the University nor the names of its contributors
  21.  *    may be used to endorse or promote products derived from this software
  22.  *    without specific prior written permission.
  23.  *
  24.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  25.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  26.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  27.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  28.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  29.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  30.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  31.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  32.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  33.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  34.  * SUCH DAMAGE.
  35.  *
  36.  *    @(#)mpreg.h    7.4 (Berkeley) 6/28/90
  37.  */
  38.  
  39. /*
  40.  * MPCC Asynchronous Communications Interface.
  41.  */
  42. #define MPINTRBASE    0xa0        /* base vector for interupts */
  43. #define MPMAGIC        1969        /* magic number for mblok */
  44. #define MPMAXPORT    32        /* maximum number of ports on an MPCC */
  45.  
  46. /*
  47.  * MPCC's are capable of supporting one of a
  48.  * the protocols listed below.  This driver
  49.  * supports only the async terminal protocol.
  50.  */
  51. #define MPPROTO_UNUSED    0    /* port not in use */
  52. #define MPPROTO_ASYNC    1    /* async protocol */
  53. #define MPPROTO_X25    2    /* x25 protocol (unsupported) */
  54. #define MPPROTO_BISYNC    3    /* bisync protocol (unsupported) */
  55. #define MPPROTO_SNA      4    /* sna protocol (unsupported) */
  56.  
  57. #define NMPPROTO    5    /* max protocols supported by MPCC */
  58.  
  59. #define MPINSET        8
  60. #define MPOUTSET    8
  61.  
  62. /*
  63.  * Host Interface semaphores
  64.  */
  65. #define MPSEMA_AVAILABLE    1
  66. #define MPSEMA_WORK        4
  67.  
  68. /*
  69.  * Host Interface imok values
  70.  */
  71. #define MPIMOK_ALIVE    0x01
  72. #define MPIMOK_DEAD    0x80
  73.  
  74. /*
  75.  * Host Interface Structure
  76.  */
  77. struct his {
  78.     u_char    semaphore;
  79.     u_char    imok;
  80.     u_char    brdnum;        /* Virtual brd number for protocol */
  81.     u_char    unused;
  82.     struct {
  83.         u_char    inbdone[MPMAXPORT];    /* Ports w/ inbound completed */
  84.         u_char    outbdone[MPMAXPORT];    /* Ports w/outbound available */
  85.         u_int    fill[2];
  86.     } proto[NMPPROTO];
  87. };
  88.  
  89. #define MPPORT_EOL    0xff        /* end of port list */
  90.  
  91. /*
  92.  * Async host transmit list structure.
  93.  */
  94. #define MPXMIT    4    /* # of transmit ptrs/MP_WRITE event */
  95.  
  96. struct    hxmtl {
  97.     caddr_t    dblock[MPXMIT];    /* ptrs to data blocks */
  98.     u_short    size[MPXMIT];    /* size of each block */
  99. };
  100.  
  101. /*
  102.  * MPCC asynchronous protocol events.
  103.  */
  104. struct mpevent {
  105.     u_char    ev_status;    /* Go Status */
  106.     u_char    ev_cmd;        /* Optional Op-code */
  107.     u_short    ev_opts;    /* Optional flags */
  108.     u_short    ev_error;    /* error status returned */
  109.     u_short    ev_flags;    /* optional event flags field */
  110.     caddr_t    ev_params;    /* pointer to event parameters */
  111.     union {
  112.         struct    hxmtl *hxl;    /* pointer to host xmit list */
  113.         u_char    *rcvblk;    /* pointer to receive block */
  114.     } ev_un;
  115.     u_short    ev_count;    /* # ptrs in xmit list/# receive chars  */
  116.     u_short    ev_unused;    /* round to longword */
  117.     u_int    ev_unused2;    /* round to size of BSC struct. GROT!! */
  118. };
  119.  
  120. /* defines for ev_status */
  121. #define EVSTATUS_FREE    0
  122. #define EVSTATUS_GO    1
  123. #define EVSTATUS_BUSY    2
  124. #define EVSTATUS_DONE    4
  125.  
  126. /* defines for ev_cmd */
  127. #define EVCMD_OPEN    1
  128. #define EVCMD_CLOSE    2
  129. #define EVCMD_RESET    3
  130. #define EVCMD_IOCTL    4
  131. #define EVCMD_WRITE    5
  132. #define EVCMD_READ    6
  133. #define EVCMD_STATUS    7
  134. #define EVCMD_EVENT    8
  135.  
  136. /*
  137.  * Host-MPCC interface block.
  138.  */
  139. struct    mblok {
  140.     u_char    mb_status;        /* mpcc status */
  141.     u_char    mb_ivec;        /* host interrupt vector */
  142.     u_short    mb_magic;
  143.     u_char    mb_diagswitch[2];    /* run diagnostics/application */
  144.     u_char    mb_softerr;        /* soft error code */
  145.     u_char    mb_harderr;        /* hard error code */
  146.     struct mpdl {        /* download/config area */
  147.         u_char    mpdl_status;    /* control/status */
  148.         u_char    mpdl_cmd;    /* request type */
  149.         u_short    mpdl_count;    /* size of parameter block */
  150.         caddr_t    mpdl_data;    /* command parameters */
  151.     } mb_dl;
  152.     u_char    mb_hiport, mb_loport;    /* high-low mpcc port numbers */
  153.     u_char    mb_unit;        /* mpcc unit number */
  154.     u_char    mb_hndshk;        /* handshaking timer */
  155.     caddr_t    mb_imokclk;        /* handshaking clock */
  156.     u_char    mb_nointcnt;        /* no interrupt from handshake */
  157.     u_char    mb_mpintcnt;        /* # outstanding interupts to MPCC */
  158.     short    mb_unused;
  159.     caddr_t    mb_mpintclk;        /* MPCC interrupt clock */
  160.     struct    his mb_hostint;        /* To Talk with Host */
  161.     u_char    mb_proto[MPMAXPORT];    /* per-port protocols */
  162.     u_char    mb_intr[MPMAXPORT];    /* per-port host->mpcc int flags */
  163.     struct    mpport {    /* per-port structure */
  164.         u_short    mp_proto;    /* protocol of port */
  165.         u_char    mp_on;        /* Next available entry on Host */
  166.         u_char    mp_off;        /* Next expected 'DONE' entry on Host */
  167.         struct    mpevent mp_recvq[MPINSET]; /* queue of events to host */
  168.         struct    mpevent mp_sendq[MPOUTSET];/* queue of events to mpcc */
  169.         u_char    mp_nextrcv;    /* next expected 'DONE' entry on Host */
  170.         u_char    mp_flags;    /* host flags */
  171.         short    mp_unused;
  172.         caddr_t    mp_data;    /* pointer to data for port */
  173.     } mb_port[MPMAXPORT];
  174. };
  175.  
  176. /* status defines for mblok.status */
  177. #define MP_DLPEND    1
  178. #define MP_DLOPEN    2
  179. #define MP_DLDONE    3
  180. #define MP_OPCLOSE    4
  181. #define MP_OPOPEN    5
  182. #define MP_DLTIME    6
  183. #define MP_DLERROR    (-1)
  184.  
  185. /* hard error status values loaded into mblock.herr */
  186. #define NOHERR        0    /* no error */
  187. #define MPBUSERR    1    /* bus error */
  188. #define ADDRERR        2    /* address error */
  189. #define UNDECC        3    /* undefined ecc interrupt */
  190. #define UNDINT        4    /* undefined interrupt */
  191. #define PWRFL        5    /* power fail occurred */
  192. #define NOXENTRY    6    /* xdone was enterred w/o xmit entry on queue */
  193. #define TWOFTMRS    7    /* tried to start two fast timers on one port */
  194. #define INTQFULL    8    /* interupt queue full */
  195. #define INTQERR        9    /* interupt queue ack error */
  196. #define CBPERR        10    /* uncorrectable DMA parity error */
  197. #define ACPDEAD        11    /* acap has died */
  198. /* additional panic codes not listed */
  199.  
  200. /* soft error status values loaded into mblock.serr */
  201. #define NOSERR    0        /* no error */
  202. #define DMAPERR    1        /* dma parity error */
  203. #define ECCERR    2        /* local memory ecc error */
  204.  
  205. /* Defines for flags */
  206. #define MP_PROGRESS    1    /* Open or Close is in progress */
  207. #define MP_IOCTL    2    /* IOCTL is in progress */
  208. #define MP_REMBSY    4    /* remote station busy */
  209.  
  210. /*
  211.  * Asynchronous Terminal Protocol Definitions.
  212.  */
  213. #define A_RCVTIM    2    /* default max tix for receive event (~20ms) */
  214. #define ACPTMR        300    /* approx. 5 secs to wait for acap     */
  215. #define A_MAXEVTP    3    /* maximum # of L1 or Host Events to    */
  216.                 /* process per port at one time     */
  217. #define A_MAXRCV    128    /* max # of chars in rcv event - enough */
  218.                 /* to hold 20ms of chars at 19.2KB      */
  219. #define A_NUMRCV    32    /* number of rcv buffers per port       */
  220. #define A_NUMXMT    2    /* max number of concurrent xmits/port  */
  221. #define A_NUMEVT    32    /* number of evt bufs for status evts   */
  222.                 /* and L2 to L1 transmit evts       */
  223. #define WR5    5        /* SCC Write Reg 5              */
  224. #define TXENBL    0x08        /* mask to enable transmitter in WR 5   */
  225. #define RTSON    0x02        /* mask to turn on RTS in wreg 5    */
  226. #define CHR5MSK    0x1F        /* mask for 5-bit transmit data     */
  227.  
  228. /*
  229.  * macro to adjust a circular buffer ptr
  230.  *      x  = pointer or index
  231.  *      sz = size of circular buffer
  232.  */
  233. #define adjptr(x,sz)    ((x) = ((++(x) == (sz)) ? 0 : (x)))
  234. #define adjptrbk(x,sz)    ((x) = ((x) == 0) ? (sz) : --(x))
  235.  
  236. /*
  237.  * Events from ASYNC Level 1 to Level 2
  238.  */
  239. #define RCVDTA    10    /* normal receive data available */
  240. #define PARERR    11    /* receive data with parity error */
  241. #define OVRNERR    12    /* receive data with overrun error */
  242. #define OVFERR    13    /* receive data with overflow error */
  243. #define FRAMERR    14    /* receive data with framing error */
  244. #define ACKXMT    15    /* successful completion of transmit */
  245. #define NORBUF    16    /* No Receive Buffers available     */
  246. #define NOEBUF    17    /* No Event Buffers available */
  247. #define BRKASRT    18    /* Break condition detected */
  248.  
  249. /* defines for error conditions */
  250. #define A_OK        0    /* No Errors */
  251. #define A_INVEVT    1    /* Invalid Event Error */
  252. #define A_IOCERR    2    /* Error while configuring port */
  253. #define A_SIZERR    3    /* Error in count of data chars to xmt */
  254. #define A_NXBERR    4    /* Transmit Incomplete due to lack of bufs */
  255.  
  256. /*
  257.  * Modem control signal control structure.
  258.  */
  259. struct mdmctl {
  260.     u_char    mc_rngdsr;    /* ring or dsr */
  261.     u_char    mc_rts;        /* request to send */
  262.     u_char    mc_rate;
  263.     u_char    mc_dcd;        /* data carrier detect */
  264.     u_char    mc_sectx;    /* secondary transmit */
  265.     u_char    mc_cts;        /* clear to send */
  266.     u_char    mc_secrx;    /* secondary receive */
  267.     u_char    mc_dtr;        /* data terminal ready */
  268. };
  269.  
  270. /* defines for modem control lines */
  271. #define ASSERT    1        /* line asserted */
  272. #define DROP    2        /* line dropped */
  273. #define AUTO    3        /* auto mode enabled, rts only */
  274.  
  275. /*
  276.  * Async parameter structure.
  277.  */
  278. struct asyncparam {
  279.     u_char    ap_xon, ap_xoff;    /* xon-xoff characters */
  280.     u_char    ap_xena;        /* xon/xoff enabled */
  281.     u_char    ap_xany;        /* any received char enables xmitter */
  282.     struct    mdmctl ap_modem;    /* port modem control lines */
  283.     struct    mdmctl ap_intena;    /* modem signals which generate */
  284.                     /* status change events */
  285.     u_char    ap_data;        /* number of data bits */
  286.     u_char    ap_stop;        /* number of stop bits */
  287.     u_char    ap_baud;        /* baud rate */
  288.     u_char    ap_parity;        /* even/odd/no parity */
  289.     u_char    ap_loop;        /* enable for local loopback */
  290.     u_char    ap_rtimer;        /* receive timer value (msec) */
  291.     short    ap_fill;        /* round to longword */
  292. };
  293.  
  294. /* enable/disable signal codes */
  295. #define MPA_ENA    1        /* condition enabled */
  296. #define MPA_DIS    2        /* condition disabled */
  297.  
  298. /* defines for ap_data */
  299. #define MPCHAR_5    0    /* 5 bits per character */
  300. #define MPCHAR_6    2    /* 6 bits per character */
  301. #define MPCHAR_7    1    /* 7 bits per character */
  302. #define MPCHAR_8     3    /* 8 bits per character */
  303.  
  304. /* defines for ap_stop */
  305. #define MPSTOP_1    1    /* 1 stop bit per character */
  306. #define MPSTOP_1_5    2    /* 1 1/2 stop bits per character */
  307. #define MPSTOP_2    3    /* 2 stop bits per character */
  308.  
  309. /* defines for ap_baud */
  310. #define MODEM    0
  311. #define M0    0        /* baud rate = 0 */
  312. #define M50    1        /* baud rate = 50 */
  313. #define M75    2        /* baud rate = 75 */
  314. #define M110    3        /* baud rate = 110 */
  315. #define M134_5    4        /* baud rate = 134.5 */
  316. #define M150    5        /* baud rate = 150 */
  317. #define M200    6        /* baud rate = 200 */
  318. #define M300    7        /* baud rate = 300 */
  319. #define M600    8        /* baud rate = 600 */
  320. #define M1200    9        /* baud rate = 1200 */
  321. #define M1800    10        /* baud rate = 1800 */
  322. #define M2400    11        /* baud rate = 2400 */
  323. #define M4800    12        /* baud rate = 4800 */
  324. #define M9600    13        /* baud rate = 9600 */
  325. #define MEXTA    14        /* baud rate = Ext A */
  326. #define MEXTB    15        /* baud rate = Ext B */
  327. #define M2000    16        /* baud rate = 2000 */
  328. #define M3600    17        /* baud rate = 3600 */
  329. #define M7200    18        /* baud rate = 7200 */
  330. #define M19200    19        /* baud rate = 19,200 */
  331. #define M24000    20        /* baud rate = 24,000 */
  332. #define M28400    21        /* baud rate = 28,400 */
  333. #define M37800    22        /* baud rate = 37,800 */
  334. #define M40300    23        /* baud rate = 40,300 */
  335. #define M48000    24        /* baud rate = 48,000 */
  336. #define M52000    25        /* baud rate = 52,000 */
  337. #define M56800    26        /* baud rate = 56,800 */
  338.  
  339. /* defines for ap_parity */
  340. #define MPPAR_NONE    0    /* no parity */
  341. #define MPPAR_ODD    1    /* odd parity */
  342. #define MPPAR_EVEN    3    /* even parity */
  343.  
  344. /* possible flags for Host MP_IOCTL Events */
  345. #define A_CHGX        1    /* IOCTL is only chging xonxoff params */
  346. #define A_MDMCHG    2    /* change modem control lines */
  347. #define A_MDMGET    3    /* get current state of modem ctl lines */
  348. #define A_CHGL1P    4    /* IOCTL is changing changing L1 params */
  349. #define A_BRKON        5    /* set port break bit */
  350. #define A_BRKOFF    6    /* clear port break bit */
  351. #define A_CHGALL    7    /* IOCTL is changing xonxoff params, */
  352.                 /* pcnfg struct, & modem ctl structs */
  353. #define A_DISABX    8    /* disable port transmitter (ctl-s) */
  354. #define A_ENABLX    9    /* enable port transmitter (ctl-q) */
  355.  
  356. /* possible flags for Host MP_WRITE Events */
  357. #define A_FLUSH        1    /* flush any queued transmit events */
  358. #define A_SSTOP        2    /* transmit a port stop (xoff) char */
  359.                 /* before sending rest of event xmts */
  360. #define A_SSTART    3    /* transmit a port start (xon) char */
  361.                 /* before sending rest of event xmts */
  362.  
  363. /* possible flags for Outbound MP_READ Events */
  364. #define A_XOFF        1    /* transmitter stopped from by xoff char */
  365.  
  366. /* Perpos flags for modem control fields */
  367. #define A_RNGDSR    00001
  368. #define A_RTS        00002
  369. #define A_RATE        00004 
  370. #define A_DCD        00010
  371. #define A_SECTX        00020 
  372. #define A_CTS        00040
  373. #define A_SECRX        00100
  374. #define A_DTR        00200
  375.  
  376. #define DCDASRT        100    /* data carrier detect asserted */
  377. #define DTRASRT        101    /* data terminal ready asserted */
  378. #define RNGASRT        102    /* ring indicator asserted */
  379. #define DSRASRT        102    /* data set ready asserted */
  380. #define CTSASRT        103    /* clear to send asserted */
  381. #define RTSASRT        104    /* ready to send asserted */
  382. #define STXASRT        105    /* secondary transmit asserted */
  383. #define SRXASRT        106    /* secondary recieve asserted */
  384. #define RATEASRT    107    /* rate signal asserted */
  385. #define DCDDROP        108    /* data carrier detect dropped */
  386. #define DTRDROP        109    /* data terminal ready dropped */
  387. #define RNGDROP        110    /* ring indicator dropped */
  388. #define MPDSRDROP    110    /* data set ready dropped */
  389. #define CTSDROP        111    /* clear to send dropped */
  390. #define RTSDROP        112    /* ready to send dropped */
  391. #define STXDROP        113    /* secondary transmit dropped */
  392. #define SRXDROP        114    /* secondary recieve dropped */
  393. #define RATEDROP    115    /* rate signal dropped */
  394.  
  395. /* Defines for filters and intena in portstat */
  396. #define MDM_OFF    0
  397. #define MDM_ON    1
  398.  
  399. /* Modem on/off flags */
  400. #define MMOD_OFF    0
  401. #define MMOD_ON        1
  402.  
  403. /* defintions for DL interface */
  404.  
  405. #define MPDLBUFSIZE    1024
  406.  
  407. /* mpdlioctl command defines */
  408.  
  409. struct protports {
  410.     char protoport[MPMAXPORT];
  411. };
  412.  
  413. struct abdcf {
  414.     short xmtbsz;        /* transmit buffer size - should */
  415.                 /* equal # of chars in a cblock  */
  416. };
  417.  
  418. struct bdcf {
  419.     char loadname[NMPPROTO+1];
  420.     char protoports[MPMAXPORT];
  421.     char fccstimer;        /* powerfail timer */
  422.     char fccsports;        /* ports to affect */
  423.     char fccssoc;        /* ports which will 'switch on close' */
  424. };
  425.  
  426.  
  427. /* These ioctls are for the dlmpcc command */
  428. #define MPIOPORTMAP        _IOW('m',1, struct protports)
  429. #define MPIOHILO        _IOW('m',3, short)
  430. #define MPIOENDCODE        _IO('m',4)
  431. #define MPIOASYNCNF        _IOW('m',7, struct abdcf)
  432. #define MPIOENDDL        _IO('m',10)
  433. #define MPIOSTARTDL        _IO('m',11)
  434. #define MPIORESETBOARD        _IO('m',12)
  435.  
  436. /* mpdlwrite opcode defines */
  437.  
  438. #define MPDLCMD_NORMAL    1
  439.  
  440. /* error messages printed at console , board & port # filled in later */
  441.  
  442. #define A_INVSTS    "Invalid Status Event "
  443. #define A_INVCMD    "Invalid Event From the MPCC " 
  444. #define A_NORBUF    "No More Available Receive Buffers "
  445. #define A_NOEBUF    "No More Available Event Buffers "
  446. #define A_OVRN        "Overrun Error Detected "
  447. #define A_OVRF        "Overflow Error Detected "
  448. #define A_NOXBUF    "No More Available Transmit Event Buffers "
  449. #define A_XSIZE        "Transmit Data Block Size Exceeds Event Data Buffer Size "
  450. #define A_NOFREIN    "No Available Inbound Entries to Send Close Event "
  451.