Annotation of researchv10dc/lsys/sys/bvp.h, revision 1.1.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.