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