cmap_grab.h revision 830
1265N/A/* Copyright 1996 Sun Microsystems, Inc. All rights reserved.
1265N/A * Use is subject to license terms.
1265N/A *
1265N/A * Permission is hereby granted, free of charge, to any person obtaining a
1265N/A * copy of this software and associated documentation files (the
1244N/A * "Software"), to deal in the Software without restriction, including
1265N/A * without limitation the rights to use, copy, modify, merge, publish,
1244N/A * distribute, and/or sell copies of the Software, and to permit persons
1244N/A * to whom the Software is furnished to do so, provided that the above
1244N/A * copyright notice(s) and this permission notice appear in all copies of
1265N/A * the Software and that both the above copyright notice(s) and this
1265N/A * permission notice appear in supporting documentation.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
* OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
* INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
* Except as contained in this notice, the name of a copyright holder
* shall not be used in advertising or otherwise to promote the sale, use
* or other dealings in this Software without prior written authorization
* of the copyright holder.
*/
#pragma ident "@(#)cmap_grab.h 35.7 09/11/09 SMI"
/*
* cmap_grab.h - colormap grabber structures and information
*/
#ifndef _CMAP_GRAB_H
#define _CMAP_GRAB_H
/****
*
* Colormap grabber header file.
*
*
*
* Macros defined here:
*
* sh_cm_lock(infop)
* sh_cm_unlock(infop)
* lock and unlock colormap info page. 'infop' is the Grabbedcmap
* pointer returned by cmapgrab_grab()
*
* sh_cmapgrab_cookie(infop)
* returns the colormap info page cookie used to map the info page.
* this is the value that should be returned to the requesting
* client.
*
****/
#include <sys/types.h>
#ifdef MT
#include <synch.h>
#endif
#include "dga.h"
#include "dga_internal.h"
/* method to use to load colormaps */
typedef enum {
SUNWINDOWS_IOCTL=0, /* use /dev/winxx SunWindows device driver */
HW_DEVICE_IOCTL=1, /* use graphics hardware device driver */
HW_DEVICE_DIRECT=2 /* access hardware colormap directly */
} cmap_load_method;
#define CMMAGIC 0x434d4150 /* "CMAP" */
#define CMVERS 0
#define MAX_CM_DEVNAME 40 /* better not have long device names */
#define DGA_CM_DEV_INFO_SZ 132
/* device types, from sh_scr_dev.h */
#define SCR_DEV_GENERIC 0 /* generic class implementations */
#define SCR_DEV_MEM1 1 /* depth 1 memory framebuffer */
#define SCR_DEV_MEM8 2 /* depth 8 memory framebuffer */
#define SCR_DEV_MEM32 3 /* depth 32 memory framebuffer */
#define SCR_DEV_CG2 4 /* Sun CG2 framebuffer (depth 8) */
#define SCR_DEV_BW2 5 /* Sun BW2 framebuffer (depth 1) */
#define SCR_DEV_CG4 6 /* Sun CG4 framebuffer (1 or 8) */
#define SCR_DEV_CG6 7 /* Sun CG6 (Lego) */
#define SCR_DEV_CG3 8 /* Sun CG3 (Color RoadRunner) */
#define SCR_DEV_GPFB 9 /* GP1/GP+/GP2 framebuffer (depth 8) */
#define SCR_DEV_GP 10 /* GP1/GP+/GP2 accelerator */
#define SCR_DEV_CG5 11 /* Sun CG5 framebuffer (depth 8) */
#define SCR_DEV_CG8 12 /* Sun CG8 framebuffer (depth 8, 24 bit color)*/
#define SCR_DEV_GT 13 /* Sun GT (Hawk) depth 1, 8, and 24 bit */
#define SCR_DEV_CG12 14 /* Sun CG12 (Egret) depth 1, 8, and 24 bit */
#define SCR_DEV_REC 15 /* Recording device type */
#define SCR_DEV_SMC 16 /* Sun SMC/MDI (SPAM) depth 1, 8, 24-bit */
#define SCR_DEV_LAST 16
/* info in shared memory */
typedef struct _grabbedcmap
{
/* version 0 info starts here */
long cm_magic ; /* "CMAP" = 0x434d4150 ("PAMC" on 386i) */
long cm_version ; /* 0 */
int cm_count ; /* change count */
struct _grabbedcmap *cm_ptr ; /* self-reference */
u_long cm_cmap ; /* X11 colormap ID */
u_long cm_cookie ; /* lock-page cookie */
/* server-specific info, not meaningful to client */
int cm_sinfofd ;
int cm_sdevfd ;
u_long *cm_slockp ;
u_long *cm_sunlockp ;
int cm_slockcnt ;
int cm_clientcnt ;
int cm_filesuffix ;
caddr_t cm_shras ;
char cm_devname[MAX_CM_DEVNAME] ;
char cm_lockdevname[MAX_CM_DEVNAME] ;
int cm_default ; /* is it the default colormap for this screen */
int cm_installed ; /* flag: colormap is installed in HW */
cmap_load_method cm_load_method ; /* see typedef above */
char cm_sunwindows_def_devname[MAX_CM_DEVNAME] ; /* device name, */
char cm_sunwindows_def_cmapname[MAX_CM_DEVNAME] ;/* cmap name, and */
int cm_sunwindows_def_cmapsize; /* size of server's SunWindows
color map "xnews_default" */
char cm_sunwindows_inst_devname[MAX_CM_DEVNAME] ; /* device name, */
char cm_sunwindows_inst_cmapname[MAX_CM_DEVNAME];/* cmap name, and */
int cm_sunwindows_inst_cmapsize; /* size of server's SunWindows
color map "xnews_installed" */
int cm_fbtype ; /* reserved */
int cm_reallen ; /* colormap hardware size */
int cm_start ; /* first valid location */
int cm_len ; /* number of valid locations */
int cm_cmapnum ; /* [0]cmap number - FB's with multiple maps */
int cm_ioctlbits ; /* [0]high-order bits for FBIOPUTCMAP */
int cm_devtype ; /* device hardware type */
int cm_reserved[5] ;/* reserved */
long cm_shadowofs ; /* byte offset relative to cm_magic of
the start of the shadow colormap */
/* version 1 info starts here */
int cm_scount ; /* server's last remembered count */
int cm_locktype ; /* using /dev/winlock? see below. */
/* version 2 info starts here */
u_int device_offset; /* offset to device specific section */
/* Do NOT add any fields below dev_info */
u_char dev_info[DGA_CM_DEV_INFO_SZ];/* device specific information */
} Grabbedcmap ;
/* followed by three arrays of u_shorts, length cm_len, for
red, green and blue and one array of bytes which are
the change flags for their respective colors:
rr
rr
rr
:
gg
gg
gg
:
bb
bb
bb
:
f
f
f
:
Clients set a flag to non-zero to indicate that the color
has been changed. The server clears these when the chagnes
have been seen. */
#define CM_LOCKDEV 0 /* use GRABPAGEALLOC from device */
#define CM_WINLOCK 1 /* use winlock functions */
typedef struct cmap_devlist{
int fd;
int refcnt;
char devname[MAX_CM_DEVNAME];
struct cmap_devlist *next;
} Cmap_Devlist;
#define CM_PAGESZ (8*1024)
#define CM_LOCK(x) (*(x)) = 1
#define CM_UNLOCK(x) (*(x)) = 0
#define wx_cm_lock(infop) \
do { \
if( (infop)->cm_lockcnt++ == 0 ) \
*(infop)->cm_lockp = 1 ; \
} while (0)
#define wx_cm_unlock(infop) \
do { \
if( --(infop)->cm_lockcnt == 0 ) \
*(infop)->cm_unlockp = 0 ; \
} while (0)
#define CM_INFOP(clientp) ((Grabbedcmap *) ((clientp)->cm_info))
Dga_cmap wx_cm_grab() ;
#endif /* _CMAP_GRAB_H */