/* @(#)cg9var.h	1.10 90/03/22 SMI */

/* Copyright (c) 1989 by Sun Microsystems, Inc.  */

/*
 *	CG9 Header File
 *	Describe "Private Data" of CG9 Pixrect,  also external
 *	references to pixrect operation
 */

#ifndef	cg9var_DEFINED
#define	cg9var_DEFINED

#ifndef SVR4
#include	<sundev/cg9reg.h>
#endif /* SVR4 */
#include	<pixrect/memvar.h>
#ifndef SVR4
#include	<sunwindow/cms.h>	/* colormapseg */
#else
#include <sys/cms.h>
#endif /* SVR4 */

/* description of single CG9 frame buffer */

struct cg9fb {
	short			group;	/* plane group implemented */
	short			depth;	/* depth, bits */
	struct mprp_data	mprp;	/* memory pixrect data */
};

#define	CG_TYPE			3	/* for dev_specific stamp of fb.type */
#define	CG_SIZE			4	/* for dev_specific stamp of fb size */
#define	CG9_NFBS		3	/* number of frame buffers in a CG9 */

/*  CG9  Pixrect private data */

struct cg9_data {
	struct mprp_data	mprp;	/* memory pixrect simulator */
	int			flags;	/* misc. flags */
	int			planes;	/* current group and mask */
	int			fd;	/* file descriptor */
	short			active;	/* active fb no. */
	struct	cg9_control_sp	*ctrl_sp;
	struct	cg9fb		fb[CG9_NFBS];	/* frame buffer info */
	int			windowfd;	/* if 8-bit indexed pw */
	struct	colormapseg	cms;		/* if 8-bit indexed pr */
	int			real_windowfd;	/* for dblbuf hack */
};

/* useful macros */
#define	cg9_d(pr)	((struct cg9_data *) ((pr)->pr_data))

#define CG9_PR_TO_MEM(src, mem)						\
    if (src && src->pr_ops != &mem_ops)					\
    {									\
	mem.pr_ops      = &mem_ops;					\
	mem.pr_size     = src->pr_size;					\
	mem.pr_depth    = src->pr_depth;				\
	mem.pr_data     = (char *) &cg9_d(src)->mprp;			\
	src             = &mem;						\
    }

#define	CG9_PR_TO_MEM32(pr, mem32_pr, mem32_pr_data)			\
    if (pr && pr->pr_ops != &mem_ops)					\
    {									\
	mem32_pr.pr_ops = &mem32_ops;					\
	mem32_pr.pr_size = pr->pr_size;					\
	mem32_pr.pr_depth = pr->pr_depth;				\
	mem32_pr_data.mprp = cg9_d(pr)->mprp;				\
	mem32_pr_data.plane_group = cg9_d(pr)->fb[cg9_d(pr)->active].group;\
	mem32_pr_data.fd = cg9_d(pr)->fd;				\
	mem32_pr_data.windowfd = cg9_d(pr)->windowfd;			\
	mem32_pr_data.cms = cg9_d(pr)->cms;				\
	mem32_pr.pr_data = (char *) &mem32_pr_data;			\
	pr = &mem32_pr;							\
    }

extern struct pixrectops cg9_ops;
int		cg9_putcolormap();
int		cg9_putattributes();
int		cg9_rop();
int		cg9_ioctl();

#ifndef KERNEL
Pixrect		*cg9_make();
int		cg9_destroy();
Pixrect		*cg9_region();
int		cg9_getcolormap();
int		cg9_getattributes();
int		cg9_vector();
int		cg9_get();
int		cg9_put();

#endif /* 	!KERNEL */

#endif /* 	cg9var_DEFINED */
