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