Annotation of Net2/arch/vax/uba/npreg.h, revision 1.1

1.1     ! root        1: /*-
        !             2:  * Copyright (c) 1986 MICOM-Interlan, Inc., Boxborough Mass
        !             3:  * Copyright (c) 1991 The Regents of the University of California.
        !             4:  * All rights reserved.
        !             5:  *
        !             6:  * Redistribution and use in source and binary forms, with or without
        !             7:  * modification, are permitted provided that the following conditions
        !             8:  * are met:
        !             9:  * 1. Redistributions of source code must retain the above copyright
        !            10:  *    notice, this list of conditions and the following disclaimer.
        !            11:  * 2. Redistributions in binary form must reproduce the above copyright
        !            12:  *    notice, this list of conditions and the following disclaimer in the
        !            13:  *    documentation and/or other materials provided with the distribution.
        !            14:  * 3. All advertising materials mentioning features or use of this software
        !            15:  *    must display the following acknowledgement:
        !            16:  *     This product includes software developed by the University of
        !            17:  *     California, Berkeley and its contributors.
        !            18:  * 4. Neither the name of the University nor the names of its contributors
        !            19:  *    may be used to endorse or promote products derived from this software
        !            20:  *    without specific prior written permission.
        !            21:  *
        !            22:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
        !            23:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            24:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            25:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            26:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            27:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            28:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            29:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            30:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            31:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            32:  * SUCH DAMAGE.
        !            33:  *
        !            34:  *     @(#)npreg.h     7.4 (Berkeley) 5/9/91
        !            35:  */
        !            36: 
        !            37: /*
        !            38:  * Merged header file for MICOM-Interlan NP100.
        !            39:  */
        !            40: 
        !            41: /*
        !            42:  *     np100.h version 1.3
        !            43:  *
        !            44:  *     This version retrieved: 8/18/86 @ 18:58:44
        !            45:  *         This delta created: 8/18/86 @ 18:27:32
        !            46:  */
        !            47: /*
        !            48:  * Typedefs for the VAX 
        !            49:  */
        !            50: 
        !            51: typedef short  sign16;                 /* 16 bit signed value */
        !            52: typedef unsigned short unsign16;       /* 16 bit unsigned value */
        !            53: typedef unsigned unsign32;             /* 32 bit unsigned value */
        !            54: typedef long paddr_t;                  /* Physical addresses */
        !            55: 
        !            56: 
        !            57: /*
        !            58:  * Tunables
        !            59:  */
        !            60: 
        !            61: 
        !            62: #define NUMCQE         40              /* Number of CQE's per board */
        !            63: 
        !            64: /* Host configuration word in Status Block */
        !            65: 
        !            66: /*
        !            67:  * To disable the lock/unlock internal function calls clear the 0x8000
        !            68:  * bit in the host configuration word (HOSTCONF)
        !            69:  */
        !            70: 
        !            71: #define        HOSTCONF        0x0109  /* See above */
        !            72: #define        LOWBYTE         1
        !            73: #define        HIGHBYTE        0
        !            74: #define BUFFMAPPED     0
        !            75: 
        !            76: /*
        !            77:  * Memory mapping definintions for PM68DUAL hardware.
        !            78:  */
        !            79: 
        !            80: #ifdef PM68DUAL
        !            81: #define        PISHMEM         0x200000
        !            82: #define PISHMEMSIZE    2
        !            83: #define PIOFF          0x8000          /* change this to unique mem add. */
        !            84: #define PIWINDOW       MBUSBUFR + PIOFF
        !            85: #define WINDOWSIZE     2
        !            86: #endif
        !            87: #define        NPMAXXFR        32768           /* Maximum number of bytes / read */ 
        !            88: 
        !            89: /*
        !            90:  * Define the protocols supported by the NP Driver.
        !            91:  */
        !            92: 
        !            93: #define NONE           0x00    /* No protocols active for a process */
        !            94: #define NPMAINT                0x01    /* Maintenance protocol, superusers only */
        !            95: #define NPNTS          0x02    /* NTS Terminal Server */
        !            96: #define NPIDP          0x04    /* Direct Datalink Access */
        !            97: #define NPDLA          0x04    /* Direct Datalink Access */
        !            98: #define NPXNS          0x06    /* Xerox NS ITP */
        !            99: #define NPTCP          0x08    /* TCP/IP */
        !           100: #define NPISO          0x0A    /* ISO */
        !           101: #define NPCLCONN       0xFF    /* Closed connection, i.e. no protocol */
        !           102: 
        !           103: /*
        !           104:  * Convert the protocol to a value used in the Device Protocol Mask field
        !           105:  * of the Shared Memory Status Block.
        !           106:  */
        !           107: 
        !           108: #define PROTOMASK(x)   ( 1 << (x) )
        !           109: 
        !           110: /*
        !           111:  * Special requests handled by the NP Driver
        !           112:  */
        !           113: 
        !           114: #define OS_STP         03400   /* Shut down connection on I Board */
        !           115: #define NPSTOP         3       /* Conversion from above (OS_STP) */
        !           116: #define NPCHNGP                50      /* Change the protocol on a connection */
        !           117: #define NPCHNGB                51      /* Change the Board number */
        !           118: 
        !           119: /*
        !           120:  * Miscellaneous
        !           121:  */
        !           122: 
        !           123: #define ON             0x8000  /* Used for Command Q's scan and change flag */
        !           124: #define UBADDRMASK     0x3FFFF /* 18 bit UNIBUS address */
        !           125: #define INTMASK                0xFFFFFFFC /* Used for address validation */
        !           126: #define CMDMASK                0xFFFF  /* Mask ioctl cmd field (see ioctl.h) */
        !           127: #define NPPSADDR       0x324   /* Pointer to addr of on-board panic string */
        !           128: #define        PANLEN          133             /* length of the panic buffer */
        !           129: 
        !           130: /*
        !           131:  * Map function code from user to I-Board format
        !           132:  */
        !           133: 
        !           134: #define FUNCTMAP(x)    (((x) << 6) | 077) /* Maps user function to NP funcs */
        !           135: 
        !           136: /*
        !           137:  * Round up to a 16 byte boundary
        !           138:  */
        !           139: 
        !           140: #define ROUND16(x)     (((x) + 15) & (~0x0F)) /* Round to 16 byte boundary */
        !           141: #define ADDR24         1 /* Used by iomalloc() to specify 24 bit address */
        !           142: 
        !           143: #define NPERRSHIFT     8       /* Used in function ReqDone() */
        !           144: #define NPOK           0
        !           145: 
        !           146: #define LOWORD(X)      (((ushort *)&(X))[0])
        !           147: #define HIWORD(X)      (((ushort *)&(X))[1])
        !           148: 
        !           149: /* Everyday flag settings */
        !           150: 
        !           151: #define NPSET          1
        !           152: #define NPCLEAR                0
        !           153: 
        !           154: /*
        !           155:  * Command Queue Elements are the primary data structure for passing data
        !           156:  * between the driver and the device.
        !           157:  */
        !           158: 
        !           159: struct CQE {
        !           160: 
        !           161:        struct npreq *cqe_reqid;/* Address of asssociated npreq */
        !           162:        union   {
        !           163:                unsign32 cqe_Famid;     /* Family ID (Process ID) - wn */
        !           164:                unsign16 cqe_PrtSig[2]; /* port and signal - tn */
        !           165:        } u1;
        !           166: #define        cqe_famid       u1.cqe_Famid
        !           167: #define        cqe_port        u1.cqe_PrtSig[0]
        !           168: #define        cqe_signal      u1.cqe_PrtSig[1]
        !           169:        unsign16 cqe_func;      /* I/O function to be performed */
        !           170: #ifdef mc68000
        !           171:        char cqe_prot;          /* Protocol type for I/O request */
        !           172:        char cqe_lenrpb;        /* Length of the RPB in bytes */
        !           173: #else
        !           174:        char cqe_lenrpb;        /* Length of the RPB in bytes */
        !           175:        char cqe_prot;          /* Protocol type for I/O request */
        !           176: #endif
        !           177:        union   {
        !           178:                unsign16 cqe_ustS[2];   /* Protocol status return */
        !           179:                unsign32 cqe_ustL;      /* Protocol status return */
        !           180:        } u2;
        !           181: #define        cqe_ust0        u2.cqe_ustS[0]
        !           182: #define        cqe_ust1        u2.cqe_ustS[1]
        !           183: #define        cqe_usts        u2.cqe_ustL
        !           184:        unsign16 cqe_devrsv;    /* Reserved for use by device only! */
        !           185: #ifdef mc68000
        !           186:        char cqe_char;          /* CQE characteristics */
        !           187:        char cqe_sts;           /* Status return from device to user */
        !           188:        char cqe_wind;          /* Buffer mapping window size (page units) */
        !           189:        char cqe_nbuf;          /* Number of data buffers for I/O */
        !           190: #else
        !           191:        char cqe_sts;           /* Status return from device to user */
        !           192:        char cqe_char;          /* CQE characteristics */
        !           193:        char cqe_nbuf;          /* Number of data buffers for I/O */
        !           194:        char cqe_wind;          /* Buffer mapping window size (page units) */
        !           195: #endif
        !           196:        unsign16 cqe_bcnt;      /* Total number of bytes in the data buffer */
        !           197:        union {
        !           198:                unsign16 cqe_Unused;    /* Unused */
        !           199:                struct {
        !           200:                        char cqe_Maxbcnt;       /* Maximum size of buffer */
        !           201:                        char cqe_Bflags;        /* Used by the SPI */
        !           202:                } s;
        !           203:        } u3;
        !           204: #define cqe_unused     u3.cqe_Unused
        !           205: #define cqe_maxbcnt    u3.s.cqe_Maxbcnt
        !           206: #define cqe_bflags     u3.s.cqe_Bflags
        !           207:        unsign16 cqe_dma[2];    /* Address of the MULTIBUS data buffer */
        !           208:        unsign16 rpb1;          /* Word 1 of protocol parameters */
        !           209:        unsign16 rpb2;          /* Word 2 of protocol parameters */
        !           210:        unsign16 rpb3;          /* Word 3 of protocol parameters */
        !           211:        unsign16 rpb4;          /* Word 4 of protocol parameters */
        !           212:        unsign16 rpb5;          /* Word 5 of protocol parameters */
        !           213:        unsign16 rpb6;          /* Word 6 of protocol parameters */
        !           214:        unsign16 rpb7;          /* Word 7 of protocol parameters */
        !           215:        unsign16 rpb8;          /* Word 8 of protocol parameters */
        !           216:        unsign16 rpb9;          /* Word 9 of protocol parameters */
        !           217:        unsign16 rpb10;         /* Word 10 of protocol parameters */
        !           218:        unsign16 rpb11;         /* Word 11 of protocol parameters */
        !           219:        unsign16 rpb12;         /* Word 12 of protocol parameters */
        !           220: 
        !           221: };
        !           222: 
        !           223: /*
        !           224:  * NP Driver Request structure contains information about a request
        !           225:  * maintained solely by the driver. One per CQE, plus a header.
        !           226:  */
        !           227: 
        !           228:  struct npreq {
        !           229: 
        !           230:        struct npreq *forw;     /* Forward pointer for active list */
        !           231:        struct npreq *back;     /* Backward pointer for active list */
        !           232:        struct npreq *free;     /* Next member on free list */
        !           233:        struct CQE *element;    /* CQE associated with this request */
        !           234:        int flags;              /* Always useful */
        !           235:        int reqcnt;             /* Request count for reqtab */
        !           236:        int bufoffset;          /* Offset into buffer for turns */
        !           237:        int     bytecnt;        /* Number of bytes to transfer */
        !           238:        caddr_t virtmem;        /* Virtual address of buffer */
        !           239:        int     mapbase;        /* Address of the mapping register */
        !           240:        int     mapsize;        /* Size of mapped area */
        !           241:        caddr_t bufaddr;        /* Address of the user buffer */
        !           242:        struct buf buf;         /* Buf structure needed for mem. mgmt */
        !           243:        struct proc *procp;     /* Pointer to process of requestor */
        !           244:        caddr_t user;           /* Structure passed by user from itpuser.h */
        !           245:        int     (*intr)();      /* Ptr to routine to call at interrupt time */
        !           246:        int     int_param;      /* Paramater to be used by above routine */
        !           247: };
        !           248: 
        !           249: /*
        !           250:  * Npmaster structure, one per device, is used for boardwise centralization
        !           251:  * of relevant information including queues, I/O addresses and request pools.
        !           252:  */
        !           253: 
        !           254: struct npmaster {
        !           255: 
        !           256:        struct npmaster *next;  /* Linked list of these, NULL terminator */
        !           257:        struct npspace *shmemp; /* Shared memory address (driver <-> device) */
        !           258:        struct uba_device *devp; /* UBA Device for this unit */
        !           259:        struct NPREG   *iobase; /* I/O base address for this board */
        !           260:        struct npreq   *reqtab; /* Header for pool of CQE requests */
        !           261:        int     iomapbase;      /* Base index of I/O map reg's allocated */
        !           262:        int flags;              /* State of the Board */
        !           263:        int unit;               /* Unit number of this device */
        !           264:        int vector;             /* Interrupt vector for this unit */
        !           265: };
        !           266: 
        !           267: struct NPREG {
        !           268:        unsign16 CSR0;          /* Control Status Register 0 */
        !           269:        unsign16 CSR1;          /* Control Status Register 1 */
        !           270:        unsign16 CSR2;          /* Control Status Register 2 */
        !           271:        unsign16 CSR3;          /* Control Status Register 3 */
        !           272: 
        !           273: };
        !           274: 
        !           275: /*
        !           276:  * The following structures are used for communicating with the
        !           277:  * Intelligent Board and are located in Shared Memory.
        !           278:  */
        !           279: 
        !           280: /*
        !           281:  * Status Block
        !           282:  */
        !           283: 
        !           284: struct NpStat{
        !           285: 
        !           286:        unsign16 sb_drw;        /* Device Request Word */
        !           287:        unsign16 sb_hcw;        /* Host Configuration Word */
        !           288:        unsign16 sb_dcw;        /* Device Configuration Word */
        !           289:        unsign16 sb_dpm;        /* Device Protocol Mask */
        !           290:        unsign16 sb_dcq;        /* Offset to Device CQ */
        !           291:        unsign16 sb_hcq;        /* Offset to Host CQ */
        !           292: };
        !           293: 
        !           294: /*
        !           295:  * Command Queue, two per device. One is owned by the driver and the other
        !           296:  * is owned by the device.
        !           297:  */
        !           298: 
        !           299: struct CmdQue {
        !           300: 
        !           301:        unsign16 scanflag;      /* Scan Flag, MSB set if being scanned */
        !           302:        unsign16 chngflag;      /* Change Flag, MSB set by initiator */
        !           303:        unsign16 cq_wrap;       /* Offset to last CQE entry +2 */
        !           304:        unsign16 cq_add;        /* Offset to add a CQE to the queue */
        !           305:        unsign16 cq_rem;        /* Offset to remove a CQE from the queue */
        !           306:        unsign16 cq_cqe[NUMCQE]; /* Command Queue Element Offsets */
        !           307: };
        !           308: 
        !           309: /*
        !           310:  * Structure of the shared memory area per board. Declared this way to avoid
        !           311:  * compiler word alignment vagaries when computing offsets.
        !           312:  */
        !           313: 
        !           314: struct npspace {
        !           315: 
        !           316:        struct NpStat statblock;        /* Status Block */
        !           317:        struct CmdQue devcq;            /* Device's Command Queue */
        !           318:        struct CmdQue hostcq;           /* Host's Command Queue */
        !           319:        struct CQE elements[NUMCQE];    /* Shared Command Queue Elements */
        !           320:        unsign16 filler[8];             /* Here for 16 byte alignment */
        !           321: };
        !           322: 
        !           323: /*
        !           324:  * Structure of array of base addresses of I-Board controllers
        !           325:  * (See global data definitions in np.c)
        !           326:  */
        !           327: 
        !           328: struct npbase {
        !           329:        caddr_t baseaddr;
        !           330: };
        !           331: 
        !           332: /* State of the NP Driver as kept in NpState */
        !           333: 
        !           334: #define ICPAVAIL       0x01    /* ICP is waiting for a request */
        !           335: 
        !           336: /* Tells ICP Process that there are no more requests for this board */
        !           337: 
        !           338: #define BRDDONE 1
        !           339: 
        !           340: /* Flags used by the driver (npreq structure) to monitor status of requests */
        !           341: 
        !           342: #define REQDONE 0x01           /* Request completed */
        !           343: #define IOIFC   0x02           /* Internal Function Code Request */
        !           344: #define IOERR  0x04            /* Error on Request */
        !           345: #define NPPEND 0x08            /* Unused at this time */
        !           346: #define IOABORT 0x10           /* Request aborted by ICP */
        !           347: #define KERNREQ        0x20            /* Request was from the kernel */
        !           348: #define WANTREQ 0x40           /* Process is waiting for a npreq structure */
        !           349: #define NPUIO  0x80            /* Process doing physio */
        !           350: #define REQALOC 0x100           /* Request has been allocated */
        !           351: #define REQUSE  0x200           /* Request is in request queue */
        !           352: 
        !           353: /* Service Request Commands from the Intelligent Board */
        !           354: 
        !           355: #define NOREQ  0x00            /* No service requested */
        !           356: #define NPLOAD  0x01           /* Dump request */
        !           357: #define NPDUMP 0x02            /* Load request */
        !           358: #define NPPANIC        0x100           /* Panic request */
        !           359: 
        !           360: /* Definitions of Status returned from the I-Board */
        !           361: 
        !           362: #define NPDONE 0x01            /* Normal completion */
        !           363: #define NPIFC  0x00            /* Internal Function Code request */
        !           364: #define NPPERR  0x80           /* Protocol error */
        !           365: #define NPMERR 0x82            /* Memory allocation failure on I-Board */
        !           366: 
        !           367: /* Definitions of IFC type requests from I-Board */
        !           368: 
        !           369: #define NPLOCK 0x64            /* Lock the process's data area */
        !           370: #define NPUNLOCK 0xA4          /* Unlock the process */
        !           371: #define NPREMAP        0x124           /* Window turn */
        !           372: 
        !           373: /* Definition of flags for the Npmaster structure */
        !           374: 
        !           375: #define CSRPEND                0x01            /* CSR0 command pending */
        !           376: #define PANICREQ       0x02            /* Panic request */
        !           377: #define DUMPREQ                0x04            /* Dump request */
        !           378: #define LOADREQ                0x08            /* Load request */
        !           379: #define BOARDREQ       0x10            /* Any request by the board */
        !           380: #define BADBOARD       0x20            /* Board disabled */
        !           381: #define AVAILABLE      0x40            /* Board available */
        !           382: #define BRDRESET       0x80            /* Board is being reset */
        !           383: #define        PANIC1          0x100           /* Driver wants panic address */
        !           384: #define        PANIC2          0x200           /* Driver wants panic string */
        !           385: #define PANIC3         0x400           /* Clear first byte of panic string */
        !           386: #define LSTCMD          0x800           /* Clear last command during NPIO */
        !           387: #define SCANNING        0x1000          /* We are scanning for cqe's */
        !           388: 
        !           389: /*
        !           390:  * Debugging Constants
        !           391:  */
        !           392: 
        !           393: #define        DEBENTRY        0x0001          /* debug entry points */
        !           394: #define        DEBMEM          0x0002          /* debug memory */
        !           395: #define        DEBREQ          0x0004          /* debug requests */
        !           396: #define        DEBCQE          0x0008          /* debug cqe's */
        !           397: #define        DEBCQ           0x0010          /* debug cq's */
        !           398: #define        DEBMAINT        0x0020          /* debug maintainance requests */
        !           399: #define        DEBINTR         0x0040          /* debug interrupt routines */
        !           400: #define        DEBINIT         0x0080          /* debug initialization routines */
        !           401: #define        DEBIFC          0x0100          /* debug Internal function codes */
        !           402: #define        DEBIOCTL        0x0200          /* debug ioctl calls */
        !           403: #define        DEBOPEN         0x0400          /* debug open calls */
        !           404: #define        DEBIO           0x0800          /* debug read & write calls */
        !           405: #define        DEBCSR          0x1000          /* debug CSR commands */
        !           406: #define        DEBLOCK         0x2000          /* debug lock / unlock calls */
        !           407: #define NOBOARD                0x4000          /* debug user/host interface */
        !           408: #define DEBCANCEL       0x8000          /* debug cancel command */
        !           409: 
        !           410: /*
        !           411:  *     npreg.h version 1.3
        !           412:  *
        !           413:  *     This version retrieved: 8/18/86 @ 18:58:46
        !           414:  *         This delta created: 8/18/86 @ 18:27:42
        !           415:  */
        !           416: 
        !           417: /*
        !           418:  *                     NPREG.H
        !           419:  *
        !           420:  * This file contain definitions of specific hardware interest
        !           421:  * to be used when communicating with the NI1510 Network Processor
        !           422:  * Board. More complete information can be found in the NI1510
        !           423:  * Multibus compatible Ethernet Communications Processor Hardware 
        !           424:  * Specification.
        !           425:  */
        !           426: 
        !           427: /*
        !           428:  *     npcmd.h version 1.3
        !           429:  *
        !           430:  *     This version retrieved: 8/18/86 @ 18:58:45
        !           431:  *         This delta created: 8/18/86 @ 18:27:38
        !           432:  */
        !           433: #ifdef KERNEL
        !           434: #    define IoVOID 0
        !           435: #else
        !           436: #    define IoVOID IOC_VOID
        !           437: #endif
        !           438: 
        !           439: #define NPRESET                (IoVOID|0x01)   /* reset the board */
        !           440: #define        NPSTART         (IoVOID|0x04)   /* start board execution */
        !           441: #define        NPGPANIC        (IoVOID|0x05)   /* Get panic message */
        !           442: #define        NPINIT          (IoVOID|0x06)   /* initialize software on board */
        !           443: #define NPSTATS        (IoVOID|0x07)
        !           444: #define        NPRCSR0         (IoVOID|0x08)   /* read CSR0 */
        !           445: #define        NPRCSR1         (IoVOID|0x09)   /* read CSR1 */
        !           446: #define        NPRCSR2         (IoVOID|0x0a)   /* read CSR2 */
        !           447: #define        NPRCSR3         (IoVOID|0x0b)   /* read CSR3 */
        !           448: #define        NPWCSR0         (IoVOID|0x0c)   /* write CSR0 */
        !           449: #define        NPWCSR1         (IoVOID|0x0d)   /* write CSR1 */
        !           450: #define        NPWCSR2         (IoVOID|0x0e)   /* write CSR2 */
        !           451: #define        NPWCSR3         (IoVOID|0x0f)   /* write CSR3 */
        !           452: #define NPPOLL         (IoVOID|0x10)
        !           453: #define NPKILL         (IoVOID|0x11)
        !           454: #define        NPSETPROT       (IoVOID|0x12)   /* set the protocol to use */
        !           455: #define        NPSETBOARD      (IoVOID|0x13)   /* set board to use */
        !           456: #define        NPSETNPDEB      (IoVOID|0x14)   /* set nc debuging level */
        !           457: #define        NPSETADDR       (IoVOID|0x15)   /* set host address */
        !           458: #define        NPNETBOOT       (IoVOID|0x16)   /* boot from the network */
        !           459: #define NPSETLAST       (IoVOID|0x17)   /* set last command flag in NPIO */
        !           460: #define NPCLRICNT       (IoVOID|0x18)   /* clear interupt count */
        !           461: #define NPGETICNT       (IoVOID|0x19)   /* get interupt count */
        !           462: #define NPGETIVEC       (IoVOID|0x1a)   /* get interupt vector */
        !           463: #define NPMAPMEM        (IoVOID|0x1b)   /* map user memory to shmem */
        !           464: 
        !           465: #define NP_SET          1031            /* set memory mapping */
        !           466: #define NP_USET         1032            /* unset memory mapping */
        !           467: 
        !           468: struct np_mem {
        !           469:        long mem_type;
        !           470:        char *mem_addr;
        !           471:         long mem_count;
        !           472: } ;
        !           473: 
        !           474: #define NNPCNN         4       /* Number of connections per board */
        !           475: #define NPUNIT(a)      ((minor(a) >> 4) & 0x0F)
        !           476: #define NPCONN(a)      ((minor(a)) & 0x03)
        !           477: 
        !           478: #define TRUE           1
        !           479: #define FALSE          0
        !           480: 
        !           481: #define IBOOTADDR      0xF8000l        /* Addr of 80186 Boot ROM */
        !           482: #define        INETBOOT        0xF8087l
        !           483: #define IXEQADDR       0x400           /* Where to begin Board image XEQ */
        !           484: #define DIAGTIME       1200            /* Time for timeout /HZ seconds */
        !           485: 
        !           486: #define        DELAYTIME       1000000L                /* delay count */
        !           487: #define NPDELAY(N)     {register int n = (N) >> 1; while(--n > 0); }
        !           488: 
        !           489: /* Handy macros for talking to the Board */
        !           490: 
        !           491: #define RESET(x)       (WCSR3(x->iobase,0xff))
        !           492: #define CLEARINT(x)    {unsign16 y; y = RCSR2(x->iobase); }
        !           493: #define INTNI(x)       (WCSR1(x->iobase,0xFF))
        !           494: 
        !           495: /* Command and Status Register (CSR) Definitions */
        !           496: 
        !           497: /*
        !           498:  * CSR0 is the only direct means for data transfer between the host processor
        !           499:  * and the 3510. Access is controlled by the 80186 who sets the CSR1 Enable and
        !           500:  * Ready bits to allow writing here. Writing to this register will always
        !           501:  * result in an interrupt to the 80186.
        !           502:  */
        !           503: 
        !           504: /* 
        !           505:  * Bit definitions for CSR1.
        !           506:  */
        !           507: 
        !           508: #define NPRFU  0x01            /* Reserved for Future Use */
        !           509: #define NPHOK  0x02            /* Hardware OK */
        !           510: #define NPLAN  0x04            /* Logic 0 indicates operational LAN exists */
        !           511: #define NP_IP  0x08            /* Interrupt pending from this board */
        !           512: #define NP_IE  0x10            /* Interrupts enabled for this board */
        !           513: #define NPRDR  0x20            /* Set when 80186 writes data into CSR0 */
        !           514: #define NPRDY  0x40            /* CSR0 ready to accept data */
        !           515: #define NPENB  0x80            /* CSR0 available for use by the host */
        !           516: 
        !           517: /*
        !           518:  * Bit defintions for CSR0 Command Block
        !           519:  */
        !           520: 
        !           521: #define NPLST  0x20            /* Last Command */
        !           522: #define NPCMD  0x80            /* Shared Memory Address */
        !           523: #define NPBGN  0x200           /* Begin Execution in On-Board Memory */
        !           524: #define NPCBI  0x800           /* Interrupt at completion of Command Block */
        !           525: #define NPDMP  0x2000          /* Dump 80186 On-Board Memory to Multibus */
        !           526: #define NPLD   0x8000          /* Load 80186 On-board Memory from Multibus */
        !           527: 
        !           528: /*
        !           529:  * CSR0 Count definitions. These are the lengths of the Command Blocks for the
        !           530:  * CSR0 commands above (not counting the Command Word itself).
        !           531:  */
        !           532: 
        !           533: #define LSTCNT 0
        !           534: #define CMDCNT 2
        !           535: #define BGNCNT 2
        !           536: #define CBICNT 1
        !           537: #define DMPCNT 5
        !           538: #define LDCNT  5
        !           539: #define IOCNT  5
        !           540: 
        !           541: /* Macros for reading and writing CSR's (Control and Status Registers) */
        !           542: 
        !           543: #define        WCSR0(x,y)      ((x)->CSR0 = y)
        !           544: #define        WCSR1(x,y)      ((x)->CSR1 = y)
        !           545: #define        WCSR2(x,y)      ((x)->CSR2 = y)
        !           546: #define        WCSR3(x,y)      ((x)->CSR3 = y)
        !           547: 
        !           548: #define        RCSR0(x)        ((x)->CSR0)
        !           549: #define        RCSR1(x)        ((x)->CSR1)
        !           550: #define        RCSR2(x)        ((x)->CSR2)
        !           551: #define        RCSR3(x)        ((x)->CSR3)
        !           552: 
        !           553: struct npconn {
        !           554: 
        !           555:        struct npmaster *unit;  /* Unit number (board) of this connection */
        !           556:        unsign16 protocol;      /* Protocol used on this connection */
        !           557:        struct buf np_wbuf;     /* write buf structure for raw access */
        !           558:        struct buf np_rbuf;     /* read buf structure for raw access */
        !           559: };
        !           560: 
        !           561: /* ICP Board Requests */
        !           562: 
        !           563: #define ICPLOAD  0x02
        !           564: #define ICPDUMP  0x03
        !           565: #define ICPPANIC 0x05
        !           566: #define ICPPOLL  0x10
        !           567: 
        !           568: /*
        !           569:  *     npdebug.h version 1.3
        !           570:  *
        !           571:  *     This version retrieved: 8/18/86 @ 18:58:46
        !           572:  *         This delta created: 8/18/86 @ 18:27:39
        !           573:  */
        !           574: 
        !           575: /*
        !           576:  * Debugging Constants
        !           577:  */
        !           578: 
        !           579: #define        DEBENTRY        0x0001          /* debug entry points */
        !           580: #define        DEBMEM          0x0002          /* debug memory */
        !           581: #define        DEBREQ          0x0004          /* debug requests */
        !           582: #define        DEBCQE          0x0008          /* debug cqe's */
        !           583: #define        DEBCQ           0x0010          /* debug cq's */
        !           584: #define        DEBMAINT        0x0020          /* debug maintainance requests */
        !           585: #define        DEBINTR         0x0040          /* debug interrupt routines */
        !           586: #define        DEBINIT         0x0080          /* debug initialization routines */
        !           587: #define        DEBIFC          0x0100          /* debug Internal function codes */
        !           588: #define        DEBIOCTL        0x0200          /* debug ioctl calls */
        !           589: #define        DEBOPEN         0x0400          /* debug open calls */
        !           590: #define        DEBIO           0x0800          /* debug read & write calls */
        !           591: #define        DEBCSR          0x1000          /* debug CSR commands */
        !           592: #define        DEBLOCK         0x2000          /* debug lock / unlock calls */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.