Merge branch 'master' of git+ssh://git.freedesktop.org/git/xorg/xserver into input-hotplug

This commit is contained in:
Daniel Stone 2006-07-22 12:07:22 -04:00 committed by Daniel Stone
commit a73cef1f00
9 changed files with 20 additions and 357 deletions

View File

@ -52,7 +52,6 @@ extern Bool xf86DoConfigurePass1;
extern int xf86ScreenIndex; /* Index into pScreen.devPrivates */
extern int xf86CreateRootWindowIndex; /* Index into pScreen.devPrivates */
extern int xf86PixmapIndex;
extern Bool xf86ResAccessEnter;
extern ScrnInfoPtr *xf86Screens; /* List of pointers to ScrnInfoRecs */
extern const unsigned char byte_reversed[256];
extern ScrnInfoPtr xf86CurrentScreen;
@ -165,9 +164,6 @@ void xf86EnablePciBusMaster(pciVideoPtr pPci, Bool enable);
#endif
void xf86RegisterStateChangeNotificationCallback(xf86StateChangeNotificationCallbackFunc func, pointer arg);
Bool xf86DeregisterStateChangeNotificationCallback(xf86StateChangeNotificationCallbackFunc func);
#ifdef async
Bool xf86QueueAsyncEvent(void (*func)(pointer),pointer arg);
#endif
int xf86GetLastScrnFlag(int entityIndex);
void xf86SetLastScrnFlag(int entityIndex, int scrnIndex);

View File

