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

Defined struct's

ifrw defined in line 51; used 4 times
  • in line 65(2), 85(2)
ifuba defined in line 83; never used
ifubinfo defined in line 41; used 2 times
  • in line 84(2)
ifxmt defined in line 64; used 2 times
  • in line 86(2)

Defined macros

IFRW_W defined in line 55; never used
IF_MAXNUBAMR defined in line 14; used 1 times
  • in line 67
if_rubaget defined in line 100; never used
if_ubainit defined in line 97; never used
if_wubaput defined in line 102; never used
ifu_flags defined in line 92; never used
ifu_hlen defined in line 90; never used
ifu_uba defined in line 91; never used
ifu_uban defined in line 89; never used
ifu_w defined in line 93; never used
ifu_xtofree defined in line 94; never used
ifw_addr defined in line 72; never used
ifw_bdp defined in line 73; never used
ifw_flags defined in line 74; never used
ifw_info defined in line 75; never used
ifw_mr defined in line 77; never used
ifw_proto defined in line 76; never used
Last modified: 1986-06-05
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1906
Valid CSS Valid XHTML 1.0 Strict