cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/***********************************************************
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncCopyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync All Rights Reserved
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncPermission to use, copy, modify, and distribute this software and its
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncdocumentation for any purpose and without fee is hereby granted,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncprovided that the above copyright notice appear in all copies and that
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncboth that copyright notice and this permission notice appear in
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncsupporting documentation, and that the name of Digital not be
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncused in advertising or publicity pertaining to distribution of the
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncsoftware without specific, written prior permission.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncSOFTWARE.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync******************************************************************/
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifndef DIXSTRUCT_H
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define DIXSTRUCT_H
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include "dix.h"
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include "resource.h"
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include "cursor.h"
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include "gc.h"
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include "pixmap.h"
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include "privates.h"
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include <X11/Xmd.h>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/*
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * direct-mapped hash table, used by resource manager to store
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * translation from client ids to server addresses.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern _X_EXPORT CallbackListPtr ClientStateCallback;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsynctypedef struct {
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ClientPtr client;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync xConnSetupPrefix *prefix;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync xConnSetup *setup;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync} NewClientInfoRec;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsynctypedef void (*ReplySwapPtr) (
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ClientPtr /* pClient */,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int /* size */,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync void * /* pbuf */);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern _X_EXPORT void ReplyNotSwappd (
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ClientPtr /* pClient */,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int /* size */,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync void * /* pbuf */) _X_NORETURN;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsynctypedef enum {ClientStateInitial,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ClientStateAuthenticating,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ClientStateRunning,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ClientStateRetained,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ClientStateGone,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ClientStateCheckingSecurity,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ClientStateCheckedSecurity} ClientState;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifdef XFIXES
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsynctypedef struct _saveSet {
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync struct _Window *windowPtr;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Bool toRoot;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Bool map;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync} SaveSetElt;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define SaveSetWindow(ss) ((ss).windowPtr)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define SaveSetToRoot(ss) ((ss).toRoot)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define SaveSetShouldMap(ss) ((ss).map)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define SaveSetAssignWindow(ss,w) ((ss).windowPtr = (w))
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define SaveSetAssignToRoot(ss,tr) ((ss).toRoot = (tr))
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define SaveSetAssignMap(ss,m) ((ss).map = (m))
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#else
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsynctypedef struct _Window *SaveSetElt;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define SaveSetWindow(ss) (ss)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define SaveSetToRoot(ss) FALSE
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define SaveSetShouldMap(ss) TRUE
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define SaveSetAssignWindow(ss,w) ((ss) = (w))
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define SaveSetAssignToRoot(ss,tr)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define SaveSetAssignMap(ss,m)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsynctypedef struct _Client {
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int index;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Mask clientAsMask;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync pointer requestBuffer;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync pointer osPrivate; /* for OS layer, including scheduler */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Bool swapped;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ReplySwapPtr pSwapReplyFunc;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync XID errorValue;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int sequence;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int closeDownMode;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int clientGone;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int noClientException; /* this client died or needs to be
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * killed */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int ignoreCount; /* count for Attend/IgnoreClient */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync SaveSetElt *saveSet;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int numSaved;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int (**requestVector) (
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ClientPtr /* pClient */);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync CARD32 req_len; /* length of current request */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Bool big_requests; /* supports large requests */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int priority;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ClientState clientState;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync PrivateRec *devPrivates;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync unsigned short xkbClientFlags;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync unsigned short mapNotifyMask;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync unsigned short newKeyboardNotifyMask;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync unsigned short vMajor,vMinor;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync KeyCode minKC,maxKC;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync unsigned long replyBytesRemaining;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int smart_priority;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync long smart_start_tick;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync long smart_stop_tick;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync long smart_check_tick;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync DeviceIntPtr clientPtr;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync} ClientRec;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/*
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * Scheduling interface
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern _X_EXPORT long SmartScheduleTime;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern _X_EXPORT long SmartScheduleInterval;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern _X_EXPORT long SmartScheduleSlice;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern _X_EXPORT long SmartScheduleMaxSlice;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern _X_EXPORT Bool SmartScheduleDisable;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern _X_EXPORT void SmartScheduleStartTimer(void);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern _X_EXPORT void SmartScheduleStopTimer(void);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define SMART_MAX_PRIORITY (20)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define SMART_MIN_PRIORITY (-20)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern _X_EXPORT Bool SmartScheduleInit(void);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/* This prototype is used pervasively in Xext, dix */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define DISPATCH_PROC(func) int func(ClientPtr /* client */)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsynctypedef struct _WorkQueue {
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync struct _WorkQueue *next;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Bool (*function) (
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ClientPtr /* pClient */,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync pointer /* closure */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync ClientPtr client;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync pointer closure;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync} WorkQueueRec;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern _X_EXPORT TimeStamp currentTime;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern _X_EXPORT TimeStamp lastDeviceEventTime;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern _X_EXPORT int CompareTimeStamps(
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync TimeStamp /*a*/,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync TimeStamp /*b*/);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern _X_EXPORT TimeStamp ClientTimeToServerTime(CARD32 /*c*/);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsynctypedef struct _CallbackRec {
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync CallbackProcPtr proc;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync pointer data;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Bool deleted;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync struct _CallbackRec *next;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync} CallbackRec, *CallbackPtr;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsynctypedef struct _CallbackList {
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int inCallback;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Bool deleted;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync int numDeleted;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync CallbackPtr list;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync} CallbackListRec;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/* proc vectors */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern _X_EXPORT int (* InitialVector[3]) (ClientPtr /*client*/);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern _X_EXPORT int (* ProcVector[256]) (ClientPtr /*client*/);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern _X_EXPORT int (* SwappedProcVector[256]) (ClientPtr /*client*/);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern _X_EXPORT ReplySwapPtr ReplySwapVector[256];
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern _X_EXPORT int ProcBadRequest(ClientPtr /*client*/);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif /* DIXSTRUCT_H */