@ -65,7 +65,7 @@ xf86CurrentAccessRec xf86CurrentAccess = {NULL,NULL};
BusRec primaryBus = { BUS_NONE, {{0}}};
Bool xf86ResAccessEnter = FALSE;
static Bool xf86ResAccessEnter = FALSE;
#ifdef REDUCER
/* Resources that temporarily conflict with estimated resources */
@ -664,32 +664,6 @@ xf86AccessRestoreState(void)
* Otherwise resources needed for access control might be shadowed
* by other resources!
*/
#ifdef async
static AsyncQPtr *AsyncQ = NULL;
_X_EXPORT ScrnInfoPtr xf86CurrentScreen = NULL;
#define SETUP_Q org = AsyncQ; \
AsyncQ = &new;
#define PROCESS_Q xf86CurrentScreen = pScrn;
if (!new) AsyncQ = org; \
else { \
AsyncQPtr tmp_Q; \
while (1) {\
new->func(new->arg);\
if (!(new->next)) {\
AsyncQ = org; xfree(new); break; \
} \
tmp_Q = new->next; \
xfree(new); \
new = tmp_Q; \
} \
}
#else
#define SETUP_Q
#define PROCESS_Q
#endif
_X_EXPORT void
xf86EnableAccess(ScrnInfoPtr pScrn)
@ -698,9 +672,6 @@ xf86EnableAccess(ScrnInfoPtr pScrn)
register EntityAccessPtr pceAcc;
register xf86AccessPtr pAcc;
EntityAccessPtr tmp;
#ifdef async
AsyncQPtr *org, new = NULL;
#endif
#ifdef DEBUG
ErrorF("Enable access %i\n",pScrn->scrnIndex);
@ -709,9 +680,7 @@ xf86EnableAccess(ScrnInfoPtr pScrn)
/* Entity is not under access control or currently enabled */
if (!pScrn->access) {
if (pScrn->busAccess) {
SETUP_Q;
((BusAccPtr)pScrn->busAccess)->set_f(pScrn->busAccess);
PROCESS_Q;
}
return;
}
@ -722,7 +691,6 @@ xf86EnableAccess(ScrnInfoPtr pScrn)
if (peAcc == pceAcc) {
return;
}
SETUP_Q;
if (pScrn->CurrentAccess->pMemAccess == pceAcc)
pScrn->CurrentAccess->pMemAccess = NULL;
while (pceAcc) {
@ -740,13 +708,11 @@ xf86EnableAccess(ScrnInfoPtr pScrn)
peAcc = peAcc->next;
}
pScrn->CurrentAccess->pIoAccess = (EntityAccessPtr) pScrn->access;
PROCESS_Q;
return;
case MEM_IO:
pceAcc = pScrn->CurrentAccess->pIoAccess;
if (peAcc != pceAcc) { /* current Io != pAccess */
SETUP_Q;
tmp = pceAcc;
while (pceAcc) {
pAcc = pceAcc->pAccess;
@ -769,7 +735,6 @@ xf86EnableAccess(ScrnInfoPtr pScrn)
if (pceAcc == peAcc) { /* current Mem == pAccess */
return;
}
SETUP_Q;
while (pceAcc) { /* current Mem != pAccess */
pAcc = pceAcc->pAccess;
if (pAcc && pAcc->AccessDisable)
@ -787,7 +752,6 @@ xf86EnableAccess(ScrnInfoPtr pScrn)
}
pScrn->CurrentAccess->pMemAccess =
pScrn->CurrentAccess->pIoAccess = (EntityAccessPtr) pScrn->access;
PROCESS_Q;
return;
case MEM:
@ -795,7 +759,6 @@ xf86EnableAccess(ScrnInfoPtr pScrn)
if (peAcc == pceAcc) {
return;
}
SETUP_Q;
if (pScrn->CurrentAccess->pIoAccess == pceAcc)
pScrn->CurrentAccess->pIoAccess = NULL;
while (pceAcc) {
@ -813,14 +776,11 @@ xf86EnableAccess(ScrnInfoPtr pScrn)
peAcc = peAcc->next;
}
pScrn->CurrentAccess->pMemAccess = (EntityAccessPtr) pScrn->access;
PROCESS_Q;
return;
case NONE:
if (pScrn->busAccess) {
SETUP_Q;
((BusAccPtr)pScrn->busAccess)->set_f(pScrn->busAccess);
PROCESS_Q;
}
return;
}
@ -3160,23 +3120,6 @@ notifyStateChange(xf86NotifyState state)
}
}
#ifdef async
_X_EXPORT Bool
xf86QueueAsyncEvent(void (*func)(pointer),pointer arg)
{
AsyncQPtr new;
if (!AsyncQ) return FALSE;
new = (AsyncQPtr)xfnalloc(sizeof(AsyncQRec));
new->func = func;
new->arg = arg;
(*AsyncQPtr)->next = new;
AsyncQPtr = &new;
return TRUE;
}
#endif
/* Multihead accel sharing accessor functions and entity Private handling */
_X_EXPORT int

View File

@ -74,15 +74,6 @@ typedef struct {
IOADDRESS domainIO;
} EntityRec, *EntityPtr;
/* asynchronous event handling */
#ifdef async
typedef struct _AsyncQRec {
void (*func)(pointer);
pointer arg;
struct _AsyncQRec *next;
} AsyncQRec, *AsyncQPtr;
#endif
#define NO_SEPARATE_IO_FROM_MEM 0x0001
#define NO_SEPARATE_MEM_FROM_IO 0x0002
#define NEED_VGA_ROUTED 0x0004

View File

