Annotation of 43BSD/sys/vaxif/if_hy.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1982, 1986 Regents of the University of California.
                      3:  * All rights reserved.  The Berkeley software License Agreement
                      4:  * specifies the terms and conditions for redistribution.
                      5:  *
                      6:  *     @(#)if_hy.h     7.1 (Berkeley) 6/5/86
                      7:  */
                      8: 
                      9: /*
                     10:  * 4.2 BSD Unix Kernel - Vax Network Interface Support
                     11:  *
                     12:  * $Header: if_hy.h,v 10.0 84/06/30 19:51:21 steveg Stable $
                     13:  * $Locker:  $
                     14:  *
                     15:  * Modifications from Berkeley 4.2 BSD
                     16:  * Copyright (c) 1983, Tektronix Inc.
                     17:  * All Rights Reserved
                     18:  *
                     19:  *
                     20:  * $Log:       if_hy.h,v $
                     21:  *     Revision 10.0  84/06/30  19:51:21  steveg
                     22:  *     Big Build
                     23:  *     
                     24:  *     Revision 3.13  84/05/30  19:40:58  steveg
                     25:  *     update hy_stat to reflect new microcode
                     26:  *     
                     27:  *     Revision 3.12  84/05/30  19:06:57  steveg
                     28:  *     move driver state number definition here from if_hy.c
                     29:  *     
                     30:  *     Revision 3.11  84/05/30  18:56:15  steveg
                     31:  *     add definition of HYE_MAX and HYE_SIZE
                     32:  *     
                     33:  *     Revision 3.10  84/05/30  17:14:04  steveg
                     34:  *     add hyl_filter
                     35:  *     
                     36:  *     Revision 3.9  84/05/30  13:45:24  steveg
                     37:  *     rework logging
                     38:  *     
                     39:  *     Revision 3.8  84/05/04  05:18:59  steveg
                     40:  *     hyr_key now a u_long
                     41:  *     
                     42:  *     Revision 3.7  84/05/01  22:45:20  steveg
                     43:  *     add H_RLOOPBK for A710 remote end loopback command
                     44:  *     
                     45:  *
                     46:  */
                     47: 
                     48: 
                     49: /*
                     50:  * Structure of a HYPERchannel adapter header
                     51:  */
                     52: struct hy_hdr {
                     53:        short   hyh_ctl;                /* control */
                     54:        short   hyh_access;             /* access code */
                     55:        union {
                     56:                short   hyh_addr;
                     57:                char    hyh_baddr[2];
                     58:        } hyh_uto, hyh_ufrom;           /* to/from address */
                     59:        short   hyh_param;              /* parameter word */
                     60:        short   hyh_type;               /* record type */
                     61: };
                     62: 
                     63: 
                     64: #define hyh_to         hyh_uto.hyh_addr
                     65: #define hyh_to_port    hyh_uto.hyh_baddr[1]
                     66: #define hyh_to_adapter hyh_uto.hyh_baddr[0]
                     67: 
                     68: #define hyh_from       hyh_ufrom.hyh_addr
                     69: #define hyh_from_port  hyh_ufrom.hyh_baddr[1]
                     70: #define hyh_from_adapter hyh_ufrom.hyh_baddr[0]
                     71: 
                     72: /*
                     73:  * Structure of a HYPERchannel message header (from software)
                     74:  */
                     75: struct hym_hdr {
                     76:        struct {
                     77:                short   hymd_mplen;     /* message proper len, if associated data */
                     78:        } hym_d;
                     79:        struct  hy_hdr hym_h;   /* hardware header, MUST BE LAST */
                     80: };
                     81: 
                     82: #define hym_mplen      hym_d.hymd_mplen
                     83: 
                     84: #define hym_ctl                hym_h.hyh_ctl
                     85: #define hym_access     hym_h.hyh_access
                     86: #define hym_param      hym_h.hyh_param
                     87: #define hym_type       hym_h.hyh_type
                     88: 
                     89: #define hym_to         hym_h.hyh_to
                     90: #define hym_to_port    hym_h.hyh_to_port
                     91: #define hym_to_adapter hym_h.hyh_to_adapter
                     92: 
                     93: #define hym_from       hym_h.hyh_from
                     94: #define hym_from_port  hym_h.hyh_from_port
                     95: #define hym_from_adapter hym_h.hyh_from_adapter
                     96: 
                     97: #define HYM_SWLEN (sizeof(struct hym_hdr) - sizeof(struct hy_hdr))
                     98: 
                     99: /*
                    100:  * HYPERchannel header word control bits
                    101:  */
                    102: #define H_XTRUNKS      0x00F0  /* transmit trunks */
                    103: #define H_RTRUNKS      0x000F  /* remote trunks to transmit on for loopback */
                    104: #define H_ASSOC                0x0100  /* has associated data */
                    105: #define H_LOOPBK       0x00FF  /* loopback command */
                    106: #define H_RLOOPBK      0x008F  /* A710 remote loopback command */
                    107: 
                    108: /*
                    109:  * Hyperchannel record types
                    110:  */
                    111: #define HYLINK_IP      0       /* Internet Protocol Packet */
                    112: 
                    113: /*
                    114:  * Routing database
                    115:  */
                    116: #define HYRSIZE  37    /* max number of adapters in routing tables */
                    117: 
                    118: struct hy_route {
                    119:        time_t hyr_lasttime;            /* last update time */
                    120:        u_char hyr_gateway[256];
                    121:        struct hyr_hash {
                    122:                u_long  hyr_key;        /* desired address */
                    123:                u_short hyr_flags;      /* status flags - see below */
                    124:                u_short hyr_size;       /* number of entries */
                    125:                union {
                    126:                        /*
                    127:                         * direct entry (can get there directly)
                    128:                         */
                    129:                        struct {
                    130:                                u_short hyru_dst;       /* adapter number & port */
                    131:                                u_short hyru_ctl;       /* trunks to try */
                    132:                                u_short hyru_access;    /* access code (mostly unused) */
                    133:                        } hyr_d;
                    134: #define hyr_dst                hyr_u.hyr_d.hyru_dst
                    135: #define hyr_ctl                hyr_u.hyr_d.hyru_ctl
                    136: #define hyr_access     hyr_u.hyr_d.hyru_access
                    137:                        /*
                    138:                         * indirect entry (one or more hops required)
                    139:                         */
                    140:                        struct {
                    141:                                u_char hyru_pgate;      /* 1st gateway slot */
                    142:                                u_char hyru_egate;      /* # gateways */
                    143:                                u_char hyru_nextgate;   /* gateway to use next */
                    144:                        } hyr_i;
                    145: #define hyr_pgate      hyr_u.hyr_i.hyru_pgate
                    146: #define hyr_egate      hyr_u.hyr_i.hyru_egate
                    147: #define hyr_nextgate   hyr_u.hyr_i.hyru_nextgate
                    148:                } hyr_u;
                    149:        } hyr_hash[HYRSIZE];
                    150: };
                    151: 
                    152: /*
                    153:  * routing table set/get structure
                    154:  *
                    155:  * used to just pass the entire routing table through, but 4.2 ioctls
                    156:  * limit the data part of an ioctl to 128 bytes or so and use the
                    157:  * interface name to get things sent the right place.
                    158:  * see ../net/if.h for additional details.
                    159:  */
                    160: struct hyrsetget {
                    161:        char    hyrsg_name[IFNAMSIZ];   /* if name, e.g. "hy0" */
                    162:        struct hy_route *hyrsg_ptr;     /* pointer to routing table */
                    163:        unsigned        hyrsg_len;      /* size of routing table provided */
                    164: };
                    165: 
                    166: #define HYR_INUSE      0x01    /* entry in use */
                    167: #define HYR_DIR                0x02    /* direct entry */
                    168: #define HYR_GATE       0x04    /* gateway entry */
                    169: #define HYR_LOOP       0x08    /* hardware loopback entry */
                    170: #define HYR_RLOOP      0x10    /* remote adapter hardware loopback entry */
                    171: 
                    172: #define HYRHASH(x) (((x) ^ ((x) >> 16)) % HYRSIZE)
                    173: 
                    174: #define HYSETROUTE     _IOW(i, 0x80, struct hyrsetget)
                    175: #define HYGETROUTE     _IOW(i, 0x81, struct hyrsetget)
                    176: 
                    177: struct hylsetget {
                    178:        char    hylsg_name[IFNAMSIZ];   /* if name, e.g. "hy0" */
                    179:        int     hylsg_cmd;              /* logging command */
                    180:        caddr_t hylsg_ptr;              /* pointer to table */
                    181:        u_long  hylsg_len;              /* size of table provided */
                    182: };     
                    183: 
                    184: #define HYSETLOG       _IOW(i, 0x82, struct hylsetget)
                    185: #define HYGETLOG       _IOW(i, 0x83, struct hylsetget)
                    186: #define HYGETELOG      _IOW(i, 0x84, struct hylsetget)
                    187: 
                    188: /*
                    189:  * Structure of Statistics Record (counters)
                    190:  */
                    191: struct hy_stat {
                    192:        u_char  hyc_df0[3];             /* # data frames trunk 0 */
                    193:        u_char  hyc_df1[3];             /* # data frames trunk 1 */
                    194:        u_char  hyc_df2[3];             /* # data frames trunk 2 */
                    195:        u_char  hyc_df3[3];             /* # data frames trunk 3 */
                    196:        u_char  hyc_cancel[2];          /* # cancel operations */
                    197:        u_char  hyc_abort[2];           /* # aborts */
                    198:        u_char  hyc_ret0[3];            /* # retransmissions trunk 0 */
                    199:        u_char  hyc_ret1[3];            /* # retransmissions trunk 1 */
                    200:        u_char  hyc_ret2[3];            /* # retransmissions trunk 2 */
                    201:        u_char  hyc_ret3[3];            /* # retransmissions trunk 3 */
                    202:        u_char  hyc_atype[3];           /* adapter type and revision level */
                    203:        u_char  hyc_uaddr;              /* adapter unit number */
                    204: };
                    205: 
                    206: /*
                    207:  * Structure of the Status Record
                    208:  */
                    209: struct hy_status {
                    210:        u_char  hys_gen_status;         /* general status byte */
                    211:        u_char  hys_last_fcn;           /* last function code issued */
                    212:        u_char  hys_resp_trunk;         /* trunk response byte */
                    213:        u_char  hys_status_trunk;       /* trunk status byte */
                    214:        u_char  hys_recd_resp;          /* recieved response byte */
                    215:        u_char  hys_error;              /* error code */
                    216:        u_char  hys_caddr;              /* compressed addr of 1st msg on chain */
                    217:        u_char  hys_pad;                /* not used */
                    218: };
                    219: 
                    220: /*
                    221:  * Get port number from status record
                    222:  */
                    223: #define PORTNUM(p)     (((p)->hys_gen_status >> 6) & 0x03)
                    224: 
                    225: #define HYL_SIZE 16*1024
                    226: struct hy_log {
                    227:        struct  hy_log *hyl_self;
                    228:        u_char  hyl_enable;             /* logging enabled? */
                    229:        u_char  hyl_onerr;              /* state to enter on error */
                    230:        u_short hyl_wait;               /* number of bytes till next wakeup */
                    231:        u_short hyl_count;              /* number of samples till stop */
                    232:        u_short hyl_icount;             /* initial value of hyl_count */
                    233:        u_long  hyl_filter;             /* log items with specific bits set */
                    234:        u_char  *hyl_eptr;              /* &hy_log.hyl_buf[HYL_SIZE] */
                    235:        u_char  *hyl_ptr;               /* pointer into hyl_buf */
                    236:        u_char  hyl_buf[HYL_SIZE];      /* log buffer space */
                    237: };
                    238: 
                    239: #define HYL_NOP                0
                    240: #define HYL_UP         1       /* markup */
                    241: #define HYL_STATUS     2       /* status results (struct hy_status) */
                    242: #define HYL_STATISTICS 3       /* statistics (struct hy_stat) */
                    243: #define HYL_XMIT       4       /* packed being send (struct hym_hdr) */
                    244: #define HYL_RECV       5       /* recieved pkt (short len; struct hym_hdr) */
                    245: #define HYL_CMD                6       /* cmd issued (uchar cmd, state; short count) */
                    246: #define HYL_INT                7       /* interrupt (short csr, wcr) */
                    247: #define        HYL_CANCEL      8       /* cancel transmit attempt */
                    248: #define        HYL_RESET       9       /* hyinit or unibus reset */
                    249: #define        HYL_IOCTL       10      /* hyioctl */
                    250: 
                    251: #define HYL_DISABLED   0       /* logging disabled */
                    252: #define HYL_CONTINUOUS 1       /* continuous logging */
                    253: #define HYL_CATCHN     2       /* hyl_count transactions being captured */
                    254: 
                    255: /*
                    256:  * error code histograms
                    257:  */
                    258: #define        HYE_MAX         0x18            /* maximum adapter error code */
                    259: #define        HYE_BINS        4               /* number of command bins */
                    260: #define        HYE_SIZE  (HYE_MAX+1)*HYE_BINS  /* size of histogram buffer */
                    261: 
                    262: /*
                    263:  * Requests for service (in order by descending priority).
                    264:  */
                    265: #define RQ_ENDOP       001     /* end the last adapter function */
                    266: #define RQ_REISSUE     002     /* reissue previous cmd after status */
                    267: #define RQ_STATUS      004     /* get the status of the adapter */
                    268: #define RQ_STATISTICS  010     /* get the statistics of the adapter */
                    269: #define RQ_MARKDOWN    020     /* mark this adapter port down */
                    270: #define RQ_MARKUP      040     /* mark this interface up */
                    271: 
                    272: #define RQ_XASSOC      0100    /* associated data to transmit */
                    273: 
                    274: /* 
                    275:  * Driver states.
                    276:  */
                    277: #define        STARTUP         0       /* initial state (before fully there) */
                    278: #define        IDLE            1       /* idle state */
                    279: #define        STATSENT        2       /* status cmd sent to adapter */
                    280: #define        ENDOPSENT       3       /* end operation cmd sent */
                    281: #define        RECVSENT        4       /* input message cmd sent */
                    282: #define        RECVDATASENT    5       /* input data cmd sent */
                    283: #define        XMITSENT        6       /* transmit message cmd sent */
                    284: #define        XMITDATASENT    7       /* transmit data cmd sent */
                    285: #define        WAITING         8       /* waiting for messages */
                    286: #define        CLEARSENT       9       /* clear wait for message cmd sent */
                    287: #define MARKPORT       10      /* mark this host's adapter port down issued */
                    288: #define RSTATSENT      11      /* read statistics cmd sent to adapter */
                    289: 
                    290: #ifdef HYLOG
                    291: char *hy_state_names[] = {
                    292:        "Startup",
                    293:        "Idle",
                    294:        "Status Sent",
                    295:        "End op Sent",
                    296:        "Recieve Message Proper Sent",
                    297:        "Recieve Data Sent",
                    298:        "Transmit Message Proper Sent",
                    299:        "Transmit Data Sent",
                    300:        "Wait for Message Sent",
                    301:        "Clear Wait for Message Sent",
                    302:        "Mark Port Down Sent",
                    303:        "Read Statistics Sent"
                    304: };
                    305: #endif
                    306: 

unix.superglobalmegacorp.com

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