Annotation of 43BSD/sys/vaxif/if_uba.h, revision 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_uba.h    7.1 (Berkeley) 6/5/86
        !             7:  */
        !             8: 
        !             9: /*
        !            10:  * Structure and routine definitions
        !            11:  * for UNIBUS network interfaces.
        !            12:  */
        !            13: 
        !            14: #define        IF_MAXNUBAMR    10
        !            15: /*
        !            16:  * Each interface has structures giving information
        !            17:  * about UNIBUS resources held by the interface
        !            18:  * for each send and receive buffer.
        !            19:  *
        !            20:  * We hold IF_NUBAMR map registers for datagram data, starting
        !            21:  * at ifr_mr.  Map register ifr_mr[-1] maps the local network header
        !            22:  * ending on the page boundary.  Bdp's are reserved for read and for
        !            23:  * write, given by ifr_bdp.  The prototype of the map register for
        !            24:  * read and for write is saved in ifr_proto.
        !            25:  *
        !            26:  * When write transfers are not full pages on page boundaries we just
        !            27:  * copy the data into the pages mapped on the UNIBUS and start the
        !            28:  * transfer.  If a write transfer is of a (1024 byte) page on a page
        !            29:  * boundary, we swap in UNIBUS pte's to reference the pages, and then
        !            30:  * remap the initial pages (from ifu_wmap) when the transfer completes.
        !            31:  *
        !            32:  * When read transfers give whole pages of data to be input, we
        !            33:  * allocate page frames from a network page list and trade them
        !            34:  * with the pages already containing the data, mapping the allocated
        !            35:  * pages to replace the input pages for the next UNIBUS data input.
        !            36:  */
        !            37: 
        !            38: /*
        !            39:  * Information per interface.
        !            40:  */
        !            41: struct ifubinfo {
        !            42:        short   iff_uban;                       /* uba number */
        !            43:        short   iff_hlen;                       /* local net header length */
        !            44:        struct  uba_regs *iff_uba;              /* uba regs, in vm */
        !            45:        short   iff_flags;                      /* used during uballoc's */
        !            46: };
        !            47: 
        !            48: /*
        !            49:  * Information per buffer.
        !            50:  */
        !            51: struct ifrw {
        !            52:        caddr_t ifrw_addr;                      /* virt addr of header */
        !            53:        short   ifrw_bdp;                       /* unibus bdp */
        !            54:        short   ifrw_flags;                     /* type, etc. */
        !            55: #define        IFRW_W  0x01                            /* is a transmit buffer */
        !            56:        int     ifrw_info;                      /* value from ubaalloc */
        !            57:        int     ifrw_proto;                     /* map register prototype */
        !            58:        struct  pte *ifrw_mr;                   /* base of map registers */
        !            59: };
        !            60: 
        !            61: /*
        !            62:  * Information per transmit buffer, including the above.
        !            63:  */
        !            64: struct ifxmt {
        !            65:        struct  ifrw ifrw;
        !            66:        caddr_t ifw_base;                       /* virt addr of buffer */
        !            67:        struct  pte ifw_wmap[IF_MAXNUBAMR];     /* base pages for output */
        !            68:        struct  mbuf *ifw_xtofree;              /* pages being dma'd out */
        !            69:        short   ifw_xswapd;                     /* mask of clusters swapped */
        !            70:        short   ifw_nmr;                        /* number of entries in wmap */
        !            71: };
        !            72: #define        ifw_addr        ifrw.ifrw_addr
        !            73: #define        ifw_bdp         ifrw.ifrw_bdp
        !            74: #define        ifw_flags       ifrw.ifrw_flags
        !            75: #define        ifw_info        ifrw.ifrw_info
        !            76: #define        ifw_proto       ifrw.ifrw_proto
        !            77: #define        ifw_mr          ifrw.ifrw_mr
        !            78: 
        !            79: /*
        !            80:  * Most interfaces have a single receive and a single transmit buffer,
        !            81:  * and use struct ifuba to store all of the unibus information.
        !            82:  */
        !            83: struct ifuba {
        !            84:        struct  ifubinfo ifu_info;
        !            85:        struct  ifrw ifu_r;
        !            86:        struct  ifxmt ifu_xmt;
        !            87: };
        !            88: 
        !            89: #define        ifu_uban        ifu_info.iff_uban
        !            90: #define        ifu_hlen        ifu_info.iff_hlen
        !            91: #define        ifu_uba         ifu_info.iff_uba
        !            92: #define        ifu_flags       ifu_info.iff_flags
        !            93: #define        ifu_w           ifu_xmt.ifrw
        !            94: #define        ifu_xtofree     ifu_xmt.ifw_xtofree
        !            95: 
        !            96: #ifdef         KERNEL
        !            97: #define        if_ubainit(ifuba, uban, hlen, nmr) \
        !            98:                if_ubaminit(&(ifuba)->ifu_info, uban, hlen, nmr, \
        !            99:                        &(ifuba)->ifu_r, 1, &(ifuba)->ifu_xmt, 1)
        !           100: #define        if_rubaget(ifu, totlen, off0, ifp) \
        !           101:                if_ubaget(&(ifu)->ifu_info, &(ifu)->ifu_r, totlen, off0, ifp)
        !           102: #define        if_wubaput(ifu, m) \
        !           103:                if_ubaput(&(ifu)->ifu_info, &(ifu)->ifu_xmt, m)
        !           104: struct mbuf *if_ubaget();
        !           105: #endif

unix.superglobalmegacorp.com

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