home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / sys / vax / if / if_hy.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-05-08  |  10.8 KB  |  337 lines

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