/*	@(#)bpp_var.h	1.1	94/10/31	SMI		*/
/*
 * 	Copyright (c) 1990 by Sun Microsystems, Inc.
 *
 *	Local variables header file for the bidirectional parallel port
 *	driver (bpp) for the Zebra SBus card.
 *
 */
#ifndef	_sbusdev_bpp_var_h
#define	_sbusdev_bpp_var_h


/*	#defines (not struct elements) below */

/* Other external ioctls are defined in bpp_io.h	*/
	/* FOR TEST - request fakeout simulate partial data transfer	*/
#define	BPPIOC_SETBC		_IOW(b, 7, u_int)
	/* FOR TEST - request value of DMA_BCNT at end of last data transfer */
#define	BPPIOC_GETBC		_IOR(b, 8, u_int)
	/* FOR TEST - get contents of device registers */
#define	BPPIOC_GETREGS		_IOR(b, 9, struct bpp_regs)
	/* FOR TEST - set special error code to simulate errors */
#define	BPPIOC_SETERRCODE	_IOW(b, 10, int)
	/* FOR TEST - get pointer to (fakely) "transferred" data */
#define	BPPIOC_GETFAKEBUF	_IOW(b, 11, u_char *)
	/* FOR TEST - test nested timeout  calls */
#define	BPPIOC_TESTTIMEOUT	_IO(b, 12)

#ifdef	notdef
/*  This define will use the hardware simulations in software */
#define	NO_BPP_HW
#endif	notdef


#define MAX_NBPP	10	/* Maximum units allowed to identify */ 
#define	BPP_PROM_NAME	"SUNW,bpp"	/* name string in FCode prom */


/*	Structure definitions and locals #defines below */

#define FAKE_BUF_SIZE (1024 * 128)	/* size of each DVMA transfer */

struct bpp_unit				/* Unit structure - one per unit */
{
	u_char		unit_open;		/* 1 means open.	*/
	u_char		open_inhibit;		/* 1 means inhibit.	*/
	u_char		versatec_allowed;	/* 1 means allow	*/
						/* versatec handshakes	*/
	int		openflags;		/* read-write flags	*/
						/* this unit opened with*/
	u_char		timeouts;		/* encoded pending timeouts */

	u_int		interrupt_pri;		/* Highest int pri (spl)*/
						/* for this unit only.  */
	int		saved_spl;		/* Saved spl while in   */
						/* critical sections    */
						/* for this unit only.  */
						/* At all other times   */
						/* the value is (-1).   */
	long		transfer_remainder;	/* number of bytes which */
						/* were not transferred */
						/* since they were across */
						/* the max DVMA boundary. */
						/* value is (0) when transfer */
						/* is within the boundary */
	struct dev_info 	*devinfo_p;	/* Node for this unit.  */
	struct bpp_regs 	*bpp_regs_p;	/* Device control regs. */
	struct bpp_transfer_parms transfer_parms;
						/* handshake and timing */
	struct bpp_pins		pins;		/* control pins 	*/
	struct bpp_error_status	error_stat;	/* snapshotted error cond */
	struct buf		buf;		/* For physio() calls.  */
};

/* defines for the timeouts field */
#define	NO_TIMEOUTS		0x00		/* No timeouts pending	*/
#define	TRANSFER_TIMEOUT	0x01		/* DVMA transfer */
#define	FAKEOUT_TIMEOUT		0x10		/* Hardware simulation	*/
#define	TEST1_TIMEOUT		0x20		/* Test timeout #1	*/
#define	TEST2_TIMEOUT		0x40		/* Test timeout #2	*/



/*	Function declarations below	*/
extern int	nulldev();
extern int	seltrue();

#endif	_sbusdev_bpp_var_h
