dixstruct.h revision 35c4bbdf
105b261ecSmrg/*********************************************************** 205b261ecSmrgCopyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. 305b261ecSmrg 405b261ecSmrg All Rights Reserved 505b261ecSmrg 605b261ecSmrgPermission to use, copy, modify, and distribute this software and its 705b261ecSmrgdocumentation for any purpose and without fee is hereby granted, 805b261ecSmrgprovided that the above copyright notice appear in all copies and that 905b261ecSmrgboth that copyright notice and this permission notice appear in 1005b261ecSmrgsupporting documentation, and that the name of Digital not be 1105b261ecSmrgused in advertising or publicity pertaining to distribution of the 1205b261ecSmrgsoftware without specific, written prior permission. 1305b261ecSmrg 1405b261ecSmrgDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 1505b261ecSmrgALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL 1605b261ecSmrgDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR 1705b261ecSmrgANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 1805b261ecSmrgWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, 1905b261ecSmrgARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 2005b261ecSmrgSOFTWARE. 2105b261ecSmrg 2205b261ecSmrg******************************************************************/ 2305b261ecSmrg 2405b261ecSmrg#ifndef DIXSTRUCT_H 2505b261ecSmrg#define DIXSTRUCT_H 2605b261ecSmrg 2735c4bbdfSmrg#include "client.h" 2805b261ecSmrg#include "dix.h" 2905b261ecSmrg#include "resource.h" 3005b261ecSmrg#include "cursor.h" 3105b261ecSmrg#include "gc.h" 3205b261ecSmrg#include "pixmap.h" 334642e01fSmrg#include "privates.h" 3405b261ecSmrg#include <X11/Xmd.h> 3505b261ecSmrg 3605b261ecSmrg/* 3705b261ecSmrg * direct-mapped hash table, used by resource manager to store 3805b261ecSmrg * translation from client ids to server addresses. 3905b261ecSmrg */ 4005b261ecSmrg 416747b715Smrgextern _X_EXPORT CallbackListPtr ClientStateCallback; 4205b261ecSmrg 4305b261ecSmrgtypedef struct { 4435c4bbdfSmrg ClientPtr client; 4535c4bbdfSmrg xConnSetupPrefix *prefix; 4635c4bbdfSmrg xConnSetup *setup; 4705b261ecSmrg} NewClientInfoRec; 4805b261ecSmrg 4935c4bbdfSmrgtypedef void (*ReplySwapPtr) (ClientPtr /* pClient */ , 5035c4bbdfSmrg int /* size */ , 5135c4bbdfSmrg void * /* pbuf */ ); 5235c4bbdfSmrg 5335c4bbdfSmrgextern _X_EXPORT void 5435c4bbdfSmrgReplyNotSwappd(ClientPtr /* pClient */ , 5535c4bbdfSmrg int /* size */ , 5635c4bbdfSmrg void * /* pbuf */ ) _X_NORETURN; 5735c4bbdfSmrg 5835c4bbdfSmrgtypedef enum { ClientStateInitial, 5935c4bbdfSmrg ClientStateRunning, 6035c4bbdfSmrg ClientStateRetained, 6135c4bbdfSmrg ClientStateGone 6235c4bbdfSmrg} ClientState; 6335c4bbdfSmrg 6405b261ecSmrgtypedef struct _saveSet { 6535c4bbdfSmrg struct _Window *windowPtr; 6635c4bbdfSmrg Bool toRoot; 6735c4bbdfSmrg Bool map; 6805b261ecSmrg} SaveSetElt; 6905b261ecSmrg#define SaveSetWindow(ss) ((ss).windowPtr) 7005b261ecSmrg#define SaveSetToRoot(ss) ((ss).toRoot) 714642e01fSmrg#define SaveSetShouldMap(ss) ((ss).map) 7205b261ecSmrg#define SaveSetAssignWindow(ss,w) ((ss).windowPtr = (w)) 7305b261ecSmrg#define SaveSetAssignToRoot(ss,tr) ((ss).toRoot = (tr)) 744642e01fSmrg#define SaveSetAssignMap(ss,m) ((ss).map = (m)) 7505b261ecSmrg 7605b261ecSmrgtypedef struct _Client { 7735c4bbdfSmrg void *requestBuffer; 7835c4bbdfSmrg void *osPrivate; /* for OS layer, including scheduler */ 7935c4bbdfSmrg Mask clientAsMask; 8035c4bbdfSmrg short index; 8135c4bbdfSmrg unsigned char majorOp, minorOp; 8235c4bbdfSmrg unsigned int swapped:1; 8335c4bbdfSmrg unsigned int local:1; 8435c4bbdfSmrg unsigned int big_requests:1; /* supports large requests */ 8535c4bbdfSmrg unsigned int clientGone:1; 8635c4bbdfSmrg unsigned int closeDownMode:2; 8735c4bbdfSmrg unsigned int clientState:2; 8835c4bbdfSmrg signed char smart_priority; 8935c4bbdfSmrg short noClientException; /* this client died or needs to be killed */ 9035c4bbdfSmrg int priority; 9105b261ecSmrg ReplySwapPtr pSwapReplyFunc; 9235c4bbdfSmrg XID errorValue; 9335c4bbdfSmrg int sequence; 9435c4bbdfSmrg int ignoreCount; /* count for Attend/IgnoreClient */ 9535c4bbdfSmrg int numSaved; 9635c4bbdfSmrg SaveSetElt *saveSet; 9735c4bbdfSmrg int (**requestVector) (ClientPtr /* pClient */ ); 9835c4bbdfSmrg CARD32 req_len; /* length of current request */ 9935c4bbdfSmrg unsigned int replyBytesRemaining; 10035c4bbdfSmrg PrivateRec *devPrivates; 10135c4bbdfSmrg unsigned short xkbClientFlags; 10235c4bbdfSmrg unsigned short mapNotifyMask; 10335c4bbdfSmrg unsigned short newKeyboardNotifyMask; 10435c4bbdfSmrg unsigned short vMajor, vMinor; 10535c4bbdfSmrg KeyCode minKC, maxKC; 10635c4bbdfSmrg 10735c4bbdfSmrg int smart_start_tick; 10835c4bbdfSmrg int smart_stop_tick; 10935c4bbdfSmrg 1104642e01fSmrg DeviceIntPtr clientPtr; 11135c4bbdfSmrg ClientIdPtr clientIds; 11235c4bbdfSmrg#if XTRANS_SEND_FDS 11335c4bbdfSmrg int req_fds; 11435c4bbdfSmrg#endif 11535c4bbdfSmrg} ClientRec; 11635c4bbdfSmrg 11735c4bbdfSmrg#if XTRANS_SEND_FDS 11835c4bbdfSmrgstatic inline void 11935c4bbdfSmrgSetReqFds(ClientPtr client, int req_fds) { 12035c4bbdfSmrg if (client->req_fds != 0 && req_fds != client->req_fds) 12135c4bbdfSmrg LogMessage(X_ERROR, "Mismatching number of request fds %d != %d\n", req_fds, client->req_fds); 12235c4bbdfSmrg client->req_fds = req_fds; 12335c4bbdfSmrg} 12435c4bbdfSmrg#endif 12505b261ecSmrg 12605b261ecSmrg/* 12705b261ecSmrg * Scheduling interface 12805b261ecSmrg */ 12935c4bbdfSmrgextern long SmartScheduleTime; 13035c4bbdfSmrgextern long SmartScheduleInterval; 13135c4bbdfSmrgextern long SmartScheduleSlice; 13235c4bbdfSmrgextern long SmartScheduleMaxSlice; 13335c4bbdfSmrgextern Bool SmartScheduleDisable; 13435c4bbdfSmrgextern void SmartScheduleStartTimer(void); 13535c4bbdfSmrgextern void SmartScheduleStopTimer(void); 13635c4bbdfSmrg 13705b261ecSmrg#define SMART_MAX_PRIORITY (20) 13805b261ecSmrg#define SMART_MIN_PRIORITY (-20) 13905b261ecSmrg 14035c4bbdfSmrgextern void SmartScheduleInit(void); 14105b261ecSmrg 14205b261ecSmrg/* This prototype is used pervasively in Xext, dix */ 14305b261ecSmrg#define DISPATCH_PROC(func) int func(ClientPtr /* client */) 14405b261ecSmrg 14505b261ecSmrgtypedef struct _WorkQueue { 14605b261ecSmrg struct _WorkQueue *next; 14735c4bbdfSmrg Bool (*function) (ClientPtr /* pClient */ , 14835c4bbdfSmrg void * /* closure */ 14935c4bbdfSmrg ); 15035c4bbdfSmrg ClientPtr client; 15135c4bbdfSmrg void *closure; 15235c4bbdfSmrg} WorkQueueRec; 15305b261ecSmrg 1546747b715Smrgextern _X_EXPORT TimeStamp currentTime; 15505b261ecSmrg 15635c4bbdfSmrgextern _X_EXPORT int 15735c4bbdfSmrgCompareTimeStamps(TimeStamp /*a */ , 15835c4bbdfSmrg TimeStamp /*b */ ); 15905b261ecSmrg 16035c4bbdfSmrgextern _X_EXPORT TimeStamp 16135c4bbdfSmrgClientTimeToServerTime(CARD32 /*c */ ); 16205b261ecSmrg 16305b261ecSmrgtypedef struct _CallbackRec { 16435c4bbdfSmrg CallbackProcPtr proc; 16535c4bbdfSmrg void *data; 16635c4bbdfSmrg Bool deleted; 16735c4bbdfSmrg struct _CallbackRec *next; 16805b261ecSmrg} CallbackRec, *CallbackPtr; 16905b261ecSmrg 17005b261ecSmrgtypedef struct _CallbackList { 17135c4bbdfSmrg int inCallback; 17235c4bbdfSmrg Bool deleted; 17335c4bbdfSmrg int numDeleted; 17435c4bbdfSmrg CallbackPtr list; 17505b261ecSmrg} CallbackListRec; 17605b261ecSmrg 17705b261ecSmrg/* proc vectors */ 17805b261ecSmrg 17935c4bbdfSmrgextern int (*InitialVector[3]) (ClientPtr /*client */ ); 18005b261ecSmrg 18135c4bbdfSmrgextern _X_EXPORT int (*ProcVector[256]) (ClientPtr /*client */ ); 18205b261ecSmrg 18335c4bbdfSmrgextern _X_EXPORT int (*SwappedProcVector[256]) (ClientPtr /*client */ ); 18405b261ecSmrg 18535c4bbdfSmrgextern ReplySwapPtr ReplySwapVector[256]; 18605b261ecSmrg 18735c4bbdfSmrgextern _X_EXPORT int 18835c4bbdfSmrgProcBadRequest(ClientPtr /*client */ ); 18905b261ecSmrg 19035c4bbdfSmrg#endif /* DIXSTRUCT_H */ 191