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

Defined variables

hy_state_names defined in line 291; used 5 times

Defined struct's

hy_hdr defined in line 52; used 6 times
hy_log defined in line 226; used 4 times
hy_route defined in line 118; used 16 times
hy_stat defined in line 191; used 10 times
hy_status defined in line 209; used 8 times
hylsetget defined in line 177; used 4 times
hym_hdr defined in line 75; used 48 times
hyr_hash defined in line 121; used 2 times
hyrsetget defined in line 160; used 4 times

Defined macros

CLEARSENT defined in line 286; used 1 times
ENDOPSENT defined in line 280; used 1 times
HYE_BINS defined in line 259; used 1 times
HYE_MAX defined in line 258; used 6 times
HYE_SIZE defined in line 260; used 1 times
HYGETELOG defined in line 186; never used
HYGETLOG defined in line 185; never used
HYGETROUTE defined in line 175; never used
HYLINK_IP defined in line 111; used 1 times
HYL_CANCEL defined in line 247; used 1 times
HYL_CATCHN defined in line 253; never used
HYL_CMD defined in line 245; used 1 times
HYL_CONTINUOUS defined in line 252; used 3 times
HYL_DISABLED defined in line 251; used 4 times
HYL_INT defined in line 246; used 1 times
HYL_IOCTL defined in line 249; used 1 times
HYL_NOP defined in line 239; used 1 times
HYL_RECV defined in line 244; used 1 times
HYL_RESET defined in line 248; used 1 times
HYL_SIZE defined in line 225; used 2 times
HYL_STATISTICS defined in line 242; used 1 times
HYL_STATUS defined in line 241; used 1 times
HYL_UP defined in line 240; used 1 times
HYL_XMIT defined in line 243; used 1 times
HYM_SWLEN defined in line 97; used 11 times
HYRHASH defined in line 172; used 1 times
HYRSIZE defined in line 116; used 4 times
HYR_DIR defined in line 167; used 1 times
HYR_GATE defined in line 168; used 1 times
HYR_INUSE defined in line 166; never used
HYR_LOOP defined in line 169; used 1 times
HYR_RLOOP defined in line 170; used 1 times
HYSETLOG defined in line 184; never used
HYSETROUTE defined in line 174; never used
H_ASSOC defined in line 104; used 3 times
H_LOOPBK defined in line 105; used 2 times
H_RLOOPBK defined in line 106; used 2 times
H_RTRUNKS defined in line 103; used 1 times
H_XTRUNKS defined in line 102; used 1 times
IDLE defined in line 278; used 15 times
MARKPORT defined in line 287; used 1 times
PORTNUM defined in line 223; used 3 times
RECVDATASENT defined in line 282; used 3 times
RECVSENT defined in line 281; used 3 times
RQ_ENDOP defined in line 265; used 5 times
RQ_MARKDOWN defined in line 269; used 2 times
RQ_MARKUP defined in line 270; used 5 times
RQ_REISSUE defined in line 266; used 5 times
RQ_STATISTICS defined in line 268; used 4 times
RQ_STATUS defined in line 267; used 6 times
RQ_XASSOC defined in line 272; used 4 times
RSTATSENT defined in line 288; used 1 times
STARTUP defined in line 277; used 5 times
STATSENT defined in line 279; used 1 times
WAITING defined in line 285; used 4 times
XMITDATASENT defined in line 284; used 3 times
XMITSENT defined in line 283; used 2 times
hyh_from defined in line 68; used 1 times
  • in line 93
hyh_from_adapter defined in line 70; used 1 times
  • in line 95
hyh_from_port defined in line 69; used 1 times
  • in line 94
hyh_to defined in line 64; used 1 times
  • in line 89
hyh_to_adapter defined in line 66; used 1 times
  • in line 91
hyh_to_port defined in line 65; used 1 times
  • in line 90
hym_access defined in line 85; used 4 times
hym_ctl defined in line 84; used 7 times
hym_from defined in line 93; used 3 times
hym_from_adapter defined in line 95; used 1 times
hym_from_port defined in line 94; never used
hym_mplen defined in line 82; used 11 times
hym_param defined in line 86; used 10 times
hym_to defined in line 89; used 4 times
hym_to_adapter defined in line 91; used 1 times
hym_to_port defined in line 90; never used
hym_type defined in line 87; used 4 times
hyr_access defined in line 136; used 1 times
hyr_ctl defined in line 135; used 1 times
hyr_dst defined in line 134; used 1 times
hyr_egate defined in line 146; used 1 times
hyr_nextgate defined in line 147; used 3 times
hyr_pgate defined in line 145; used 1 times

Usage of this include

Last modified: 1986-06-05
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 2257
Valid CSS Valid XHTML 1.0 Strict