changes for var. length sockaddrs; new routing; mv common ether input
[unix-history] / usr / src / sys / vax / if / if_uba.h
CommitLineData
da7c5cc6 1/*
0880b18e 2 * Copyright (c) 1982, 1986 Regents of the University of California.
5f9369d6 3 * All rights reserved.
da7c5cc6 4 *
5f9369d6
KB
5 * Redistribution and use in source and binary forms are permitted
6 * provided that the above copyright notice and this paragraph are
7 * duplicated in all such forms and that any documentation,
8 * advertising materials, and other materials related to such
9 * distribution and use acknowledge that the software was developed
10 * by the University of California, Berkeley. The name of the
11 * University may not be used to endorse or promote products derived
12 * from this software without specific prior written permission.
13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16 *
17 * @(#)if_uba.h 7.3 (Berkeley) %G%
da7c5cc6 18 */
4ad6429c
BJ
19
20/*
21 * Structure and routine definitions
22 * for UNIBUS network interfaces.
23 */
24
b454c3ea 25#define IF_MAXNUBAMR 10
4ad6429c 26/*
822a4f2c
MK
27 * Each interface has structures giving information
28 * about UNIBUS resources held by the interface
29 * for each send and receive buffer.
4ad6429c
BJ
30 *
31 * We hold IF_NUBAMR map registers for datagram data, starting
32 * at ifr_mr. Map register ifr_mr[-1] maps the local network header
33 * ending on the page boundary. Bdp's are reserved for read and for
34 * write, given by ifr_bdp. The prototype of the map register for
35 * read and for write is saved in ifr_proto.
36 *
37 * When write transfers are not full pages on page boundaries we just
38 * copy the data into the pages mapped on the UNIBUS and start the
39 * transfer. If a write transfer is of a (1024 byte) page on a page
40 * boundary, we swap in UNIBUS pte's to reference the pages, and then
41 * remap the initial pages (from ifu_wmap) when the transfer completes.
42 *
43 * When read transfers give whole pages of data to be input, we
44 * allocate page frames from a network page list and trade them
45 * with the pages already containing the data, mapping the allocated
46 * pages to replace the input pages for the next UNIBUS data input.
47 */
822a4f2c
MK
48
49/*
50 * Information per interface.
51 */
52struct ifubinfo {
53 short iff_uban; /* uba number */
54 short iff_hlen; /* local net header length */
63503d24
MK
55 struct uba_regs *iff_uba; /* uba adaptor regs, in vm */
56 struct pte *iff_ubamr; /* uba map regs, in vm */
822a4f2c
MK
57 short iff_flags; /* used during uballoc's */
58};
59
60/*
61 * Information per buffer.
62 */
63struct ifrw {
64 caddr_t ifrw_addr; /* virt addr of header */
3ab9cb88
MK
65 short ifrw_bdp; /* unibus bdp */
66 short ifrw_flags; /* type, etc. */
67#define IFRW_W 0x01 /* is a transmit buffer */
822a4f2c
MK
68 int ifrw_info; /* value from ubaalloc */
69 int ifrw_proto; /* map register prototype */
70 struct pte *ifrw_mr; /* base of map registers */
71};
72
73/*
74 * Information per transmit buffer, including the above.
75 */
76struct ifxmt {
77 struct ifrw ifrw;
78 caddr_t ifw_base; /* virt addr of buffer */
79 struct pte ifw_wmap[IF_MAXNUBAMR]; /* base pages for output */
80 struct mbuf *ifw_xtofree; /* pages being dma'd out */
81 short ifw_xswapd; /* mask of clusters swapped */
92441f6e 82 short ifw_nmr; /* number of entries in wmap */
822a4f2c
MK
83};
84#define ifw_addr ifrw.ifrw_addr
85#define ifw_bdp ifrw.ifrw_bdp
3ab9cb88 86#define ifw_flags ifrw.ifrw_flags
822a4f2c
MK
87#define ifw_info ifrw.ifrw_info
88#define ifw_proto ifrw.ifrw_proto
89#define ifw_mr ifrw.ifrw_mr
90
91/*
92 * Most interfaces have a single receive and a single transmit buffer,
93 * and use struct ifuba to store all of the unibus information.
94 */
95struct ifuba {
96 struct ifubinfo ifu_info;
97 struct ifrw ifu_r;
98 struct ifxmt ifu_xmt;
4ad6429c 99};
8a13b737 100
822a4f2c
MK
101#define ifu_uban ifu_info.iff_uban
102#define ifu_hlen ifu_info.iff_hlen
103#define ifu_uba ifu_info.iff_uba
63503d24 104#define ifu_ubamr ifu_info.iff_ubamr
822a4f2c
MK
105#define ifu_flags ifu_info.iff_flags
106#define ifu_w ifu_xmt.ifrw
107#define ifu_xtofree ifu_xmt.ifw_xtofree
108
8a13b737 109#ifdef KERNEL
822a4f2c
MK
110#define if_ubainit(ifuba, uban, hlen, nmr) \
111 if_ubaminit(&(ifuba)->ifu_info, uban, hlen, nmr, \
8011f5df 112 &(ifuba)->ifu_r, 1, &(ifuba)->ifu_xmt, 1)
822a4f2c
MK
113#define if_rubaget(ifu, totlen, off0, ifp) \
114 if_ubaget(&(ifu)->ifu_info, &(ifu)->ifu_r, totlen, off0, ifp)
115#define if_wubaput(ifu, m) \
8011f5df 116 if_ubaput(&(ifu)->ifu_info, &(ifu)->ifu_xmt, m)
822a4f2c 117struct mbuf *if_ubaget();
8a13b737 118#endif