2.11BSD/sys/pdpif/if_de.h

Compare this file to the similar file:
Show the results in this format:

/*
 * SCCSID: @(#)if_de.h	1.1	(2.11BSD GTE)	12/31/93
 */

/* Header files and definitons to support multiple DEUNAs */

#include "socket.h"
#include "../net/if.h"
#include "../net/netisr.h"
#include "../net/route.h"

#ifdef INET
#include "../netinet/in.h"
#include "../netinet/in_systm.h"
#include "../netinet/in_var.h"
#include "../netinet/ip.h"
#include "../netinet/if_ether.h"
#endif		/* INET */

#ifdef NS
#include "../netns/ns.h"
#include "../netns/ns_if.h"
#endif		/* NS */

#include "../pdpif/if_dereg.h"
#include "../pdpuba/ubavar.h"
#include "../pdpif/if_uba.h"

/*
 * These numbers are based on the amount of space that is allocated
 * int netinit() to miobase, for 4 + 6, miosize must be 16384 instead
 * of the 8192 allocated originally.  m_ioget() gets a click address
 * within the allocated region.  NOTE: the UMR handling has been fixed
 * in 2.11BSD to allocate only the number of UMRs required by the size
 * of the m_ioget I/O region - a UMR per buffer is NO LONGER THE CASE!
 * Note that the size of a buffer is:
 * 1500 (ETHERMTU) + sizeof(ether_header) + some rounding from btoc() =
 * 1536 bytes or 24 clicks.
 */
 
#define	NXMT	4	/* number of transmit buffers */
#define	NRCV	6	/* number of receive buffers (must be > 1) */

#ifdef	DE_DO_MULTI
/*
 * Multicast address list structure
 */
struct de_m_add {
	u_char	dm_char[6];
};
#define	MULTISIZE	sizeof(struct de_m_add)
#define	NMULTI		10	/* # of multicast addrs on the DEUNA */
#endif		/* DE_DO_MULTI */

/*
 * The deuba structures generalizes the ifuba structure
 * to an arbitrary number of receive and transmit buffers.
 */
struct	deuba {
	u_short	ifu_hlen;		/* local net header length */
	struct	ifrw difu_r[NRCV];	/* receive information */
	struct	ifrw difu_w[NXMT];	/* transmit information */
	short	difu_flags;
};
/*
 * Ethernet software status per interface.
 *
 * Each interface is referenced by a network interface structure,
 * ds_if, which the routing code uses to locate the interface.
 * This structure contains the output queue for the interface, its address, ...
 * We also have, for each interface, a UBA interface structure, which
 * contains information about the UNIBUS resources held by the interface:
 * map registers, buffered data paths, etc.  Information is cached in this
 * structure for use by the if_uba.c routines in running the interface
 * efficiently.
 */
struct	de_softc {
	struct	arpcom ds_ac;		/* Ethernet common part */
#define	ds_if	ds_ac.ac_if		/* network-visible interface */
#define	ds_addr	ds_ac.ac_enaddr		/* hardware Ethernet address */
	char	ds_flags;		/* Has the board be initialized? */
#define	DSF_LOCK	1
#define	DSF_RUNNING	2
#define	DSF_SETADDR	4
	char	ds_devid;		/* device id DEUNA=0, DELUA=1 */
	ubadr_t	ds_ubaddr;		/* map info for incore structs */
	struct	deuba ds_deuba;		/* unibus resource structure */
	/* the following structures are always mapped in */
	struct	de_pcbb ds_pcbb;	/* port control block */
	struct	de_ring ds_xrent[NXMT];	/* transmit ring entrys */
	struct	de_ring ds_rrent[NRCV];	/* receive ring entrys */
	struct	de_udbbuf ds_udbbuf;	/* UNIBUS data buffer */
#ifdef	DE_DO_MULTI
	struct	de_m_add ds_multicast[NMULTI]; /* multicast addr list */
#endif		/* DE_DO_MULTI */

#ifdef	DE_DO_BCTRS
	struct	de_counters ds_counters;/* counter block */
#endif		/* DE_DO_BCTRS */

	/* end mapped area */
#define	INCORE_BASE(p)	((char *)&(p)->ds_pcbb)
#define	RVAL_OFF(n)	((char *)&de_softc[0].n - INCORE_BASE(&de_softc[0]))
#define	LVAL_OFF(n)	((char *)de_softc[0].n - INCORE_BASE(&de_softc[0]))
#define	PCBB_OFFSET	RVAL_OFF(ds_pcbb)
#define	XRENT_OFFSET	LVAL_OFF(ds_xrent)
#define	RRENT_OFFSET	LVAL_OFF(ds_rrent)
#define	UDBBUF_OFFSET	RVAL_OFF(ds_udbbuf)

#ifdef	DE_DO_MULTI
#define MULTI_OFFSET	RVAL_OFF(ds_multicast[0])
#endif		/* DE_DO_MULTI */

#ifdef	DE_DO_BCTRS
#define COUNTER_OFFSET	RVAL_OFF(ds_counters)
#endif		/* DE_DO_BCTRS */

#define	INCORE_SIZE	RVAL_OFF(ds_xindex)
	u_char	ds_xindex;		/* UNA index into transmit chain */
	u_char	ds_rindex;		/* UNA index into receive chain */
	u_char	ds_xfree;		/* index for next transmit buffer */
	u_char	ds_nxmit;		/* # of transmits in progress */

#ifdef	DE_DO_MULTI
	u_char	ds_muse[NMULTI];	/* multicast address use */
#endif		/* DE_DO_MULTI */

#ifdef	DE_DO_BCTRS
	long	ds_ztime;		/* time counters were last zeroed */
	u_short	ds_unrecog;		/* unrecognized frame destination */
#endif		/* DE_DO_BCTRS */
};

/*
 * These are the Ultrix ioctl's that are specific to this driver
 */

#ifdef	DE_DO_PHYSADDR
#define SIOCSPHYSADDR	_IOWR(i,23, struct ifreq)	/* Set phys. ad.*/
#define SIOCRPHYSADDR	_IOWR(i,28, struct ifdevea)	/* Read phy. ad.*/
#endif		/* DE_DO_PHYSADDR */

#ifdef	DE_DO_MULTI
#define SIOCADDMULTI	_IOWR(i,24, struct ifreq)	/* Add m.c. ad. */
#define SIOCDELMULTI	_IOWR(i,25, struct ifreq)	/* Dele. m.c.ad.*/
#endif		/* DE_DO_MULTI */

#ifdef	DE_DO_BCTRS
#define SIOCRDCTRS	_IOWR(i,26, struct ctrreq)	/* Read if cntr.*/
#define SIOCRDZCTRS	_IOWR(i,27, struct ctrreq)	/* Read/0 if c. */
#endif		/* DE_DO_BCTRS */

#ifdef DE_INT_LOOPBACK
#define SIOCDISABLBACK	_IOW(i,34, struct ifreq)	/* Cl.in.ex.lpb.*/
#define SIOCENABLBACK	_IOW(i,33, struct ifreq)	/* Set in.ex.lb.*/
#endif		/* DE_INT_LOOPBACK */