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