2.11BSD/sys/h/uba.h

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

/*
 * Copyright (c) 1986 Regents of the University of California.
 * All rights reserved.  The Berkeley software License Agreement
 * specifies the terms and conditions for redistribution.
 *
 *	@(#)uba.h	1.2 (2.11BSD GTE) 1/3/93
 */

/*
 *	Structure to access UNIBUS map registers.
 */

struct	ubmap	{
	short	ub_lo;
	short	ub_hi;
};

#ifdef UCB_METER
/*
 *	Structure for metering mapalloc performance.
 */
struct	ubmeter {
	long	ub_calls;	/* total # of calls to mapalloc */
	long	ub_remaps;	/* total # of buffer remappings */
	long	ub_fails;	/* total # of allocation failures */
	long	ub_pages;	/* total # of pages allocated */
};
#endif

#define	UBMAP	((struct ubmap *) 0170200)
#define	UBPAGE	020000			/* size of UNIBUS map segment */

/*
 *	BUF_UBADDR is the UNIBUS address of buffers
 *	if we have a UNIBUS map, as distinguished from bpaddr,
 *	which is the physical address in clicks.
 */
#define	BUF_UBADDR	020000

/*
 *	Bytes to UNIBUS pages.
 */
#define	btoub(b)	((((long)(b)) + ((long)(UBPAGE - 1))) / ((long)UBPAGE))

/*
 *	Number of UNIBUS registers required by n objects of size s.
 */
#define	nubreg(n,s)	(((long) (n) * (long) (s) +		\
			((long) (UBPAGE - 1))) / (long) UBPAGE)

/*
 *	Set UNIBUS register r to point at physical address p (in bytes).
 */
#define	setubregno(r,p)	{					\
				UBMAP[r].ub_lo	= loint(p);	\
				UBMAP[r].ub_hi	= hiint(p);	\
			}

/*
 *	Point the appropriate UNIBUS register at a kernel
 *	virtual data address (in clicks).  V must be less
 *	than btoc(248K).
 */
#define	pointubreg(v,sep)	{	ubadr_t	x; \
					short	regno; \
					regno	= ((v) >> 7) & 037; \
					x	= (ubadr_t) (v) & ~01; \
					UBMAP[regno].ub_lo	= loint (x); \
					UBMAP[regno].ub_hi	= hiint (x); \
				}

#ifdef KERNEL
extern	short	ubmap;			/* Do we have UNIBUS registers? */
extern	memaddr	bpaddr;			/* physical click-address of buffers */
extern	struct map	ub_map[];
extern	int	ub_wantmr;
#endif