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