Annotation of researchv10dc/lsys/sys/bvp.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * BVP (BI VAX port) definitions
        !             3:  * used by the NI (DEBNA) driver,
        !             4:  * and perhaps eventually by the BVP MSCP port
        !             5:  */
        !             6: 
        !             7: typedef struct quadque {
        !             8:        struct quadque *head, *tail;
        !             9: } quadque;
        !            10: 
        !            11: /*
        !            12:  * port queue block
        !            13:  * one per port;
        !            14:  * must be page-aligned
        !            15:  */
        !            16: struct pqb {
        !            17:        quadque p_cmdq[4];      /* command queues */
        !            18:        quadque p_rspq;         /* response queue */
        !            19:        short p_vector;         /* interrupt vector, BR */
        !            20:        short p_nodmsk;         /* interrupt node mask */
        !            21:        long p_nfreeq;          /* number of free queues */
        !            22:        struct fqb *p_fqb;      /* fqp virtual address */
        !            23:        char pp_junk0[156];
        !            24:        long p_bvplvl;          /* BVP protocol version */
        !            25:        struct pqb *p_pqb;      /* pqb virtual self-pointer */
        !            26:        struct bdt *p_bdt;      /* bdt virtual address */
        !            27:        long p_bdtlen;          /* and size */
        !            28:        struct pte *p_spt;      /* system page table phys addr */
        !            29:        long p_sptlen;          /* and size */
        !            30:        struct pte *p_gpt;      /* global page table phys addr */
        !            31:        long p_gptlen;          /* and size */
        !            32:        long p_funcmask;        /* ?? */
        !            33:        char pp_junk1[24];
        !            34:        /* stuff filled in by port after init */
        !            35:        short p_maxdg;          /* max datagram size */
        !            36:        short p_maxmsg;         /* max message size */
        !            37:        long p_ucodetype;
        !            38:        long p_ucodevers;
        !            39:        long p_hwtype;
        !            40:        long p_vers[3];
        !            41:        char p_qelogo[216];     /* `queue entry logout area' */
        !            42: };
        !            43: 
        !            44: /*
        !            45:  * free queue block
        !            46:  */
        !            47: struct fqb {
        !            48:        long f_size;            /* max size of things in this queue */
        !            49:        long f_junk;            /* reserved, apparently */
        !            50:        quadque f_q;            /* the free queue itself */
        !            51: };
        !            52: 
        !            53: #define        NFREEQ  1
        !            54: 
        !            55: /*
        !            56:  * buffer descriptor
        !            57:  */
        !            58: struct bdt {
        !            59:        short b_flags;
        !            60:        short b_key;
        !            61:        long b_len;             /* length of buffer */
        !            62:        struct pte *b_pte;      /* relevant page table */
        !            63:        long b_sw;              /* reserved for software */
        !            64: };
        !            65: 
        !            66: #define        NBDT    1
        !            67: 
        !            68: /*
        !            69:  * bundle of data for one port
        !            70:  * the pqb must be page-aligned;
        !            71:  * stick this in a buffer,
        !            72:  * which means it must all fit in one
        !            73:  */
        !            74: struct bvpdata {
        !            75:        struct pqb p;
        !            76:        struct fqb f[NFREEQ+1]; /* +1 acct off-by-one mystery in controller */
        !            77:        struct bdt b[NBDT];
        !            78: };
        !            79: 
        !            80: /*
        !            81:  * port registers
        !            82:  */
        !            83: struct bvpregs {
        !            84:        long ctrl;
        !            85:        long stat;
        !            86:        long err;
        !            87:        long data;
        !            88:        /* on NI port only: */
        !            89:        long pudr;
        !            90:        unsigned char addr[6];  /* ethernet address */
        !            91: };
        !            92: 
        !            93: #define        MSREGS  0xf0    /* offset to storage port registers */
        !            94: #define        NIREGS  0x204   /* offset to NI port registers */
        !            95: 
        !            96: /*
        !            97:  * control bits
        !            98:  */
        !            99: #define        PCOWN   0x80    /* port own -- here is a command */
        !           100: #define        PCDS    8       /* shift data by eight bits */
        !           101: #define        PCINIT  1
        !           102: #define        PCENAB  2
        !           103: #define        PCCMDQ  6       /* command queue not empty */
        !           104: #define        PCFREQ  7       /* free queue not empty */
        !           105: 
        !           106: /*
        !           107:  * status bits
        !           108:  */
        !           109: #define        PSOWN   0x80000000      /* port own -- status valid */
        !           110: #define        PSSTD   0x20000000      /* self test done */
        !           111: #define        PSACC   0x10000000      /* adapter can communicate */
        !           112: #define        PSSTAT  0x70000         /* port state: */
        !           113: #define        SUNDEF  0x10000         /* undefined */
        !           114: #define        SINIT   0x20000         /* initialized */
        !           115: #define        SENAB   0x40000         /* enabled */
        !           116: #define        PSERR   0x40            /* error summary */
        !           117: 
        !           118: /*
        !           119:  * BVP packet headers
        !           120:  */
        !           121: 
        !           122: /*
        !           123:  * datagram
        !           124:  */
        !           125: struct bvpdg {
        !           126:        quadque q;      /* queue linkage */
        !           127:        long bd_sw0;    /* for software */
        !           128:        char bd_mbz;    /* must be zero */
        !           129:        char bd_sts;    /* BVP status */
        !           130:        char bd_opc;    /* BVP opcode */
        !           131:        char bd_flag;   /* BVP flags */
        !           132:        /* datagram header */
        !           133:        short bd_len;   /* length, starting at next byte */
        !           134:        char bd_dgsts;  /* datagram status */
        !           135:        char bd_sw1;    /* software */
        !           136:        long bd_sw2;    /* software */
        !           137:        long bd_ptdb;   /* proto type block index */
        !           138: };
        !           139: 
        !           140: /*
        !           141:  * message
        !           142:  */
        !           143: struct bvpmsg {
        !           144:        quadque q;      /* queue linkage */
        !           145:        long bd_sw0;    /* for software */
        !           146:        char bd_mbz;    /* must be zero */
        !           147:        char bd_sts;    /* BVP status */
        !           148:        char bd_opc;    /* BVP opcode */
        !           149:        char bd_flag;   /* BVP flags */
        !           150:        /* message header */
        !           151:        short bm_len;   /* length, from next byte */
        !           152:        char bm_opc;    /* message opcode */
        !           153:        char bm_nists;  /* message/NI status */
        !           154:        long bm_sw1;    /* software */
        !           155: };
        !           156: 
        !           157: #define        BVPHSIZE 18     /* sizeof(whole packet) == bd_len + BVPHSIZE */
        !           158: 
        !           159: /*
        !           160:  * BVP opcodes
        !           161:  */
        !           162: #define        BVPSNDDG        1       /* send datagram (or ack) */
        !           163: #define        BVPSNDMSG       2       /* send message */
        !           164: #define        BVPSNDDGI       3       /* send immediate datagram (or ack) */
        !           165: #define        BVPRCVDG        33      /* received datagram */
        !           166: #define        BVPRCVMSG       34      /* received message */
        !           167: #define        BVPRCVDGI       35      /* received immediate datagram */
        !           168: 
        !           169: /*
        !           170:  * BVP flags
        !           171:  */
        !           172: #define        BVPRSP  01              /* response required */
        !           173: 
        !           174: /*
        !           175:  * NI message opcodes
        !           176:  */
        !           177: #define        NIWPARAM        3       /* write device parameters */
        !           178: #define        NISTPTDB        7       /* set proto data block */
        !           179: #define        NICLPTDB        8       /* clear proto data block */
        !           180: 
        !           181: 
        !           182: /*
        !           183:  * status codes
        !           184:  */
        !           185: #define        BVPSUC  0       /* BVP success */
        !           186: #define        NISUC   0       /* NI success */
        !           187: 
        !           188: /*
        !           189:  * data for STPTDB
        !           190:  */
        !           191: struct stptdb {
        !           192:        short pt_proto;         /* protocol number */
        !           193:        char pt_fqi;            /* free queue index */
        !           194:        char pt_flag;           /* flags */
        !           195:        long pt_id;             /* id number for this ptdb */
        !           196:        short pt_mcalen;
        !           197:        short pt_mcamax;
        !           198:        char pt_mcalist[8];
        !           199: };
        !           200: 
        !           201: /*
        !           202:  * pt_flag
        !           203:  */
        !           204: #define        PTABM   0x20    /* accept broadcast messages */
        !           205: #define        PTAUP   0x40    /* accept unknown protocols */
        !           206: #define        PTAAM   0x80    /* accept all multicasts */
        !           207: 
        !           208: /*
        !           209:  * software data structures
        !           210:  */
        !           211: struct bvp {
        !           212:        struct bvpdata *d;
        !           213:        struct bvpregs *r;
        !           214:        struct biic *rb;
        !           215:        struct buf *dbuf;
        !           216:        struct bvpregs rsave;   /* for debugging */
        !           217: };

unix.superglobalmegacorp.com

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