|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.