e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz/* Copyright (c) 1993, 2015, Oracle and/or its affiliates. All rights reserved.
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * Permission is hereby granted, free of charge, to any person obtaining a
77fd5ff29861c6c87bcc9fc466d330b17a978c8ajaspervdg * copy of this software and associated documentation files (the "Software"),
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen * to deal in the Software without restriction, including without limitation
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * the rights to use, copy, modify, merge, publish, distribute, sublicense,
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * and/or sell copies of the Software, and to permit persons to whom the
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * Software is furnished to do so, subject to the following conditions:
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * The above copyright notice and this permission notice (including the next
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * paragraph) shall be included in all copies or substantial portions of the
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * Software.
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenk * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen * DEALINGS IN THE SOFTWARE.
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenk * dga_internal.h - Sun Direct Graphics Access interface internal include file
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz/* Note that _Dga_window, _Dga_cmap, _Dga_pixmap are all internal declarations
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * for the externally visible Dga_window, Dga_cmap and Dga_pixmap ( no leading
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * underscore). In the externally visible include file, these are all declared
9eb886f0efdd076022ef171278e8475a580a1e91jaspervdg * as void * and thus quite opaque.
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * Note: there is a DGA_FAST_DRAW_LOCK() macro that also access the
39a897cf2c4e5c0208d081fe7d51dc893b5c33d1Liam P. White * fields in struct dga_window and dga_pixmap but is not currently in dga.h.
3cddc158875c47546688b0746fb0f36a8b71a299Liam P. White * Consider this macro before modifying fields.
9eb886f0efdd076022ef171278e8475a580a1e91jaspervdg/* used only to get at the drawable type. After that, we vector off
9eb886f0efdd076022ef171278e8475a580a1e91jaspervdg to either a window or pixmap routine */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int c_chngcnt; /* last recorded window change count */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int *s_chngcnt_p; /* ptr to server's global change cnt */
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen int (*w_lock_func)(); /* alternate function for locking */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz int (*w_unlock_func)(Dga_drawable); /* alternate func for unlocking */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int c_wm_chngcnt[17]; /* last recorded global change counts */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int *w_wm_2nd; /* Ptr to second entry in wm_chngcnt[]*/
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int c_clipseq; /* last recorded clip change count */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int *s_clipseq_p; /* ptr to server's clip change count */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz short *w_clipptr; /* client virtual ptr to clip array. */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int w_cliplen; /* client's size of cliplist in bytes*/
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz int w_grab_count; /* how many times we've grabbed it */
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenk struct dga_window *w_next; /* used to link all grabbed windows */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz /* cursor grabber info */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz void *curs_info; /* pointer to client's cursor info */
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen int curs_fd; /* Client side file descriptor */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int c_curseq; /* last recorded cursor change count */
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenk u_int *s_curseq_p; /* ptr to server's cursor change cnt */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz /* Ancillay Buffer info */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz /* double buffering info */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int *db_vrtcntrp; /* Client's ptr to VRT counter */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int db_lastvrtcntr; /* VRT counter value at last flip */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int db_swapint; /* number of intervals between flips */
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen int (*vrt_func)(Dga_window);/* user supplied vrt retrace func */
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenk /* retained window grabber info */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int rtn_size; /* Client size of pixel block in bytes */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int c_rtnseq; /* Client rtn modification counter */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int *s_rtnseq_p;/* Ptr to server's rtn mod counter */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int c_rtncachseq;/* Client device cache modification counter */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int *s_rtncachseq_p; /* Ptr to server's dev cache modification counter */
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen void *rtn_info; /* Ptr to Shared memory structure */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz void *rtn_pixels; /* Client ptr to Client pixel mapping */
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenk u_int rtn_flags; /* to record state of retained grab */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz ** New fields for drawable grabber.
77fd5ff29861c6c87bcc9fc466d330b17a978c8ajaspervdg DgaMbufSetPtr pMbs; /* Non-null for multibuf wins */
77fd5ff29861c6c87bcc9fc466d330b17a978c8ajaspervdg u_int *s_mbufseq_p; /* pointer to mbuf seq in shinfo */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int c_mbufseq; /* last mbufset composition sequence count */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int *s_mbcomposseq_p; /* pointer to mbufset compos seq in shinfo */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int c_mbcomposseq; /* last mb state sequence count */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int *s_devinfoseq_p; /* pointer to devinfo seq in shinfo */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int c_devinfoseq; /* last devinfo state sequence count */
77fd5ff29861c6c87bcc9fc466d330b17a978c8ajaspervdg /* notification functions */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz /* real lock subject - the win/mbuf currently locked by the client */
77fd5ff29861c6c87bcc9fc466d330b17a978c8ajaspervdg /* effective lock subject - the actual lock subject. This will be used by
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz the DGA state inquiry functions called by the client. If the
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz win/mbuf is not aliased, eLockSubj will be the same as rLockSubj */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz /* previous effective lock subject - the lock subject for which a
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz change was last signalled to the client. It is assumed that the
77fd5ff29861c6c87bcc9fc466d330b17a978c8ajaspervdg client synchronized its state to this lock subject. This is always
77fd5ff29861c6c87bcc9fc466d330b17a978c8ajaspervdg true for well-behaved DGA clients */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz /* mbChgReason is the reason for an mbufset change. prevWasMbuffered
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz is used to help us figure this out. It is set during the update
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz phase and may be used during the inquiry phase */
77fd5ff29861c6c87bcc9fc466d330b17a978c8ajaspervdg /* used during update phase to indicate what state changed */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz /* reason for any site change */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz /* Has the window been previously locked? */
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen /* overlay info
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * If the window is an overlay, the isOverlay flag will be set to
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenk * true and the s_ovlstate_p pointer will point to the ovlstate
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * flag on the shared page and the s_ovlshapevalid_p pointer will
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * point to the w_ovl_shape_valid flag.
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz /* For the threaded case, this stores the real change counts while
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * c_wm_chngcnt[] is used to force the update function to be called.
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen u_int c_chngcnt; /* last recorded change count */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int *s_chngcnt_p; /* last recorded change count */
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen int cm_lockcnt; /* lock count for nested locks */
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen u_int *cm_unlockp; /* pointer to unlock page */
9eb886f0efdd076022ef171278e8475a580a1e91jaspervdg int cm_use_new_ioctl; /* use new hardware ioctl? */
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdg * (if not framebuffer) */
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdg int cm_sunwindows_def_fd; /* client fd for server's
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdg SunWindows default cmap window */
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdg int cm_sunwindows_inst_fd; /* client fd for server's
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdg SunWindows installed cmap window */
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdg int cm_grab_count; /* how many times we've grabbed it */
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdg struct dga_cmap *cm_next; /* used to link all grabbed cmaps */
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdg* When the pixmap interface is made public, this declaration should be
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdg* moved into the dga.h file and taken out of the dga_internal.h file
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdg* Also the lock routiens currently in pix_grab,c should be made into
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdg* macros and added to dga.h
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdg int drawable_type; /* pointer to drawable type - window/pixmap*/
93a34ae628e2dccf2db5f7cfffe82371e6f0d040jaspervdg u_int obsolete; /* last recorded global change count */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int *s_chngcnt_p; /* ptr to server's global change cnt */
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen Dga_lockp p_unlockp; /* points to unlock page */
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen mutex_t *mutexp; /* points to drawable's mutex */
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen int (*p_lock_func)(); /* alternate function for locking */
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen int (*p_unlock_func)(Dga_drawable); /* alternate func for unlocking */
39a897cf2c4e5c0208d081fe7d51dc893b5c33d1Liam P. White int (*p_update_func)(Dga_drawable, short); /* function to call for updates */
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen int p_modif; /* cached result of update check ?? */
3cddc158875c47546688b0746fb0f36a8b71a299Liam P. White u_int c_chngcnt[1]; /* Last recorded global change count */
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen u_int *p_chngcnt_2nd; /* Pts to c_chngcnt[0]*/
3cddc158875c47546688b0746fb0f36a8b71a299Liam P. White void *p_infop; /* pointer to shared pixmap memory*/
3cddc158875c47546688b0746fb0f36a8b71a299Liam P. White/* TODO: Why are the next two entries in here? It's not clear to me why
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz * the client side cares if the shpx_dir changes. The only time a pixmap
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen * is removed from the directory structure is when it is destroyed and
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen * then the obsolete flag is set. */
7171e57dfc6ef06705f2df1bb917ce7de8fc5f5bLiam P. White u_int c_dirchngcnt; /* Client's last recorderd dir chng cnt */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int *s_dirchngcnt_p;/* Ptr to server's dir chng cnt */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int c_devinfocnt; /* Client's last recorded devinfo seq cnt */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int *s_devinfocnt_p; /* Ptr to server's devinfo seq cnt */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int c_cachecnt; /* Client's last recorded cache sequence cnt */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int *s_cachecnt_p; /* ptr to Server cache sequence count */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_char c_cached; /* Client's last recorded cache state */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_char *s_cached_p; /* Ptr to server's cache state */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz u_int p_dir_index; /* Client's pixmap's directory index */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz void *p_shpx_dir; /* Client's ptr to the shpx dir */
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz void *p_shpx_client; /* Client's ptr to the shpx client struct */
a4030d5ca449e7e384bc699cd249ee704faaeab0Chris Morgan Dga_token p_token; /* token used to grab window */
#ifdef MT
#ifdef MT
extern int dgaThreaded;
extern int dgaMTOn;
#ifdef MT
u_char *);
u_char *);
extern Dga_window dgai_win_grab_common (Display *dpy, int devfd, Dga_token token, int drawableGrabber);
void *client_data);
void **client_data);
void *client_data);
char **name);
void *client_data);
void **client_data);
void *client_data);
void **client_data);
void *client_data);
void **client_data);
void *client_data);
void **client_data);