/*
 * @DEC_COPYRIGHT@
 */
/*
 * HISTORY
 * $Log:	if_uba.h,v $
 * Revision 1.1.4.2  92/03/11  14:05:23  Brian_Harrigan
 * 	Port from ultrix to AG
 * 	[92/03/11  13:50:35  Brian_Harrigan]
 * 
 * Revision 1.1.1.2  92/02/23  17:31:04  Brian_Harrigan
 * 	Ported from ULTRIX
 * 
 * $EndLog$
 */
/* ------------------------------------------------------------------------
 * Modification History: /sys/vaxif/if_uba.h
 *
 * 11-jul-85 -- jaw
 *	fix bua/bda map registers.
 *
 * 19-Jun-85 -- jaw
 *	VAX8200 name change.
 * 
 * 13 Mar 85 -- Jaw
 * 	add support for VAX8200 and bua.	
 *
 * -----------------------------------------------------------------------
 */

/*
 * Structure and routine definitions
 * for UNIBUS network interfaces.
 */

#define	IF_MAXNUBAMR	10
/*
 * Each interface has one of these structures giving information
 * about UNIBUS resources held by the interface.
 *
 * We hold IF_NUBAMR map registers for datagram data, starting
 * at ifr_mr.  Map register ifr_mr[-1] maps the local network header
 * ending on the page boundary.  Bdp's are reserved for read and for
 * write, given by ifr_bdp.  The prototype of the map register for
 * read and for write is saved in ifr_proto.
 *
 * When write transfers are not full pages on page boundaries we just
 * copy the data into the pages mapped on the UNIBUS and start the
 * transfer.  If a write transfer is of a (1024 byte) page on a page
 * boundary, we swap in UNIBUS pte's to reference the pages, and then
 * remap the initial pages (from ifu_wmap) when the transfer completes.
 *
 * When read transfers give whole pages of data to be input, we
 * allocate page frames from a network page list and trade them
 * with the pages already containing the data, mapping the allocated
 * pages to replace the input pages for the next UNIBUS data input.
 */

struct	ifuba {
	short	ifu_uban;			/* uba number */
	short	ifu_hlen;			/* local net header length */
	struct	uba_regs *ifu_uba;		/* uba regs, in vm */
	struct ifrw {
		caddr_t	ifrw_addr;		/* virt addr of header */
		int	ifrw_bdp;		/* unibus bdp */
		int	ifrw_info;		/* value from ubaalloc */
		int	ifrw_proto;		/* map register prototype */
		struct	pt_entry *ifrw_mr;		/* base of map registers */
	} ifu_r, ifu_w;
	struct	pt_entry ifu_wmap[IF_MAXNUBAMR];	/* base pages for output */
	short	ifu_xswapd;			/* mask of clusters swapped */
	short	ifu_flags;			/* used during uballoc's */
	struct	mbuf *ifu_xtofree;		/* pages being dma'd out */
};

#ifdef 	KERNEL
struct	mbuf *if_rubaget();
#endif