@ -129,7 +129,7 @@ DLFindSymbol(const char *name)
}
void *
DLLoadModule(loaderPtr modrec, int fd, int flags)
DLLoadModule(loaderPtr modrec, int flags)
{
DLModulePtr dlfile;
DLModuleList *l;

View File

@ -26,7 +26,7 @@
#ifndef _DLLOADER_H
#define _DLLOADER_H
extern void *DLLoadModule(loaderPtr, int, int flags);
extern void *DLLoadModule(loaderPtr, int flags);
extern void DLUnloadModule(void *);
extern void *DLFindSymbol(const char *name);

View File

@ -313,7 +313,6 @@ LoaderOpen(const char *module, const char *cname, int handle,
{
loaderPtr tmp;
int new_handle;
int fd;
#if defined(DEBUG)
ErrorF("LoaderOpen(%s)\n", module);
@ -369,16 +368,6 @@ LoaderOpen(const char *module, const char *cname, int handle,
freeHandles[new_handle] = HANDLE_USED;
refCount[new_handle] = 1;
if ((fd = open(module, O_RDONLY)) < 0) {
xf86Msg(X_ERROR, "Unable to open %s\n", module);
freeHandles[new_handle] = HANDLE_FREE;
if (errmaj)
*errmaj = LDR_NOMODOPEN;
if (errmin)
*errmin = errno;
return -1;
}
tmp = _LoaderListPush();
tmp->name = malloc(strlen(module) + 1);
strcpy(tmp->name, module);
@ -387,7 +376,7 @@ LoaderOpen(const char *module, const char *cname, int handle,
tmp->handle = new_handle;
tmp->module = moduleseq++;
if ((tmp->private = DLLoadModule(tmp, fd, flags)) == NULL) {
if ((tmp->private = DLLoadModule(tmp, flags)) == NULL) {
xf86Msg(X_ERROR, "Failed to load %s\n", module);
_LoaderListPop(new_handle);
freeHandles[new_handle] = HANDLE_FREE;
@ -398,8 +387,6 @@ LoaderOpen(const char *module, const char *cname, int handle,
return -1;
}
close(fd);
return new_handle;
}

View File

@ -115,6 +115,17 @@ FreeStringList(char **paths)
static char **defaultPathList = NULL;
static Bool
PathIsAbsolute(const char *path)
{
#ifdef __UNIXOS2__
return (*path == '/' || (strlen(path) > 2 && isalpha(elem[0]) &&
elem[1] == ':' && elem[2] == '/'));
#else
return (*path == '/');
#endif
}
/*
* Convert a comma-separated path into a NULL-terminated array of path
* elements, rejecting any that are not full absolute paths, and appending
@ -138,13 +149,7 @@ InitPathList(const char *path)
return NULL;
elem = strtok(fullpath, ",");
while (elem) {
/* Only allow fully specified paths */
#ifndef __UNIXOS2__
if (*elem == '/')
#else
if (*elem == '/' || (strlen(elem) > 2 && isalpha(elem[0]) &&
elem[1] == ':' && elem[2] == '/'))
#endif
if (PathIsAbsolute(elem))
{
len = strlen(elem);
addslash = (elem[len - 1] != '/');
@ -750,13 +755,7 @@ LoadSubModule(ModuleDescPtr parent, const char *module,
xf86MsgVerb(X_INFO, 3, "Loading sub module \"%s\"\n", module);
/* Absolute module paths are not allowed here */
#ifndef __UNIXOS2__
if (module[0] == '/')
#else
if (isalpha(module[0]) && module[1] == ':' && module[2] == '/')
#endif
{
if (PathIsAbsolute(module)) {
xf86Msg(X_ERROR,
"LoadSubModule: Absolute module path not permitted: \"%s\"\n",
module);
@ -786,12 +785,7 @@ LoadSubModuleLocal(ModuleDescPtr parent, const char *module,
xf86MsgVerb(X_INFO, 3, "Loading local sub module \"%s\"\n", module);
/* Absolute module paths are not allowed here */
#ifndef __UNIXOS2__
if (module[0] == '/')
#else
if (isalpha(module[0]) && module[1] == ':' && module[2] == '/')
#endif
if (PathIsAbsolute(module))
{
xf86Msg(X_ERROR,
"LoadSubModule: Absolute module path not permitted: \"%s\"\n",
@ -908,14 +902,8 @@ doLoadModule(const char *module, const char *path, const char **subdirlist,
* if the module name is not a full pathname, we need to
* check the elements in the path
*/
#ifndef __UNIXOS2__
if (module[0] == '/')
found = xstrdup(module);
#else
/* accept a drive name here */
if (isalpha(module[0]) && module[1] == ':' && module[2] == '/')
found = xstrdup(module);
#endif
if (PathIsAbsolute(module))
xstrdup(module);
path_elem = pathlist;
while (!found && *path_elem != NULL) {
found = FindModule(m, *path_elem, subdirlist, patterns);

View File

@ -354,9 +354,6 @@ _X_HIDDEN void *xfree86LookupTab[] = {
SYMFUNC(xf86RegisterStateChangeNotificationCallback)
SYMFUNC(xf86DeregisterStateChangeNotificationCallback)
SYMFUNC(xf86NoSharedResources)
#ifdef async
SYMFUNC(xf86QueueAsyncEvent)
#endif
/* Shared Accel Accessor Functions */
SYMFUNC(xf86GetLastScrnFlag)
SYMFUNC(xf86SetLastScrnFlag)
@ -1139,9 +1136,6 @@ _X_HIDDEN void *xfree86LookupTab[] = {
SYMVAR(xf86DummyVar3)
#endif
#ifdef async
SYMVAR(xf86CurrentScreen)
#endif
/* predefined resource lists from xf86Bus.h */
SYMVAR(resVgaExclusive)
SYMVAR(resVgaShared)

View File

@ -1,4 +1,3 @@
/*
Copyright 1995, 1998 The Open Group
@ -44,9 +43,6 @@ from The Open Group.
implemented, and RecordCreateSet will decide heuristically which one
to use based on the set members.
Note: When compiling for use in the server, do not use -DTESTING.
When compiling for stand-alone testing of the set ADT, use -DTESTING.
*/
#ifdef HAVE_DIX_CONFIG_H
@ -55,41 +51,7 @@ from The Open Group.
#include <string.h>
#ifndef TESTING
#include "misc.h"
#else
#include <stdio.h>
#include <stdlib.h>
/* stuff that you normally get from the X Server's environment */
typedef int Bool;
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif
typedef unsigned short CARD16;
#define xalloc malloc
#define xfree free
#define ALLOCATE_LOCAL malloc
#define DEALLOCATE_LOCAL free
void *Xcalloc(size)
int size;
{
void *p = malloc(size);
if (p) memset(p, 0, size);
return p;
}
#ifndef max
#define max(_a, _b) ( ((_a) > (_b)) ? (_a) : (_b) )
#endif
#endif /* TESTING */
#include "set.h"
static int
@ -402,20 +364,6 @@ bailout:
return (RecordSetPtr)prls;
}
#ifdef TESTING
typedef enum {
BitVectorImplementation, IntervalListImplementation} RecordSetImplementation;
RecordSetImplementation _RecordSetImpl;
static void
_RecordForceSetImplementation(setimpl)
RecordSetImplementation setimpl;
{
_RecordSetImpl = setimpl;
}
#endif
typedef RecordSetPtr (*RecordCreateSetProcPtr)(
RecordSetInterval *pIntervals,
int nIntervals,
@ -438,12 +386,8 @@ _RecordSetMemoryRequirements(RecordSetInterval *pIntervals, int nIntervals,
&bma);
rlsize = IntervalListMemoryRequirements(pIntervals, nIntervals, maxMember,
&rla);
#ifdef TESTING
if (_RecordSetImpl == BitVectorImplementation)
#else
if ( ( (nIntervals > 1) && (maxMember <= 255) )
|| (bmsize < rlsize) )
#endif
{
*alignment = bma;
*ppCreateSet = BitVectorCreateSet;
@ -492,183 +436,3 @@ RecordCreateSet(pIntervals, nIntervals, pMem, memsize)
}
return (*pCreateSet)(pIntervals, nIntervals, pMem, size);
}
/***************************************************************************/
#ifdef TESTING
/*
Test Strategy
Having two set representations is convenient for testing because we
can play them against each other. The test code will be able to
specify which implementation to use. This breaks the encapsulation,
but that seems acceptable for testing. The crux of the test loop
looks like this:
loop:
generate random list of Intervals
create set A using bit vector implementation
create set B using Interval list implementation
for each possible set member
if set A and set B disagree on whether this is a member error;
iterate over both sets, comparing the intervals returned by each.
if intervals or number of intervals are different error;
iterate over intervals of set A
for i = interval.first to interval.last
if i is not a member of set B error;
iterate over intervals of set B
for i = interval.first to interval.last
if i is not a member of set A error;
destroy sets A, B
*/
int GenerateRandomIntervals(pIntervals, maxintervals)
RecordSetInterval *pIntervals;
int maxintervals;
{
int i, nIntervals;
nIntervals = rand() % maxintervals;
for (i = 0; i < nIntervals; i++)
{
pIntervals[i].first = rand();
pIntervals[i].last = pIntervals[i].first + rand();
}
return nIntervals;
}
#define MAXINTERVALS 100
int main(argc, argv)
int argc;
char **argv;
{
RecordSetPtr bs, rs;
RecordSetInterval br, rr;
RecordSetIteratePtr bi, ri;
CARD16 i;
int testcount;
RecordSetInterval intervals[MAXINTERVALS];
int nIntervals;
int bsize, rsize;
int balign, ralign;
int pad;
for (testcount = 0; 1; testcount++)
{
nIntervals = GenerateRandomIntervals(intervals, MAXINTERVALS);
printf("%d nIntervals %d\n", testcount, nIntervals);
if (testcount & 1)
{
_RecordForceSetImplementation(BitVectorImplementation);
bsize = RecordSetMemoryRequirements(intervals, nIntervals, &balign);
_RecordForceSetImplementation(IntervalListImplementation);
rsize = RecordSetMemoryRequirements(intervals, nIntervals, &ralign);
pad = (ralign - (bsize & (ralign - 1))) & (ralign - 1);
bs = (RecordSetPtr)xalloc(bsize + pad + rsize );
if (!bs)
{
fprintf(stderr, "%d: failed to alloc memory for sets\n",
testcount);
continue;
}
rs = (RecordSetPtr)(((char *)bs) + bsize + pad);
}
else
{
bs = rs = NULL;
bsize = rsize = 0;
}
_RecordForceSetImplementation(BitVectorImplementation);
bs = RecordCreateSet(intervals, nIntervals, bs, bsize);
_RecordForceSetImplementation(IntervalListImplementation);
rs = RecordCreateSet(intervals, nIntervals, rs, rsize);
if (!bs || !rs)
{
fprintf(stderr, "%d: failed to create sets\n", testcount);
continue;
}
for (i = 0; i < 65535; i++)
{
unsigned long b, r;
b = RecordIsMemberOfSet(bs, i);
r = RecordIsMemberOfSet(rs, i);
if ( (b && !r) || (!b && r) )
{
fprintf(stderr, "%d: isMemberOfSet %d\n",
testcount, (int)i);
}
}
bi = RecordIterateSet(bs, NULL, &br);
ri = RecordIterateSet(rs, NULL, &rr);
while (bi && ri)
{
if ( (rr.first != br.first) || (rr.last != br.last) )
{
fprintf(stderr, "%d: iterateSet interval value mismatch\n",
testcount);
}
bi = RecordIterateSet(bs, bi, &br);
ri = RecordIterateSet(rs, ri, &rr);
}
if (bi != ri)
{
fprintf(stderr, "%d: iterateSet interval count mismatch\n",
testcount);
}
bi = NULL;
while (bi = RecordIterateSet(bs, bi, &br))
{
for (i = br.first; i <= br.last; i++)
{
if (!RecordIsMemberOfSet(rs, i))
{
fprintf(stderr, "%d: iterateSet b / isMemberOfSet r %d\n",
testcount, (int)i);
}
}
}
ri = NULL;
while (ri = RecordIterateSet(rs, ri, &rr))
{
for (i = rr.first; i <= rr.last; i++)
{
if (!RecordIsMemberOfSet(bs, i) )
{
fprintf(stderr, "%d: iterateSet r / isMemberOfSet b %d\n",
testcount, (int)i);
}
}
}
RecordDestroySet(bs);
RecordDestroySet(rs);
if (testcount & 1)
{
xfree(bs);
}
}
}
#endif /* TESTING */