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

Conflicts:

	configure.ac
	glx/glxcmds.c
	hw/xfree86/Makefile.am
	hw/xquartz/bundle/Resources/English.lproj/main.nib/designable.nib
	hw/xquartz/bundle/Resources/English.lproj/main.nib/keyedobjects.nib
This commit is contained in:
Alan Hourihane 2008-08-20 10:54:07 +01:00
commit 9e7b29987f
70 changed files with 442 additions and 4987 deletions

View file

@ -588,7 +588,6 @@ Bool PanoramiXCreateConnectionBlock(void)
{
int i, j, length;
Bool disableBackingStore = FALSE;
Bool disableSaveUnders = FALSE;
int old_width, old_height;
float width_mult, height_mult;
xWindowRoot *root;
@ -614,17 +613,12 @@ Bool PanoramiXCreateConnectionBlock(void)
}
if(pScreen->backingStoreSupport != screenInfo.screens[0]->backingStoreSupport)
disableBackingStore = TRUE;
if(pScreen->saveUnderSupport != screenInfo.screens[0]->saveUnderSupport)
disableSaveUnders = TRUE;
}
if(disableBackingStore || disableSaveUnders) {
for(i = 0; i < screenInfo.numScreens; i++) {
if (disableBackingStore) {
for (i = 0; i < screenInfo.numScreens; i++) {
pScreen = screenInfo.screens[i];
if(disableBackingStore)
pScreen->backingStoreSupport = NotUseful;
if(disableSaveUnders)
pScreen->saveUnderSupport = NotUseful;
pScreen->backingStoreSupport = NotUseful;
}
}

View file

@ -52,6 +52,7 @@ extern Mask DeviceOwnerGrabButtonMask;
extern Mask DeviceButtonGrabMask;
extern Mask DeviceButtonMotionMask;
extern Mask DevicePresenceNotifyMask;
extern Mask DevicePropertyNotifyMask;
extern Mask DeviceEnterWindowMask;
extern Mask DeviceLeaveWindowMask;
extern Mask PropagateMask[];
@ -72,6 +73,7 @@ extern int DeviceButtonStateNotify;
extern int DeviceMappingNotify;
extern int ChangeDeviceNotify;
extern int DevicePresenceNotify;
extern int DevicePropertyNotify;
extern int DeviceEnterNotify;
extern int DeviceLeaveNotify;

View file

@ -210,22 +210,24 @@ static int (*ProcIVector[])(ClientPtr) = {
ProcXSetDeviceValuators, /* 33 */
ProcXGetDeviceControl, /* 34 */
ProcXChangeDeviceControl, /* 35 */
ProcXQueryDevicePointer, /* 36 */
ProcXWarpDevicePointer, /* 37 */
ProcXChangeDeviceCursor, /* 38 */
ProcXChangeDeviceHierarchy, /* 39 */
ProcXChangeWindowAccess, /* 40 */
ProcXQueryWindowAccess, /* 41 */
ProcXSetClientPointer, /* 42 */
ProcXGetClientPointer, /* 43 */
ProcXiSelectEvent, /* 44 */
ProcXExtendedGrabDevice, /* 45 */
ProcXListDeviceProperties, /* 46 */
ProcXQueryDeviceProperty, /* 47 */
ProcXConfigureDeviceProperty, /* 48 */
ProcXChangeDeviceProperty, /* 49 */
ProcXDeleteDeviceProperty, /* 50 */
ProcXGetDeviceProperty /* 51 */
/* XI 1.5 */
ProcXListDeviceProperties, /* 36 */
ProcXQueryDeviceProperty, /* 37 */
ProcXConfigureDeviceProperty, /* 38 */
ProcXChangeDeviceProperty, /* 39 */
ProcXDeleteDeviceProperty, /* 40 */
ProcXGetDeviceProperty, /* 41 */
/* XI 2 */
ProcXQueryDevicePointer, /* 42 */
ProcXWarpDevicePointer, /* 43 */
ProcXChangeDeviceCursor, /* 44 */
ProcXChangeDeviceHierarchy, /* 45 */
ProcXChangeWindowAccess, /* 46 */
ProcXQueryWindowAccess, /* 47 */
ProcXSetClientPointer, /* 48 */
ProcXGetClientPointer, /* 49 */
ProcXiSelectEvent, /* 50 */
ProcXExtendedGrabDevice /* 51 */
};
/* For swapped clients */
@ -266,22 +268,22 @@ static int (*SProcIVector[])(ClientPtr) = {
SProcXSetDeviceValuators, /* 33 */
SProcXGetDeviceControl, /* 34 */
SProcXChangeDeviceControl, /* 35 */
SProcXQueryDevicePointer, /* 36 */
SProcXWarpDevicePointer, /* 37 */
SProcXChangeDeviceCursor, /* 38 */
SProcXChangeDeviceHierarchy, /* 39 */
SProcXChangeWindowAccess, /* 40 */
SProcXQueryWindowAccess, /* 41 */
SProcXSetClientPointer, /* 42 */
SProcXGetClientPointer, /* 43 */
SProcXiSelectEvent, /* 44 */
SProcXExtendedGrabDevice, /* 45 */
SProcXListDeviceProperties, /* 46 */
SProcXQueryDeviceProperty, /* 47 */
SProcXConfigureDeviceProperty, /* 48 */
SProcXChangeDeviceProperty, /* 49 */
SProcXDeleteDeviceProperty, /* 50 */
SProcXGetDeviceProperty /* 51 */
SProcXListDeviceProperties, /* 36 */
SProcXQueryDeviceProperty, /* 37 */
SProcXConfigureDeviceProperty, /* 38 */
SProcXChangeDeviceProperty, /* 39 */
SProcXDeleteDeviceProperty, /* 40 */
SProcXGetDeviceProperty, /* 41 */
SProcXQueryDevicePointer, /* 42 */
SProcXWarpDevicePointer, /* 43 */
SProcXChangeDeviceCursor, /* 44 */
SProcXChangeDeviceHierarchy, /* 45 */
SProcXChangeWindowAccess, /* 46 */
SProcXQueryWindowAccess, /* 47 */
SProcXSetClientPointer, /* 48 */
SProcXGetClientPointer, /* 49 */
SProcXiSelectEvent, /* 50 */
SProcXExtendedGrabDevice /* 51 */
};
/*****************************************************************
@ -308,6 +310,7 @@ Mask DeviceOwnerGrabButtonMask;
Mask DeviceButtonGrabMask;
Mask DeviceButtonMotionMask;
Mask DevicePresenceNotifyMask;
Mask DevicePropertyNotifyMask;
Mask DeviceEnterWindowMask;
Mask DeviceLeaveWindowMask;
@ -327,6 +330,7 @@ int DeviceButtonStateNotify;
int DeviceMappingNotify;
int ChangeDeviceNotify;
int DevicePresenceNotify;
int DevicePropertyNotify;
int DeviceEnterNotify;
int DeviceLeaveNotify;
@ -589,6 +593,17 @@ SDevicePresenceNotifyEvent (devicePresenceNotify *from, devicePresenceNotify *to
swaps(&to->control, n);
}
static void
SDevicePropertyNotifyEvent (devicePropertyNotify *from, devicePropertyNotify *to)
{
char n;
*to = *from;
swaps(&to->sequenceNumber,n);
swapl(&to->time, n);
swapl(&to->atom, n);
}
static void
SDeviceEnterNotifyEvent (deviceEnterNotify *from, deviceEnterNotify *to)
{
@ -786,7 +801,8 @@ FixExtensionEvents(ExtensionEntry * extEntry)
DeviceKeyStateNotify = ChangeDeviceNotify + 1;
DeviceButtonStateNotify = DeviceKeyStateNotify + 1;
DevicePresenceNotify = DeviceButtonStateNotify + 1;
DeviceEnterNotify = DevicePresenceNotify + 1;
DevicePropertyNotify = DevicePresenceNotify + 1;
DeviceEnterNotify = DevicePropertyNotify + 1;
DeviceLeaveNotify = DeviceEnterNotify + 1;
event_base[KeyClass] = DeviceKeyPress;
@ -876,6 +892,9 @@ FixExtensionEvents(ExtensionEntry * extEntry)
DevicePresenceNotifyMask = GetNextExtEventMask();
SetEventInfo(DevicePresenceNotifyMask, _devicePresence);
DevicePropertyNotifyMask = GetNextExtEventMask();
SetMaskForExtEvent(DevicePropertyNotifyMask, DevicePropertyNotify);
DeviceEnterWindowMask = GetNextExtEventMask();
SetMaskForExtEvent(DeviceEnterWindowMask, DeviceEnterNotify);
AllowPropagateSuppress(DeviceEnterWindowMask);
@ -929,8 +948,9 @@ RestoreExtensionEvents(void)
DeviceKeyStateNotify = 13;
DeviceButtonStateNotify = 13;
DevicePresenceNotify = 14;
DeviceEnterNotify = 15;
DeviceLeaveNotify = 16;
DevicePropertyNotify = 15;
DeviceEnterNotify = 16;
DeviceLeaveNotify = 17;
BadDevice = 0;
BadEvent = 1;
@ -969,6 +989,7 @@ IResetProc(ExtensionEntry * unused)
EventSwapVector[DeviceMappingNotify] = NotImplemented;
EventSwapVector[ChangeDeviceNotify] = NotImplemented;
EventSwapVector[DevicePresenceNotify] = NotImplemented;
EventSwapVector[DevicePropertyNotify] = NotImplemented;
EventSwapVector[DeviceEnterNotify] = NotImplemented;
EventSwapVector[DeviceLeaveNotify] = NotImplemented;
RestoreExtensionEvents();
@ -1072,6 +1093,8 @@ SEventIDispatch(xEvent * from, xEvent * to)
DO_SWAP(SChangeDeviceNotifyEvent, changeDeviceNotify);
else if (type == DevicePresenceNotify)
DO_SWAP(SDevicePresenceNotifyEvent, devicePresenceNotify);
else if (type == DevicePropertyNotify)
DO_SWAP(SDevicePropertyNotifyEvent, devicePropertyNotify);
else if (type == DeviceEnterNotify)
DO_SWAP(SDeviceEnterNotifyEvent, deviceEnterNotify);
else if (type == DeviceLeaveNotify)

View file

@ -72,7 +72,7 @@ ProcXQueryDevicePointer(ClientPtr client)
{
int rc;
xQueryDevicePointerReply rep;
DeviceIntPtr pDev;
DeviceIntPtr pDev, kbd;
WindowPtr pWin, t;
SpritePtr pSprite;
@ -100,12 +100,14 @@ ProcXQueryDevicePointer(ClientPtr client)
if (pDev->valuator->motionHintWindow)
MaybeStopHint(pDev, client);
kbd = GetPairedDevice(pDev);
pSprite = pDev->spriteInfo->sprite;
rep.repType = X_Reply;
rep.RepType = X_QueryDevicePointer;
rep.length = 0;
rep.sequenceNumber = client->sequence;
rep.mask = pDev->button->state | inputInfo.keyboard->key->state;
rep.mask = pDev->button->state | (kbd && kbd->key) ? kbd->key->state : 0;
rep.root = (GetCurrentRootWindow(pDev))->drawable.id;
rep.rootX = pSprite->hot.x;
rep.rootY = pSprite->hot.y;

View file

@ -191,21 +191,18 @@ XIDeleteAllDeviceProperties (DeviceIntPtr device)
{
XIPropertyPtr prop, next;
XIPropertyHandlerPtr curr_handler, next_handler;
devicePropertyNotifyEvent event;
devicePropertyNotify event;
for (prop = device->properties.properties; prop; prop = next)
{
next = prop->next;
event.type = GenericEvent;
event.extension = IReqCode;
event.evtype = XI_DevicePropertyNotify;
event.length = 0;
event.type = DevicePropertyNotify;
event.deviceid = device->id;
event.state = PropertyDelete;
event.atom = prop->propertyName;
event.time = currentTime.milliseconds;
SendEventToAllWindows(device, XI_DevicePropertyNotifyMask,
SendEventToAllWindows(device, DevicePropertyNotifyMask,
(xEvent*)&event, 1);
XIDestroyDeviceProperty(prop);
@ -226,7 +223,7 @@ int
XIDeleteDeviceProperty (DeviceIntPtr device, Atom property, Bool fromClient)
{
XIPropertyPtr prop, *prev;
devicePropertyNotifyEvent event;
devicePropertyNotify event;
for (prev = &device->properties.properties; (prop = *prev); prev = &(prop->next))
if (prop->propertyName == property)
@ -238,15 +235,12 @@ XIDeleteDeviceProperty (DeviceIntPtr device, Atom property, Bool fromClient)
if (prop)
{
*prev = prop->next;
event.type = GenericEvent;
event.extension = IReqCode;
event.length = 0;
event.evtype = XI_DevicePropertyNotify;
event.type = DevicePropertyNotify;
event.deviceid = device->id;
event.state = PropertyDelete;
event.atom = prop->propertyName;
event.time = currentTime.milliseconds;
SendEventToAllWindows(device, XI_DevicePropertyNotifyMask,
SendEventToAllWindows(device, DevicePropertyNotifyMask,
(xEvent*)&event, 1);
XIDestroyDeviceProperty (prop);
}
@ -261,7 +255,7 @@ XIChangeDeviceProperty (DeviceIntPtr dev, Atom property, Atom type,
Bool fromClient)
{
XIPropertyPtr prop;
devicePropertyNotifyEvent event;
devicePropertyNotify event;
int size_in_bytes;
int total_size;
unsigned long total_len;
@ -379,15 +373,12 @@ XIChangeDeviceProperty (DeviceIntPtr dev, Atom property, Atom type,
if (sendevent)
{
event.type = GenericEvent;
event.extension = IReqCode;
event.length = 0;
event.evtype = XI_DevicePropertyNotify;
event.type = DevicePropertyNotify;
event.deviceid = dev->id;
event.state = PropertyNewValue;
event.atom = prop->propertyName;
event.time = currentTime.milliseconds;
SendEventToAllWindows(dev, XI_DevicePropertyNotifyMask,
SendEventToAllWindows(dev, DevicePropertyNotifyMask,
(xEvent*)&event, 1);
}
return(Success);
@ -519,6 +510,7 @@ ProcXListDeviceProperties (ClientPtr client)
int n;
swaps (&rep.sequenceNumber, n);
swapl (&rep.length, n);
swaps (&rep.nAtoms, n);
}
temppAtoms = pAtoms;
for (prop = dev->properties.properties; prop; prop = prop->next)
@ -785,17 +777,14 @@ ProcXGetDeviceProperty (ClientPtr client)
if (stuff->delete && (reply.bytesAfter == 0))
{
devicePropertyNotifyEvent event;
devicePropertyNotify event;
event.type = GenericEvent;
event.extension = IReqCode;
event.length = 0;
event.evtype = XI_DevicePropertyNotify;
event.type = DevicePropertyNotify;
event.deviceid = dev->id;
event.state = PropertyDelete;
event.atom = prop->propertyName;
event.time = currentTime.milliseconds;
SendEventToAllWindows(dev, XI_DevicePropertyNotifyMask,
SendEventToAllWindows(dev, DevicePropertyNotifyMask,
(xEvent*)&event, 1);
}
@ -823,60 +812,79 @@ ProcXGetDeviceProperty (ClientPtr client)
int
SProcXListDeviceProperties (ClientPtr client)
{
char n;
REQUEST(xListDevicePropertiesReq);
swaps(&stuff->length, n);
REQUEST_SIZE_MATCH(xListDevicePropertiesReq);
(void) stuff;
return BadImplementation;
return (ProcXListDeviceProperties(client));
}
int
SProcXQueryDeviceProperty (ClientPtr client)
{
char n;
REQUEST(xQueryDevicePropertyReq);
swaps(&stuff->length, n);
swapl(&stuff->property, n);
REQUEST_SIZE_MATCH(xQueryDevicePropertyReq);
(void) stuff;
return BadImplementation;
return (ProcXQueryDeviceProperty(client));
}
int
SProcXConfigureDeviceProperty (ClientPtr client)
{
char n;
REQUEST(xConfigureDevicePropertyReq);
swaps(&stuff->length, n);
swapl(&stuff->property, n);
REQUEST_SIZE_MATCH(xConfigureDevicePropertyReq);
(void) stuff;
return BadImplementation;
return (ProcXConfigureDeviceProperty(client));
}
int
SProcXChangeDeviceProperty (ClientPtr client)
{
char n;
REQUEST(xChangeDevicePropertyReq);
swaps(&stuff->length, n);
swapl(&stuff->property, n);
swapl(&stuff->type, n);
swapl(&stuff->nUnits, n);
REQUEST_SIZE_MATCH(xChangeDevicePropertyReq);
(void) stuff;
return BadImplementation;
return (ProcXChangeDeviceProperty(client));
}
int
SProcXDeleteDeviceProperty (ClientPtr client)
{
char n;
REQUEST(xDeleteDevicePropertyReq);
swaps(&stuff->length, n);
swapl(&stuff->property, n);
REQUEST_SIZE_MATCH(xDeleteDevicePropertyReq);
(void) stuff;
return BadImplementation;
return (ProcXDeleteDeviceProperty(client));
}
int
SProcXGetDeviceProperty (ClientPtr client)
{
char n;
REQUEST(xGetDevicePropertyReq);
swaps(&stuff->length, n);
swapl(&stuff->property, n);
swapl(&stuff->type, n);
swapl(&stuff->longOffset, n);
swapl(&stuff->longLength, n);
REQUEST_SIZE_MATCH(xGetDevicePropertyReq);
(void) stuff;
return BadImplementation;
return (ProcXGetDeviceProperty(client));
}

View file

@ -660,7 +660,7 @@ XEXT_LIB='$(top_builddir)/Xext/libXext.la'
XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
dnl Core modules for most extensions, et al.
REQUIRED_MODULES="[randrproto >= 1.2] [renderproto >= 0.9.3] [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto [xextproto >= 7.0.3] [xproto >= 7.0.13] xtrans [scrnsaverproto >= 1.1] bigreqsproto resourceproto fontsproto [inputproto >= 1.9.99.3] [kbproto >= 1.0.3]"
REQUIRED_MODULES="[randrproto >= 1.2] [renderproto >= 0.9.3] [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto [xextproto >= 7.0.3] [xproto >= 7.0.13] xtrans [scrnsaverproto >= 1.1] bigreqsproto resourceproto fontsproto [inputproto >= 1.9.99.4] [kbproto >= 1.0.3]"
REQUIRED_LIBS="xfont xau fontenc [pixman-1 >= 0.9.5]"
dnl HAVE_DBUS is true if we actually have the D-Bus library, whereas
@ -864,13 +864,13 @@ if test "x$DRI" = xyes; then
AC_SUBST(GL_CFLAGS)
fi
AM_CONDITIONAL(DRI2, test "x$DRI2" = xyes)
if test "x$DRI2" = xyes; then
# FIXME: Bump the versions once we have releases of these.
AC_DEFINE(DRI2, 1, [Build DRI2 extension])
PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= 1.1])
PKG_CHECK_MODULES([LIBDRM], [libdrm >= 2.3.2])
fi
#AM_CONDITIONAL(DRI2, test "x$DRI2" = xyes)
#if test "x$DRI2" = xyes; then
# # FIXME: Bump the versions once we have releases of these.
# AC_DEFINE(DRI2, 1, [Build DRI2 extension])
# PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= 1.1])
# PKG_CHECK_MODULES([LIBDRM], [libdrm >= 2.3.2])
#fi
AM_CONDITIONAL(XINERAMA, [test "x$XINERAMA" = xyes])
if test "x$XINERAMA" = xyes; then
@ -1285,8 +1285,6 @@ fi
xorg_bus_linuxpci=no
xorg_bus_bsdpci=no
xorg_bus_ix86pci=no
xorg_bus_ppcpci=no
xorg_bus_sparcpci=no
xorg_bus_sparc=no
if test "x$XORG" = xyes; then
@ -1412,17 +1410,7 @@ if test "x$XORG" = xyes; then
esac
case $host_cpu in
powerpc*)
case $host_os in
linux*|freebsd*|netbsd*|openbsd*|kfreebsd*-gnu)
;;
*)
xorg_bus_ppcpci="yes"
;;
esac
;;
sparc*)
xorg_bus_sparcpci="yes"
xorg_bus_sparc="yes"
;;
i*86|x86_64*|amd64*)
@ -1528,8 +1516,6 @@ AM_CONDITIONAL([XORG], [test "x$XORG" = xyes])
AM_CONDITIONAL([XORG_BUS_LINUXPCI], [test "x$xorg_bus_linuxpci" = xyes])
AM_CONDITIONAL([XORG_BUS_BSDPCI], [test "x$xorg_bus_bsdpci" = xyes])
AM_CONDITIONAL([XORG_BUS_IX86PCI], [test "x$xorg_bus_ix86pci" = xyes])
AM_CONDITIONAL([XORG_BUS_PPCPCI], [test "x$xorg_bus_ppcpci" = xyes])
AM_CONDITIONAL([XORG_BUS_SPARCPCI], [test "x$xorg_bus_sparcpci" = xyes])
AM_CONDITIONAL([XORG_BUS_SPARC], [test "x$xorg_bus_sparc" = xyes])
AM_CONDITIONAL([LINUX_IA64], [test "x$linux_ia64" = xyes])
AM_CONDITIONAL([LINUX_ALPHA], [test "x$linux_alpha" = xyes])

View file

@ -2640,9 +2640,6 @@ GetPairedDevice(DeviceIntPtr dev)
if (!dev->isMaster && dev->u.master)
dev = dev->u.master;
if (!dev->spriteInfo->paired)
return NULL;
return dev->spriteInfo->paired;
}

View file

@ -938,6 +938,7 @@ GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons,
&pDev->last.valuators[first_valuator]);
/* Update the valuators with the true value sent to the client*/
/* FIXME: we lose subpixel precision here. */
if(v0) *v0 = x;
if(v1) *v1 = y;

View file

@ -557,7 +557,7 @@ CreateConnectionBlock(void)
root.maxInstalledMaps = pScreen->maxInstalledCmaps;
root.rootVisualID = pScreen->rootVisual;
root.backingStore = pScreen->backingStoreSupport;
root.saveUnders = pScreen->saveUnderSupport != NotUseful;
root.saveUnders = FALSE;
root.rootDepth = pScreen->rootDepth;
root.nDepths = pScreen->numDepths;
memmove(pBuf, (char *)&root, sizeof(xWindowRoot));

View file

@ -180,9 +180,6 @@ static Bool TileScreenSaver(int i, int kind);
#define SubStrSend(pWin,pParent) (StrSend(pWin) || SubSend(pParent))
_X_EXPORT int numSaveUndersViewable = 0;
_X_EXPORT int deltaSaveUndersViewable = 0;
#ifdef DEBUG
/******
* PrintWindowTree
@ -270,8 +267,6 @@ int defaultBackingStore = NotUseful;
/* hack to force no backing store */
Bool disableBackingStore = FALSE;
Bool enableBackingStore = FALSE;
/* hack to force no save unders */
Bool disableSaveUnders = FALSE;
static void
SetWindowToDefaults(WindowPtr pWin)
@ -471,20 +466,7 @@ CreateRootWindow(ScreenPtr pScreen)
if (enableBackingStore)
pScreen->backingStoreSupport = Always;
#ifdef DO_SAVE_UNDERS
if ((pScreen->backingStoreSupport != NotUseful) &&
(pScreen->saveUnderSupport == NotUseful))
{
/*
* If the screen has backing-store but no save-unders, let the
* clients know we can support save-unders using backing-store.
*/
pScreen->saveUnderSupport = USE_DIX_SAVE_UNDERS;
}
#endif /* DO_SAVE_UNDERS */
if (disableSaveUnders)
pScreen->saveUnderSupport = NotUseful;
pScreen->saveUnderSupport = NotUseful;
return TRUE;
}
@ -928,10 +910,6 @@ CrushTree(WindowPtr pWin)
}
FreeResource(pChild->drawable.id, RT_WINDOW);
pSib = pChild->nextSib;
#ifdef DO_SAVE_UNDERS
if (pChild->saveUnder && pChild->viewable)
deltaSaveUndersViewable--;
#endif
pChild->viewable = FALSE;
if (pChild->realized)
{
@ -1258,47 +1236,7 @@ ChangeWindowAttributes(WindowPtr pWin, Mask vmask, XID *vlist, ClientPtr client)
client->errorValue = val;
goto PatchUp;
}
#ifdef DO_SAVE_UNDERS
if (pWin->parent && (pWin->saveUnder != val) && (pWin->viewable) &&
DO_SAVE_UNDERS(pWin))
{
/*
* Re-check all siblings and inferiors for obscurity or
* exposition (hee hee).
*/
if (pWin->saveUnder)
deltaSaveUndersViewable--;
else
deltaSaveUndersViewable++;
pWin->saveUnder = val;
if (pWin->firstChild)
{
pLayerWin = (*pScreen->GetLayerWindow)(pWin);
if ((*pScreen->ChangeSaveUnder)(pLayerWin->parent, pWin->nextSib))
(*pScreen->PostChangeSaveUnder)(pLayerWin->parent,
pWin->nextSib);
}
else
{
if ((*pScreen->ChangeSaveUnder)(pWin, pWin->nextSib))
(*pScreen->PostChangeSaveUnder)(pWin,
pWin->nextSib);
}
}
else
{
/* If we're changing the saveUnder attribute of the root
* window, all we do is set pWin->saveUnder so that
* GetWindowAttributes returns the right value. We don't
* do the "normal" save-under processing (as above).
* Hope that doesn't cause any problems.
*/
pWin->saveUnder = val;
}
#else
pWin->saveUnder = val;
#endif /* DO_SAVE_UNDERS */
break;
case CWEventMask:
rc = EventSelectForWindow(pWin, client, (Mask )*pVlist);
@ -2200,9 +2138,6 @@ ReflectStackChange(
Bool WasViewable = (Bool)pWin->viewable;
Bool anyMarked;
WindowPtr pFirstChange;
#ifdef DO_SAVE_UNDERS
Bool dosave = FALSE;
#endif
WindowPtr pLayerWin;
ScreenPtr pScreen = pWin->drawable.pScreen;
@ -2217,21 +2152,11 @@ ReflectStackChange(
anyMarked = (*pScreen->MarkOverlappedWindows)(pWin, pFirstChange,
&pLayerWin);
if (pLayerWin != pWin) pFirstChange = pLayerWin;
#ifdef DO_SAVE_UNDERS
if (DO_SAVE_UNDERS(pWin))
{
dosave = (*pScreen->ChangeSaveUnder)(pLayerWin, pFirstChange);
}
#endif /* DO_SAVE_UNDERS */
if (anyMarked)
{
(*pScreen->ValidateTree)(pLayerWin->parent, pFirstChange, kind);
(*pScreen->HandleExposures)(pLayerWin->parent);
}
#ifdef DO_SAVE_UNDERS
if (dosave)
(*pScreen->PostChangeSaveUnder)(pLayerWin, pFirstChange);
#endif /* DO_SAVE_UNDERS */
if (anyMarked && pWin->drawable.pScreen->PostValidateTree)
(*pScreen->PostValidateTree)(pLayerWin->parent, pFirstChange, kind);
}
@ -2682,10 +2607,6 @@ RealizeTree(WindowPtr pWin)
if (pChild->mapped)
{
pChild->realized = TRUE;
#ifdef DO_SAVE_UNDERS
if (pChild->saveUnder)
deltaSaveUndersViewable++;
#endif
pChild->viewable = (pChild->drawable.class == InputOutput);
(* Realize)(pChild);
if (pChild->firstChild)
@ -2740,9 +2661,6 @@ MapWindow(WindowPtr pWin, ClientPtr client)
ScreenPtr pScreen;
WindowPtr pParent;
#ifdef DO_SAVE_UNDERS
Bool dosave = FALSE;
#endif
WindowPtr pLayerWin;
if (pWin->mapped)
@ -2788,21 +2706,11 @@ MapWindow(WindowPtr pWin, ClientPtr client)
{
anyMarked = (*pScreen->MarkOverlappedWindows)(pWin, pWin,
&pLayerWin);
#ifdef DO_SAVE_UNDERS
if (DO_SAVE_UNDERS(pWin))
{
dosave = (*pScreen->ChangeSaveUnder)(pLayerWin, pWin->nextSib);
}
#endif /* DO_SAVE_UNDERS */
if (anyMarked)
{
(*pScreen->ValidateTree)(pLayerWin->parent, pLayerWin, VTMap);
(*pScreen->HandleExposures)(pLayerWin->parent);
}
#ifdef DO_SAVE_UNDERS
if (dosave)
(*pScreen->PostChangeSaveUnder)(pLayerWin, pWin->nextSib);
#endif /* DO_SAVE_UNDERS */
if (anyMarked && pScreen->PostValidateTree)
(*pScreen->PostValidateTree)(pLayerWin->parent, pLayerWin, VTMap);
}
@ -2842,17 +2750,11 @@ MapSubwindows(WindowPtr pParent, ClientPtr client)
{
WindowPtr pWin;
WindowPtr pFirstMapped = NullWindow;
#ifdef DO_SAVE_UNDERS
WindowPtr pFirstSaveUndered = NullWindow;
#endif
ScreenPtr pScreen;
Mask parentRedirect;
Mask parentNotify;
xEvent event;
Bool anyMarked;
#ifdef DO_SAVE_UNDERS
Bool dosave = FALSE;
#endif
WindowPtr pLayerWin;
pScreen = pParent->drawable.pScreen;
@ -2892,12 +2794,6 @@ MapSubwindows(WindowPtr pParent, ClientPtr client)
{
anyMarked |= (*pScreen->MarkOverlappedWindows)(pWin, pWin,
(WindowPtr *)NULL);
#ifdef DO_SAVE_UNDERS
if (DO_SAVE_UNDERS(pWin))
{
dosave = TRUE;
}
#endif /* DO_SAVE_UNDERS */
}
}
}
@ -2914,38 +2810,9 @@ MapSubwindows(WindowPtr pParent, ClientPtr client)
}
if (anyMarked)
{
#ifdef DO_SAVE_UNDERS
if (pLayerWin->parent != pParent)
{
if (dosave || (DO_SAVE_UNDERS(pLayerWin)))
{
dosave = (*pScreen->ChangeSaveUnder)(pLayerWin,
pLayerWin);
}
}
else if (dosave)
{
dosave = FALSE;
for (pWin = pParent->firstChild; pWin; pWin = pWin->nextSib)
{
if (DO_SAVE_UNDERS(pWin))
{
dosave |= (*pScreen->ChangeSaveUnder)(pWin,
pWin->nextSib);
if (dosave && !pFirstSaveUndered)
pFirstSaveUndered = pWin;
}
}
}
#endif /* DO_SAVE_UNDERS */
(*pScreen->ValidateTree)(pLayerWin->parent, pFirstMapped, VTMap);
(*pScreen->HandleExposures)(pLayerWin->parent);
}
#ifdef DO_SAVE_UNDERS
if (dosave)
(*pScreen->PostChangeSaveUnder)(pLayerWin,
pFirstSaveUndered->nextSib);
#endif /* DO_SAVE_UNDERS */
if (anyMarked && pScreen->PostValidateTree)
(*pScreen->PostValidateTree)(pLayerWin->parent, pFirstMapped,
VTMap);
@ -2985,10 +2852,6 @@ UnrealizeTree(
DeleteWindowFromAnyEvents(pChild, FALSE);
if (pChild->viewable)
{
#ifdef DO_SAVE_UNDERS
if (pChild->saveUnder)
deltaSaveUndersViewable--;
#endif
pChild->viewable = FALSE;
(* MarkUnrealizedWindow)(pChild, pWin, fromConfigure);
pChild->drawable.serialNumber = NEXT_SERIAL_NUMBER;
@ -3049,16 +2912,6 @@ UnmapWindow(WindowPtr pWin, Bool fromConfigure)
(*pScreen->ValidateTree)(pLayerWin->parent, pWin, VTUnmap);
(*pScreen->HandleExposures)(pLayerWin->parent);
}
#ifdef DO_SAVE_UNDERS
if (DO_SAVE_UNDERS(pWin))
{
if ( (*pScreen->ChangeSaveUnder)(pLayerWin, pWin->nextSib) )
{
(*pScreen->PostChangeSaveUnder)(pLayerWin, pWin->nextSib);
}
}
pWin->DIXsaveUnder = FALSE;
#endif /* DO_SAVE_UNDERS */
if (!fromConfigure && pScreen->PostValidateTree)
(*pScreen->PostValidateTree)(pLayerWin->parent, pWin, VTUnmap);
}
@ -3114,9 +2967,6 @@ UnmapSubwindows(WindowPtr pWin)
UnrealizeTree(pChild, FALSE);
if (wasViewable)
{
#ifdef DO_SAVE_UNDERS
pChild->DIXsaveUnder = FALSE;
#endif /* DO_SAVE_UNDERS */
}
}
}
@ -3146,13 +2996,6 @@ UnmapSubwindows(WindowPtr pWin)
(*pScreen->ValidateTree)(pLayerWin->parent, pHead, VTUnmap);
(*pScreen->HandleExposures)(pLayerWin->parent);
}
#ifdef DO_SAVE_UNDERS
if (DO_SAVE_UNDERS(pWin))
{
if ( (*pScreen->ChangeSaveUnder)(pLayerWin, pLayerWin))
(*pScreen->PostChangeSaveUnder)(pLayerWin, pLayerWin);
}
#endif /* DO_SAVE_UNDERS */
if (anyMarked && pScreen->PostValidateTree)
(*pScreen->PostValidateTree)(pLayerWin->parent, pHead, VTUnmap);
}

View file

@ -514,7 +514,7 @@ ExaDoPrepareAccess(DrawablePtr pDrawable, int index)
if (!(*pExaScr->info->PrepareAccess) (pPixmap, index)) {
ExaPixmapPriv (pPixmap);
if (pExaPixmap->score != EXA_PIXMAP_SCORE_PINNED)
if (pExaPixmap->score == EXA_PIXMAP_SCORE_PINNED)
FatalError("Driver failed PrepareAccess on a pinned pixmap\n");
exaMoveOutPixmap (pPixmap);
}
@ -671,34 +671,25 @@ exaCreateGC (GCPtr pGC)
return TRUE;
}
void
exaPrepareAccessWindow(WindowPtr pWin)
{
if (pWin->backgroundState == BackgroundPixmap)
exaPrepareAccess(&pWin->background.pixmap->drawable, EXA_PREPARE_SRC);
if (pWin->borderIsPixel == FALSE)
exaPrepareAccess(&pWin->border.pixmap->drawable, EXA_PREPARE_SRC);
}
void
exaFinishAccessWindow(WindowPtr pWin)
{
if (pWin->backgroundState == BackgroundPixmap)
exaFinishAccess(&pWin->background.pixmap->drawable, EXA_PREPARE_SRC);
if (pWin->borderIsPixel == FALSE)
exaFinishAccess(&pWin->border.pixmap->drawable, EXA_PREPARE_SRC);
}
static Bool
exaChangeWindowAttributes(WindowPtr pWin, unsigned long mask)
{
Bool ret;
exaPrepareAccessWindow(pWin);
if ((mask & CWBackPixmap) && pWin->backgroundState == BackgroundPixmap)
exaPrepareAccess(&pWin->background.pixmap->drawable, EXA_PREPARE_SRC);
if ((mask & CWBorderPixmap) && pWin->borderIsPixel == FALSE)
exaPrepareAccess(&pWin->border.pixmap->drawable, EXA_PREPARE_MASK);
ret = fbChangeWindowAttributes(pWin, mask);
exaFinishAccessWindow(pWin);
if ((mask & CWBorderPixmap) && pWin->borderIsPixel == FALSE)
exaFinishAccess(&pWin->border.pixmap->drawable, EXA_PREPARE_MASK);
if ((mask & CWBackPixmap) && pWin->backgroundState == BackgroundPixmap)
exaFinishAccess(&pWin->background.pixmap->drawable, EXA_PREPARE_SRC);
return ret;
}
@ -752,7 +743,8 @@ exaCloseScreen(int i, ScreenPtr pScreen)
PictureScreenPtr ps = GetPictureScreenIfSet(pScreen);
#endif
exaGlyphsFini(pScreen);
if (ps->Glyphs == exaGlyphs)
exaGlyphsFini(pScreen);
pScreen->CreateGC = pExaScr->SavedCreateGC;
pScreen->CloseScreen = pExaScr->SavedCloseScreen;
@ -931,8 +923,10 @@ exaDriverInit (ScreenPtr pScreen,
pExaScr->SavedComposite = ps->Composite;
ps->Composite = exaComposite;
pExaScr->SavedGlyphs = ps->Glyphs;
ps->Glyphs = exaGlyphs;
if (pScreenInfo->PrepareComposite) {
pExaScr->SavedGlyphs = ps->Glyphs;
ps->Glyphs = exaGlyphs;
}
pExaScr->SavedTriangles = ps->Triangles;
ps->Triangles = exaTriangles;
@ -993,7 +987,8 @@ exaDriverInit (ScreenPtr pScreen,
}
}
exaGlyphsInit(pScreen);
if (ps->Glyphs == exaGlyphs)
exaGlyphsInit(pScreen);
LogMessage(X_INFO, "EXA(%d): Driver registered support for the following"
" operations:\n", pScreen->myNum);

View file

@ -389,9 +389,10 @@ exaGlyphCacheUploadGlyph(ScreenPtr pScreen,
if (!pCachePixmap)
return FALSE;
/* CACHE_{X,Y} are in pixmap coordinates, no need for cache{X,Y}off */
if (!pExaScr->info->UploadToScreen(pCachePixmap,
CACHE_X(pos) + cacheXoff,
CACHE_Y(pos) + cacheYoff,
CACHE_X(pos),
CACHE_Y(pos),
pGlyph->info.width,
pGlyph->info.height,
(char *)pExaPixmap->sys_ptr,

View file

@ -260,12 +260,6 @@ typedef struct {
*/
void exaDDXDriverInit (ScreenPtr pScreen);
void
exaPrepareAccessWindow(WindowPtr pWin);
void
exaFinishAccessWindow(WindowPtr pWin);
/* exa_unaccel.c */
void
exaPrepareAccessGC(GCPtr pGC);

View file

@ -148,8 +148,10 @@ void
__glXContextDestroy(__GLXcontext *context)
{
if (!context->isDirect) {
__glXUnrefDrawable(context->drawPriv);
__glXUnrefDrawable(context->readPriv);
if (context->drawPriv)
__glXUnrefDrawable(context->drawPriv);
if (context->readPriv)
__glXUnrefDrawable(context->readPriv);
}
__glXFlushContextCache();
}
@ -621,8 +623,10 @@ DoMakeCurrent(__GLXclientState *cl,
}
__glXFlushContextCache();
if (!prevglxc->isDirect) {
__glXUnrefDrawable(prevglxc->drawPriv);
__glXUnrefDrawable(prevglxc->readPriv);
if (prevglxc->drawPriv)
__glXUnrefDrawable(prevglxc->drawPriv);
if (prevglxc->readPriv)
__glXUnrefDrawable(prevglxc->readPriv);
}
}

View file

@ -102,9 +102,6 @@ KdSetRootClip (ScreenPtr pScreen, BOOL enable)
Bool WasViewable;
Bool anyMarked = FALSE;
RegionPtr pOldClip = 0;
#ifdef DO_SAVE_UNDERS
Bool dosave = FALSE;
#endif
WindowPtr pLayerWin;
BoxRec box;
@ -171,12 +168,6 @@ KdSetRootClip (ScreenPtr pScreen, BOOL enable)
anyMarked = TRUE;
}
#ifdef DO_SAVE_UNDERS
if (DO_SAVE_UNDERS(pWin))
{
dosave = (*pScreen->ChangeSaveUnder)(pLayerWin, pLayerWin);
}
#endif /* DO_SAVE_UNDERS */
if (anyMarked)
(*pScreen->ValidateTree)(pWin, NullWindow, VTOther);
@ -186,10 +177,6 @@ KdSetRootClip (ScreenPtr pScreen, BOOL enable)
{
if (anyMarked)
(*pScreen->HandleExposures)(pWin);
#ifdef DO_SAVE_UNDERS
if (dosave)
(*pScreen->PostChangeSaveUnder)(pLayerWin, pLayerWin);
#endif /* DO_SAVE_UNDERS */
if (anyMarked && pScreen->PostValidateTree)
(*pScreen->PostValidateTree)(pWin, NullWindow, VTOther);
}

View file

@ -47,7 +47,7 @@ INCLUDES = $(XORG_INCS) -I$(srcdir)/../ddc -I$(srcdir)/../i2c \
sdk_HEADERS = compiler.h fourcc.h xf86.h xf86Module.h xf86Opt.h \
xf86PciInfo.h xf86Priv.h xf86Privstr.h xf86Resources.h \
xf86cmap.h xf86fbman.h xf86str.h xf86RAC.h xf86Xinput.h xisb.h \
$(XVSDKINCS) xf86Version.h xorgVersion.h \
$(XVSDKINCS) xorgVersion.h \
xf86sbusBus.h xf86xv.h xf86xvmc.h xf86xvpriv.h
DISTCLEANFILES = xf86Build.h

View file

@ -277,7 +277,6 @@ Bool xf86GetModInDevEnabled(void);
Bool xf86GetAllowMouseOpenFail(void);
Bool xf86IsPc98(void);
void xf86DisableRandR(void);
CARD32 xf86GetVersion(void);
CARD32 xorgGetVersion(void);
CARD32 xf86GetModuleVersion(pointer module);
pointer xf86LoadDrvSubModule(DriverPtr drv, const char *name);

View file

@ -738,23 +738,14 @@ typedef enum {
FLAG_ALLOWMOUSEOPENFAIL,
FLAG_VTSYSREQ,
FLAG_XKBDISABLE,
FLAG_PCIPROBE1,
FLAG_PCIPROBE2,
FLAG_PCIFORCECONFIG1,
FLAG_PCIFORCECONFIG2,
FLAG_PCIFORCENONE,
FLAG_PCIOSCONFIG,
FLAG_SAVER_BLANKTIME,
FLAG_DPMS_STANDBYTIME,
FLAG_DPMS_SUSPENDTIME,
FLAG_DPMS_OFFTIME,
FLAG_PIXMAP,
FLAG_PC98,
FLAG_ESTIMATE_SIZES_AGGRESSIVELY,
FLAG_NOPM,
FLAG_XINERAMA,
FLAG_ALLOW_DEACTIVATE_GRABS,
FLAG_ALLOW_CLOSEDOWN_GRABS,
FLAG_LOG,
FLAG_RENDER_COLORMAP_MODE,
FLAG_HANDLE_SPECIAL_KEYS,
@ -792,18 +783,6 @@ static OptionInfoRec FlagOptions[] = {
{0}, FALSE },
{ FLAG_XKBDISABLE, "XkbDisable", OPTV_BOOLEAN,
{0}, FALSE },
{ FLAG_PCIPROBE1, "PciProbe1" , OPTV_BOOLEAN,
{0}, FALSE },
{ FLAG_PCIPROBE2, "PciProbe2", OPTV_BOOLEAN,
{0}, FALSE },
{ FLAG_PCIFORCECONFIG1, "PciForceConfig1", OPTV_BOOLEAN,
{0}, FALSE },
{ FLAG_PCIFORCECONFIG2, "PciForceConfig2", OPTV_BOOLEAN,
{0}, FALSE },
{ FLAG_PCIFORCENONE, "PciForceNone", OPTV_BOOLEAN,
{0}, FALSE },
{ FLAG_PCIOSCONFIG, "PciOsConfig", OPTV_BOOLEAN,
{0}, FALSE },
{ FLAG_SAVER_BLANKTIME, "BlankTime" , OPTV_INTEGER,
{0}, FALSE },
{ FLAG_DPMS_STANDBYTIME, "StandbyTime", OPTV_INTEGER,
@ -816,16 +795,10 @@ static OptionInfoRec FlagOptions[] = {
{0}, FALSE },
{ FLAG_PC98, "PC98", OPTV_BOOLEAN,
{0}, FALSE },
{ FLAG_ESTIMATE_SIZES_AGGRESSIVELY,"EstimateSizesAggressively",OPTV_INTEGER,
{0}, FALSE },
{ FLAG_NOPM, "NoPM", OPTV_BOOLEAN,
{0}, FALSE },
{ FLAG_XINERAMA, "Xinerama", OPTV_BOOLEAN,
{0}, FALSE },
{ FLAG_ALLOW_DEACTIVATE_GRABS,"AllowDeactivateGrabs", OPTV_BOOLEAN,
{0}, FALSE },
{ FLAG_ALLOW_CLOSEDOWN_GRABS, "AllowClosedownGrabs", OPTV_BOOLEAN,
{0}, FALSE },
{ FLAG_LOG, "Log", OPTV_STRING,
{0}, FALSE },
{ FLAG_RENDER_COLORMAP_MODE, "RenderColormapMode", OPTV_STRING,
@ -905,10 +878,6 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts)
xf86GetOptValBool(FlagOptions, FLAG_DONTZAP, &xf86Info.dontZap);
xf86GetOptValBool(FlagOptions, FLAG_DONTZOOM, &xf86Info.dontZoom);
xf86GetOptValBool(FlagOptions, FLAG_ALLOW_DEACTIVATE_GRABS,
&(xf86Info.grabInfo.allowDeactivate));
xf86GetOptValBool(FlagOptions, FLAG_ALLOW_CLOSEDOWN_GRABS,
&(xf86Info.grabInfo.allowClosedown));
xf86GetOptValBool(FlagOptions, FLAG_IGNORE_ABI, &xf86Info.ignoreABI);
if (xf86Info.ignoreABI) {
xf86Msg(X_CONFIG, "Ignoring ABI Version\n");
@ -973,19 +942,6 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts)
#endif
}
if (xf86IsOptionSet(FlagOptions, FLAG_PCIPROBE1))
xf86Info.pciFlags = PCIProbe1;
if (xf86IsOptionSet(FlagOptions, FLAG_PCIPROBE2))
xf86Info.pciFlags = PCIProbe2;
if (xf86IsOptionSet(FlagOptions, FLAG_PCIFORCECONFIG1))
xf86Info.pciFlags = PCIForceConfig1;
if (xf86IsOptionSet(FlagOptions, FLAG_PCIFORCECONFIG2))
xf86Info.pciFlags = PCIForceConfig2;
if (xf86IsOptionSet(FlagOptions, FLAG_PCIOSCONFIG))
xf86Info.pciFlags = PCIOsConfig;
if (xf86IsOptionSet(FlagOptions, FLAG_PCIFORCENONE))
xf86Info.pciFlags = PCIForceNone;
xf86Info.pmFlag = TRUE;
if (xf86GetOptValBool(FlagOptions, FLAG_NOPM, &value))
xf86Info.pmFlag = !value;
@ -1044,12 +1000,6 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts)
xf86Info.randRFrom = X_CONFIG;
}
#endif
i = -1;
xf86GetOptValInteger(FlagOptions, FLAG_ESTIMATE_SIZES_AGGRESSIVELY, &i);
if (i >= 0)
xf86Info.estimateSizesAggressively = i;
else
xf86Info.estimateSizesAggressively = 0;
xf86Info.aiglx = TRUE;
xf86Info.aiglxFrom = X_DEFAULT;

View file

@ -204,15 +204,6 @@ ProcessInputEvents ()
xf86SetViewport(xf86Info.currentScreen, x, y);
}
void
xf86GrabServerCallback(CallbackListPtr *callbacks, pointer data, pointer args)
{
ServerGrabInfoRec *grab = (ServerGrabInfoRec*)args;
xf86Info.grabInfo.server.client = grab->client;
xf86Info.grabInfo.server.grabstate = grab->grabstate;
}
/*
* Handle keyboard events that cause some kind of "action"
* (i.e., server termination, video mode changes, VT switches, etc.)
@ -240,43 +231,6 @@ xf86ProcessActionEvent(ActionEvent action, void *arg)
if (!xf86Info.dontZoom)
xf86ZoomViewport(xf86Info.currentScreen, -1);
break;
case ACTION_DISABLEGRAB:
if (!xf86Info.grabInfo.disabled && xf86Info.grabInfo.allowDeactivate) {
if (inputInfo.pointer && inputInfo.pointer->deviceGrab.grab != NULL &&
inputInfo.pointer->deviceGrab.DeactivateGrab)
inputInfo.pointer->deviceGrab.DeactivateGrab(inputInfo.pointer);
if (inputInfo.keyboard &&
inputInfo.keyboard->deviceGrab.grab != NULL &&
inputInfo.keyboard->deviceGrab.DeactivateGrab)
inputInfo.keyboard->deviceGrab.DeactivateGrab(inputInfo.keyboard);
}
break;
case ACTION_CLOSECLIENT:
if (!xf86Info.grabInfo.disabled && xf86Info.grabInfo.allowClosedown) {
ClientPtr pointer, keyboard, server;
pointer = keyboard = server = NULL;
if (inputInfo.pointer && inputInfo.pointer->deviceGrab.grab != NULL)
pointer = clients[CLIENT_ID(inputInfo.pointer->deviceGrab.grab->resource)];
if (inputInfo.keyboard && inputInfo.keyboard->deviceGrab.grab != NULL)
{
keyboard = clients[CLIENT_ID(inputInfo.keyboard->deviceGrab.grab->resource)];
if (keyboard == pointer)
keyboard = NULL;
}
if ((xf86Info.grabInfo.server.grabstate == SERVER_GRABBED) &&
(((server = xf86Info.grabInfo.server.client) == pointer) ||
(server == keyboard)))
server = NULL;
if (pointer)
CloseDownClient(pointer);
if (keyboard)
CloseDownClient(keyboard);
if (server)
CloseDownClient(server);
}
break;
#if !defined(__SOL8__) && \
(!defined(sun) || defined(__i386__)) && defined(VT_ACTIVATE)
case ACTION_SWITCHSCREEN:

View file

@ -99,8 +99,6 @@ xf86InfoRec xf86Info = {
-1, /* vtno */
FALSE, /* vtSysreq */
SKWhenNeeded, /* ddxSpecialKeys */
NULL, /* pMouse */
NULL, /* mouseLocal */
-1, /* lastEventTime */
FALSE, /* vtRequestsPending */
FALSE, /* dontVTSwitch */
@ -108,7 +106,6 @@ xf86InfoRec xf86Info = {
FALSE, /* dontZoom */
FALSE, /* notrapSignals */
FALSE, /* caughtSignal */
FALSE, /* sharedMonitor */
NULL, /* currentScreen */
#ifdef CSRG_BASED
-1, /* screenFd */
@ -119,7 +116,6 @@ xf86InfoRec xf86Info = {
FALSE, /* vidModeAllowNonLocal */
TRUE, /* miscModInDevEnabled */
FALSE, /* miscModInDevAllowNonLocal */
PCIOsConfig, /* pciFlags */
Pix24DontCare, /* pixmap24 */
X_DEFAULT, /* pix24From */
#ifdef __i386__
@ -127,7 +123,6 @@ xf86InfoRec xf86Info = {
#endif
TRUE, /* pmFlag */
LogNone, /* syncLog */
0, /* estimateSizesAggressively */
FALSE, /* kbdCustomKeycodes */
FALSE, /* disableRandR */
X_DEFAULT /* randRFrom */
@ -164,7 +159,6 @@ const char *xf86VisualNames[] = {
/* Parameters set only from the command line */
char *xf86ServerName = "no-name";
Bool xf86fpFlag = FALSE;
Bool xf86coFlag = FALSE;
Bool xf86sFlag = FALSE;
Bool xf86bsEnableFlag = FALSE;
Bool xf86bsDisableFlag = FALSE;
@ -185,8 +179,6 @@ int xf86Depth = -1;
rgb xf86Weight = {0, 0, 0};
Bool xf86FlipPixels = FALSE;
Gamma xf86Gamma = {0.0, 0.0, 0.0};
Bool xf86ShowUnresolved = DEFAULT_UNRESOLVED;
Bool xf86BestRefresh = DEFAULT_BEST_REFRESH;
Bool xf86AllowMouseOpenFail = FALSE;
#ifdef XF86VIDMODE
Bool xf86VidModeDisabled = FALSE;

View file

@ -60,7 +60,6 @@
#include "mivalidate.h"
#include "xf86RAC.h"
#include "xf86Bus.h"
#include "xf86Version.h"
/* For xf86GetClocks */
#if defined(CSRG_BASED) || defined(__GNU__)
@ -1097,9 +1096,6 @@ xf86SetRootClip (ScreenPtr pScreen, Bool enable)
WindowPtr pChild;
Bool WasViewable = (Bool)(pWin->viewable);
Bool anyMarked = FALSE;
#ifdef DO_SAVE_UNDERS
Bool dosave = FALSE;
#endif
WindowPtr pLayerWin;
BoxRec box;
@ -1169,12 +1165,6 @@ xf86SetRootClip (ScreenPtr pScreen, Bool enable)
anyMarked = TRUE;
}
#ifdef DO_SAVE_UNDERS
if (DO_SAVE_UNDERS(pWin))
{
dosave = (*pScreen->ChangeSaveUnder)(pLayerWin, pLayerWin);
}
#endif /* DO_SAVE_UNDERS */
if (anyMarked)
(*pScreen->ValidateTree)(pWin, NullWindow, VTOther);
@ -1184,10 +1174,6 @@ xf86SetRootClip (ScreenPtr pScreen, Bool enable)
{
if (anyMarked)
(*pScreen->HandleExposures)(pWin);
#ifdef DO_SAVE_UNDERS
if (dosave)
(*pScreen->PostChangeSaveUnder)(pLayerWin, pLayerWin);
#endif /* DO_SAVE_UNDERS */
if (anyMarked && pScreen->PostValidateTree)
(*pScreen->PostValidateTree)(pWin, NullWindow, VTOther);
}
@ -2351,12 +2337,6 @@ xf86DisableRandR()
xf86Info.randRFrom = X_PROBED;
}
_X_EXPORT CARD32
xf86GetVersion()
{
return XF86_VERSION_CURRENT;
}
_X_EXPORT CARD32
xf86GetModuleVersion(pointer module)
{

View file

@ -716,14 +716,10 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
for (i = 0; i < xf86NumDrivers; i++) {
xorgHWFlags flags;
/* The Identify function is mandatory, but if it isn't there continue */
if (xf86DriverList[i]->Identify != NULL)
xf86DriverList[i]->Identify(0);
else {
xf86Msg(X_WARNING, "Driver `%s' has no Identify function\n",
xf86DriverList[i]->driverName ? xf86DriverList[i]->driverName
: "noname");
}
if (!xorgHWAccess
&& (!xf86DriverList[i]->driverFunc
|| !xf86DriverList[i]->driverFunc(NULL,
@ -734,11 +730,8 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
}
/* Enable full I/O access */
if (xorgHWAccess) {
if(!xf86EnableIO())
/* oops, we have failed */
xorgHWAccess = FALSE;
}
if (xorgHWAccess)
xorgHWAccess = xf86EnableIO();
/*
* Locate bus slot that had register IO enabled at server startup
@ -875,46 +868,14 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
return;
}
/* This could be moved into a separate function */
/*
* Check that all screens have initialised the mandatory function
* entry points. Delete those which have not.
*/
#define WARN_SCREEN(func) \
xf86Msg(X_ERROR, "Driver `%s' has no %s function, deleting.\n", \
xf86Screens[i]->name, (warned++, func))
for (i = 0; i < xf86NumScreens; i++) {
int warned = 0;
if (xf86Screens[i]->name == NULL) {
xf86Screens[i]->name = xnfalloc(strlen("screen") + 1 + 1);
if (i < 10)
sprintf(xf86Screens[i]->name, "screen%c", i + '0');
else
sprintf(xf86Screens[i]->name, "screen%c", i - 10 + 'A');
xf86Screens[i]->name = xnfalloc(strlen("screen") + 10 + 1);
sprintf(xf86Screens[i]->name, "screen%d", i);
xf86MsgVerb(X_WARNING, 0,
"Screen driver %d has no name set, using `%s'.\n",
i, xf86Screens[i]->name);
}
if (xf86Screens[i]->ScreenInit == NULL)
WARN_SCREEN("ScreenInit");
if (xf86Screens[i]->EnterVT == NULL)
WARN_SCREEN("EnterVT");
if (xf86Screens[i]->LeaveVT == NULL)
WARN_SCREEN("LeaveVT");
if (warned)
xf86DeleteScreen(i--, 0);
}
/*
* If no screens left, return now.
*/
if (xf86NumScreens == 0) {
xf86Msg(X_ERROR, "Screen(s) found, but drivers were unusable.\n");
return;
}
/* XXX Should this be before or after loading dependent modules? */
@ -1050,8 +1011,6 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
/* set up the proper access funcs */
xf86PostPreInit();
AddCallback(&ServerGrabCallback, xf86GrabServerCallback, NULL);
} else {
/*
* serverGeneration != 1; some OSs have to do things here, too.
@ -1491,11 +1450,6 @@ ddxProcessArgument(int argc, char **argv, int i)
xf86ConfigFile = argv[i + 1];
return 2;
}
if (!strcmp(argv[i],"-showunresolved"))
{
xf86ShowUnresolved = TRUE;
return 1;
}
if (!strcmp(argv[i],"-probeonly"))
{
xf86ProbeOnly = TRUE;
@ -1523,11 +1477,6 @@ ddxProcessArgument(int argc, char **argv, int i)
xf86AllowMouseOpenFail = TRUE;
return 1;
}
if (!strcmp(argv[i],"-bestRefresh"))
{
xf86BestRefresh = TRUE;
return 1;
}
if (!strcmp(argv[i],"-ignoreABI"))
{
LoaderSetOptions(LDR_OPT_ABI_MISMATCH_NONFATAL);
@ -1591,12 +1540,6 @@ ddxProcessArgument(int argc, char **argv, int i)
xf86fpFlag = TRUE;
return 0;
}
/* Notice the -co flag, but allow it to pass to the dix layer */
if (!strcmp(argv[i], "-co"))
{
xf86coFlag = TRUE;
return 0;
}
/* Notice the -bs flag, but allow it to pass to the dix layer */
if (!strcmp(argv[i], "-bs"))
{
@ -1807,7 +1750,6 @@ ddxUseMsg()
ErrorF("-allowNonLocalXvidtune allow xvidtune to be run as a non-local client\n");
#endif
ErrorF("-allowMouseOpenFail start server even if the mouse can't be initialized\n");
ErrorF("-bestRefresh choose modes with the best refresh rate\n");
ErrorF("-ignoreABI make module ABI mismatches non-fatal\n");
ErrorF("-isolateDevice bus_id restrict device resets to bus_id (PCI only)\n");
ErrorF("-version show the server version\n");

View file

@ -42,7 +42,6 @@
#define _XF86MODULE_H
#include "misc.h"
#include "xf86Version.h"
#ifndef NULL
#define NULL ((void *)0)
#endif

View file

@ -52,7 +52,6 @@ extern Bool xf86VidModeDisabled;
extern Bool xf86VidModeAllowNonLocal;
#endif
extern Bool xf86fpFlag;
extern Bool xf86coFlag;
extern Bool xf86sFlag;
extern Bool xf86bsEnableFlag;
extern Bool xf86bsDisableFlag;
@ -70,10 +69,8 @@ extern int xf86Depth;
extern Pix24Flags xf86Pix24;
extern rgb xf86Weight;
extern Bool xf86FlipPixels;
extern Bool xf86BestRefresh;
extern Gamma xf86Gamma;
extern char *xf86ServerName;
extern Bool xf86ShowUnresolved;
extern struct pci_slot_match xf86IsolateDevice;
/* Other parameters */
@ -164,7 +161,6 @@ void xf86SigHandler(int signo);
void xf86HandlePMEvents(int fd, pointer data);
extern int (*xf86PMGetEventFromOs)(int fd,pmEvent *events,int num);
extern pmWait (*xf86PMConfirmEventToOs)(int fd,pmEvent event);
void xf86GrabServerCallback(CallbackListPtr *, pointer, pointer);
/* xf86Helper.c */
void xf86LogInit(void);

View file

@ -37,17 +37,6 @@
#include "xf86Pci.h"
#include "xf86str.h"
/* PCI probe flags */
typedef enum {
PCIProbe1 = 0,
PCIProbe2,
PCIForceConfig1,
PCIForceConfig2,
PCIForceNone,
PCIOsConfig
} PciProbeType;
typedef enum {
LogNone,
LogFlush,
@ -78,10 +67,6 @@ typedef struct {
Bool vtSysreq;
SpecialKeysInDDX ddxSpecialKeys;
/* mouse part */
DeviceIntPtr pMouse;
pointer mouseLocal;
/* event handler part */
int lastEventTime;
Bool vtRequestsPending;
@ -92,7 +77,6 @@ typedef struct {
Bool caughtSignal;
/* graphics part */
Bool sharedMonitor;
ScreenPtr currentScreen;
#if defined(CSRG_BASED) || defined(__FreeBSD_kernel__)
int screenFd; /* fd for memory mapped access to
@ -108,7 +92,6 @@ typedef struct {
Bool miscModInDevEnabled; /* Allow input devices to be
* changed */
Bool miscModInDevAllowNonLocal;
PciProbeType pciFlags;
Pix24Flags pixmap24;
MessageType pix24From;
#ifdef __i386__
@ -116,7 +99,6 @@ typedef struct {
#endif
Bool pmFlag;
Log log;
int estimateSizesAggressively;
Bool kbdCustomKeycodes;
Bool disableRandR;
MessageType randRFrom;
@ -128,18 +110,6 @@ typedef struct {
Bool useDefaultFontPath;
MessageType useDefaultFontPathFrom;
Bool ignoreABI;
struct {
Bool disabled; /* enable/disable deactivating
* grabs or closing the
* connection to the grabbing
* client */
ClientPtr override; /* client that disabled
* grab deactivation.
*/
Bool allowDeactivate;
Bool allowClosedown;
ServerGrabInfoRec server;
} grabInfo;
Bool allowEmptyInput; /* Allow the server to start with no input
* devices. */

View file

@ -1,56 +0,0 @@
/*
* Copyright (c) 1994-2003 by The XFree86 Project, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* Except as contained in this notice, the name of the copyright holder(s)
* and author(s) shall not be used in advertising or otherwise to promote
* the sale, use or other dealings in this Software without prior written
* authorization from the copyright holder(s) and author(s).
*/
#ifndef XF86_VERSION_CURRENT
#define XF86_VERSION_MAJOR 4
#define XF86_VERSION_MINOR 3
#define XF86_VERSION_PATCH 99
#define XF86_VERSION_SNAP 902
/* This has five arguments for compatibilty reasons */
#define XF86_VERSION_NUMERIC(major,minor,patch,snap,dummy) \
(((major) * 10000000) + ((minor) * 100000) + ((patch) * 1000) + snap)
#define XF86_GET_MAJOR_VERSION(vers) ((vers) / 10000000)
#define XF86_GET_MINOR_VERSION(vers) (((vers) % 10000000) / 100000)
#define XF86_GET_PATCH_VERSION(vers) (((vers) % 100000) / 1000)
#define XF86_GET_SNAP_VERSION(vers) ((vers) % 1000)
/* Define these for compatibility. They'll be removed at some point. */
#define XF86_VERSION_SUBMINOR XF86_VERSION_PATCH
#define XF86_VERSION_BETA 0
#define XF86_VERSION_ALPHA XF86_VERSION_SNAP
#define XF86_VERSION_CURRENT \
XF86_VERSION_NUMERIC(XF86_VERSION_MAJOR, \
XF86_VERSION_MINOR, \
XF86_VERSION_PATCH, \
XF86_VERSION_SNAP, \
0)
#endif

View file

@ -1110,8 +1110,6 @@ typedef enum {
ACTION_TERMINATE = 0, /* Terminate Server */
ACTION_NEXT_MODE = 10, /* Switch to next video mode */
ACTION_PREV_MODE,
ACTION_DISABLEGRAB = 20, /* Cancel server/pointer/kbd grabs */
ACTION_CLOSECLIENT, /* Kill client holding grab */
ACTION_SWITCHSCREEN = 100, /* VT switch */
ACTION_SWITCHSCREEN_NEXT,
ACTION_SWITCHSCREEN_PREV,

View file

@ -41,7 +41,6 @@
#include <misc.h>
#include <xf86.h>
#include <xf86Version.h>
#include <xf86_OSproc.h>
#include <xf86_OSlib.h>
#include <xf86Xinput.h>

View file

@ -30,10 +30,6 @@ XkbDDXPrivate(DeviceIntPtr dev,KeyCode key,XkbAction *act)
xf86ProcessActionEvent(ACTION_PREV_MODE, NULL);
else if (strcasecmp(msgbuf, "+vmode")==0)
xf86ProcessActionEvent(ACTION_NEXT_MODE, NULL);
else if (strcasecmp(msgbuf, "ungrab")==0)
xf86ProcessActionEvent(ACTION_DISABLEGRAB, NULL);
else if (strcasecmp(msgbuf, "clsgrb")==0)
xf86ProcessActionEvent(ACTION_CLOSECLIENT, NULL);
}
return 0;

View file

@ -655,6 +655,32 @@ find_pci_class(CARD8 intf, CARD8 subClass, CARD16 _class,
}
#endif
/*
* Return the last bus number in the same domain as dev. Only look at the
* one domain since this is going into %cl, and VGA I/O is per-domain anyway.
*/
static int
int1A_last_bus_number(struct pci_device *dev)
{
struct pci_device *d;
struct pci_slot_match m = { dev->domain,
PCI_MATCH_ANY,
PCI_MATCH_ANY,
PCI_MATCH_ANY };
struct pci_device_iterator *iter;
int i = 0;
iter = pci_slot_match_iterator_create(&m);
while ((d = pci_device_next(iter)))
if (d->bus > i)
i = d->bus;
pci_iterator_destroy(iter);
return i;
}
static int
int1A_handler(xf86Int10InfoPtr pInt)
{
@ -674,7 +700,7 @@ int1A_handler(xf86Int10InfoPtr pInt)
X86_EDX = 0x20494350; /* " ICP" */
X86_EBX = 0x0210; /* Version 2.10 */
X86_ECX &= 0xFF00;
X86_ECX |= (pciNumBuses & 0xFF); /* Max bus number in system */
X86_ECX |= int1A_last_bus_number(pvp);
X86_EFLAGS &= ~((unsigned long)0x01); /* clear carry flag */
#ifdef PRINT_INT
ErrorF("ax=0x%x dx=0x%x bx=0x%x cx=0x%x flags=0x%x\n",

View file

@ -323,8 +323,6 @@ _X_HIDDEN void *dixLookupTab[] = {
SYMFUNC(TraverseTree)
SYMFUNC(UnmapWindow)
SYMFUNC(WalkTree)
SYMVAR(deltaSaveUndersViewable)
SYMVAR(numSaveUndersViewable)
SYMVAR(savedScreenInfo)
SYMVAR(screenIsSaved)

View file

@ -445,7 +445,6 @@ _X_HIDDEN void *xfree86LookupTab[] = {
SYMFUNC(xf86IsPc98)
SYMFUNC(xf86DisableRandR)
SYMFUNC(xf86GetRotation)
SYMFUNC(xf86GetVersion)
SYMFUNC(xf86GetModuleVersion)
SYMFUNC(xf86GetClocks)
SYMFUNC(xf86SetPriority)

View file

@ -1,7 +1,7 @@
SUBDIRS = bus @XORG_OS_SUBDIR@ misc $(DRI_SUBDIRS)
DIST_SUBDIRS = bsd bus misc linux solaris sysv sco hurd
sdk_HEADERS = xf86_OSproc.h xf86_OSlib.h assyntax.h
sdk_HEADERS = xf86_OSproc.h xf86_OSlib.h
EXTRA_DIST = int10Defines.h xf86OSpriv.h
@ -23,5 +23,4 @@ DISTCLEANFILES = xorgos.c
# FIXME: These don't seem to be used anywhere
EXTRA_DIST += \
shared/bios_devmem.c \
shared/inout.S
shared/bios_devmem.c

View file

@ -1,749 +0,0 @@
#ifndef __ASSYNTAX_H__
#define __ASSYNTAX_H__
/*
* Copyright 1992 Vrije Universiteit, The Netherlands
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of the Vrije Universiteit not be used in
* advertising or publicity pertaining to distribution of the software without
* specific, written prior permission. The Vrije Universiteit makes no
* representations about the suitability of this software for any purpose.
* It is provided "as is" without express or implied warranty.
*
* The Vrije Universiteit DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
* EVENT SHALL The Vrije Universiteit BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/*
* Copyright (c) 1993-1999 by The XFree86 Project, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* Except as contained in this notice, the name of the copyright holder(s)
* and author(s) shall not be used in advertising or otherwise to promote
* the sale, use or other dealings in this Software without prior written
* authorization from the copyright holder(s) and author(s).
*/
/*
* assyntax.h
*
* Select the syntax appropriate to the 386 assembler being used
* To add support for more assemblers add more columns to the CHOICE
* macro. Note that register names must also have uppercase names
* to avoid macro recursion. e.g., #define ah %ah recurses!
*
* NB 1. Some of the macros for certain assemblers imply that the code is to
* run in protected mode!! Caveat emptor.
*
* NB 2. 486 specific instructions are not included. This is to discourage
* their accidental use in code that is intended to run on 386 and 486
* systems.
*
* Supported assemblers:
*
* (a) AT&T SysVr4 as(1): default
* (b) GNU Assembler gas: define USE_GAS or GNU_ASSEMBLER
* (c) Amsterdam Compiler kit: define ACK_ASSEMBLER
*
* The following naming conventions have been used to identify the various
* data types:
* _SR = segment register version
* Integer:
* _Q = quadword = 64 bits
* _L = long = 32 bits
* _W = short = 16 bits
* _B = byte = 8 bits
* Floating-point:
* _X = m80real = 80 bits
* _D = double = 64 bits
* _S = single = 32 bits
*
* Author: Gregory J. Sharp, Sept 1992
* Vrije Universiteit, Amsterdam, The Netherlands
*/
#if defined(USE_GAS) && !defined(GNU_ASSEMBLER)
#define GNU_ASSEMBLER
#endif
#if (defined(__STDC__) && !defined(UNIXCPP)) || (defined (sun) && defined (__i386__) && defined (SVR4) && defined (__STDC__) && !defined (__GNUC__))
#define CONCAT(x, y) x ## y
#else
#define CONCAT(x, y) x/**/y
#endif
#ifdef ACK_ASSEMBLER
/* Assume we write code for 32-bit protected mode! */
/* Redefine register names for GAS & AT&T assemblers */
#define AL al
#define AH ah
#define AX ax
#define EAX ax
#define BL bl
#define BH bh
#define BX bx
#define EBX bx
#define CL cl
#define CH ch
#define CX cx
#define ECX cx
#define DL dl
#define DH dh
#define DX dx
#define EDX dx
#define BP bp
#define EBP bp
#define SI si
#define ESI si
#define DI di
#define EDI di
#define SP sp
#define ESP sp
#define CS cs
#define SS ss
#define DS ds
#define ES es
#define FS fs
#define GS gs
/* Control Registers */
#define CR0 cr0
#define CR1 cr1
#define CR2 cr2
#define CR3 cr3
/* Debug Registers */
#define DR0 dr0
#define DR1 dr1
#define DR2 dr2
#define DR3 dr3
#define DR4 dr4
#define DR5 dr5
#define DR6 dr6
#define DR7 dr7
/* Floating-point Stack */
#define ST st
#define AS_BEGIN .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
#define _WTOG o16 /* word toggle for _W instructions */
#define _LTOG /* long toggle for _L instructions */
#define ADDR_TOGGLE a16
#define OPSZ_TOGGLE o16
#define USE16 .use16
#define USE32 .use32
#define CHOICE(a,b,c) c
#else /* AT&T or GAS */
/* Redefine register names for GAS & AT&T assemblers */
#define AL %al
#define AH %ah
#define AX %ax
#define EAX %eax
#define BL %bl
#define BH %bh
#define BX %bx
#define EBX %ebx
#define CL %cl
#define CH %ch
#define CX %cx
#define ECX %ecx
#define DL %dl
#define DH %dh
#define DX %dx
#define EDX %edx
#define BP %bp
#define EBP %ebp
#define SI %si
#define ESI %esi
#define DI %di
#define EDI %edi
#define SP %sp
#define ESP %esp
#define CS %cs
#define SS %ss
#define DS %ds
#define ES %es
#define FS %fs
#define GS %gs
/* Control Registers */
#define CR0 %cr0
#define CR1 %cr1
#define CR2 %cr2
#define CR3 %cr3
/* Debug Registers */
#define DR0 %db0
#define DR1 %db1
#define DR2 %db2
#define DR3 %db3
#define DR4 %db4
#define DR5 %db5
#define DR6 %db6
#define DR7 %db7
/* Floating-point Stack */
#define ST %st
#define AS_BEGIN
#define USE16
#define USE32
#ifdef GNU_ASSEMBLER
#define ADDR_TOGGLE aword
#define OPSZ_TOGGLE word
#define CHOICE(a,b,c) b
#else
/*
* AT&T ASSEMBLER SYNTAX
* *********************
*/
#define CHOICE(a,b,c) a
#define ADDR_TOGGLE addr16
#define OPSZ_TOGGLE data16
#endif /* GNU_ASSEMBLER */
#endif /* ACK_ASSEMBLER */
#if (defined(SYSV) || defined(SVR4)) && !defined(ACK_ASSEMBLER) || defined(__ELF__) || defined(__GNU__)
#define GLNAME(a) a
#else
#define GLNAME(a) CONCAT(_,a)
#endif
/****************************************/
/* */
/* Select the various choices */
/* */
/****************************************/
/* Redefine assembler directives */
/*********************************/
#define GLOBL CHOICE(.globl, .globl, .extern)
#define ALIGNTEXT4 CHOICE(.align 4, .align ARG2(2,0x90), .align 4)
#define ALIGNTEXT2 CHOICE(.align 2, .align ARG2(1,0x90), .align 2)
/* ALIGNTEXT4ifNOP is the same as ALIGNTEXT4, but only if the space is
* guaranteed to be filled with NOPs. Otherwise it does nothing.
*/
#define ALIGNTEXT4ifNOP CHOICE(.align 4, .align ARG2(2,0x90), /*can't do it*/)
#define ALIGNDATA4 CHOICE(.align 4, .align ARG2(2,0x0), .align 4)
#define ALIGNDATA2 CHOICE(.align 2, .align ARG2(1,0x0), .align 2)
#define FILE(s) CHOICE(.file s, .file s, .file s)
#define STRING(s) CHOICE(.string s, .asciz s, .asciz s)
#define D_LONG CHOICE(.long, .long, .data4)
#define D_WORD CHOICE(.value, .short, .data2)
#define D_BYTE CHOICE(.byte, .byte, .data1)
#define SPACE CHOICE(.comm, .space, .space)
#define COMM CHOICE(.comm, .comm, .comm)
#define SEG_DATA CHOICE(.data, .data, .sect .data)
#define SEG_TEXT CHOICE(.text, .text, .sect .text)
#define SEG_BSS CHOICE(.bss, .bss, .sect .bss)
#ifdef GNU_ASSEMBLER
#define D_SPACE(n) . = . + n
#else
#define D_SPACE(n) .space n
#endif
/* Addressing Modes */
/* Immediate Mode */
#define ADDR(a) CHOICE(CONCAT($,a), CONCAT($,a), a)
#define CONST(a) CHOICE(CONCAT($,a), CONCAT($,a), a)
/* Indirect Mode */
#define CONTENT(a) CHOICE(a, a, (a)) /* take contents of variable */
#define REGIND(a) CHOICE((a), (a), (a)) /* Register a indirect */
/* Register b indirect plus displacement a */
#define REGOFF(a, b) CHOICE(a(b), a(b), a(b))
/* Reg indirect Base + Index + Displacement - this is mainly for 16-bit mode
* which has no scaling
*/
#define REGBID(b,i,d) CHOICE(d(b,i), d(b,i), d(b)(i))
/* Reg indirect Base + (Index * Scale) + Displacement */
#define REGBISD(b,i,s,d) CHOICE(d(b,i,s), d(b,i,s), d(b)(i*s))
/* Displaced Scaled Index: */
#define REGDIS(d,i,s) CHOICE(d(,i,s), d(,i,s), d(i * s))
/* Indexed Base: */
#define REGBI(b,i) CHOICE((b,i), (b,i), (b)(i))
/* Displaced Base: */
#define REGDB(d,b) CHOICE(d(b), d(b), d(b))
/* Variable indirect: */
#define VARINDIRECT(var) CHOICE(*var, *var, (var))
/* Use register contents as jump/call target: */
#define CODEPTR(reg) CHOICE(*reg, *reg, reg)
/* For expressions requiring bracketing
* eg. (CRT0_PM | CRT_EM)
*/
#define EXPR(a) CHOICE([a], (a), [a])
#define ENOT(a) CHOICE(0!a, ~a, ~a)
#define EMUL(a,b) CHOICE(a\*b, a*b, a*b)
#define EDIV(a,b) CHOICE(a\/b, a/b, a/b)
/*
* We have to beat the problem of commas within arguments to choice.
* eg. choice (add a,b, add b,a) will get argument mismatch. Luckily ANSI
* and other known cpp definitions evaluate arguments before substitution
* so the following works.
*/
#define ARG2(a, b) a,b
#define ARG3(a,b,c) a,b,c
/* Redefine assembler commands */
#define AAA CHOICE(aaa, aaa, aaa)
#define AAD CHOICE(aad, aad, aad)
#define AAM CHOICE(aam, aam, aam)
#define AAS CHOICE(aas, aas, aas)
#define ADC_L(a, b) CHOICE(adcl ARG2(a,b), adcl ARG2(a,b), _LTOG adc ARG2(b,a))
#define ADC_W(a, b) CHOICE(adcw ARG2(a,b), adcw ARG2(a,b), _WTOG adc ARG2(b,a))
#define ADC_B(a, b) CHOICE(adcb ARG2(a,b), adcb ARG2(a,b), adcb ARG2(b,a))
#define ADD_L(a, b) CHOICE(addl ARG2(a,b), addl ARG2(a,b), _LTOG add ARG2(b,a))
#define ADD_W(a, b) CHOICE(addw ARG2(a,b), addw ARG2(a,b), _WTOG add ARG2(b,a))
#define ADD_B(a, b) CHOICE(addb ARG2(a,b), addb ARG2(a,b), addb ARG2(b,a))
#define AND_L(a, b) CHOICE(andl ARG2(a,b), andl ARG2(a,b), _LTOG and ARG2(b,a))
#define AND_W(a, b) CHOICE(andw ARG2(a,b), andw ARG2(a,b), _WTOG and ARG2(b,a))
#define AND_B(a, b) CHOICE(andb ARG2(a,b), andb ARG2(a,b), andb ARG2(b,a))
#define ARPL(a,b) CHOICE(arpl ARG2(a,b), arpl ARG2(a,b), arpl ARG2(b,a))
#define BOUND_L(a, b) CHOICE(boundl ARG2(a,b), boundl ARG2(b,a), _LTOG bound ARG2(b,a))
#define BOUND_W(a, b) CHOICE(boundw ARG2(a,b), boundw ARG2(b,a), _WTOG bound ARG2(b,a))
#define BSF_L(a, b) CHOICE(bsfl ARG2(a,b), bsfl ARG2(a,b), _LTOG bsf ARG2(b,a))
#define BSF_W(a, b) CHOICE(bsfw ARG2(a,b), bsfw ARG2(a,b), _WTOG bsf ARG2(b,a))
#define BSR_L(a, b) CHOICE(bsrl ARG2(a,b), bsrl ARG2(a,b), _LTOG bsr ARG2(b,a))
#define BSR_W(a, b) CHOICE(bsrw ARG2(a,b), bsrw ARG2(a,b), _WTOG bsr ARG2(b,a))
#define BT_L(a, b) CHOICE(btl ARG2(a,b), btl ARG2(a,b), _LTOG bt ARG2(b,a))
#define BT_W(a, b) CHOICE(btw ARG2(a,b), btw ARG2(a,b), _WTOG bt ARG2(b,a))
#define BTC_L(a, b) CHOICE(btcl ARG2(a,b), btcl ARG2(a,b), _LTOG btc ARG2(b,a))
#define BTC_W(a, b) CHOICE(btcw ARG2(a,b), btcw ARG2(a,b), _WTOG btc ARG2(b,a))
#define BTR_L(a, b) CHOICE(btrl ARG2(a,b), btrl ARG2(a,b), _LTOG btr ARG2(b,a))
#define BTR_W(a, b) CHOICE(btrw ARG2(a,b), btrw ARG2(a,b), _WTOG btr ARG2(b,a))
#define BTS_L(a, b) CHOICE(btsl ARG2(a,b), btsl ARG2(a,b), _LTOG bts ARG2(b,a))
#define BTS_W(a, b) CHOICE(btsw ARG2(a,b), btsw ARG2(a,b), _WTOG bts ARG2(b,a))
#define CALL(a) CHOICE(call a, call a, call a)
#define CALLF(s,a) CHOICE(lcall ARG2(s,a), lcall ARG2(s,a), callf s:a)
#define CBW CHOICE(cbtw, cbw, cbw)
#define CWDE CHOICE(cwtd, cwde, cwde)
#define CLC CHOICE(clc, clc, clc)
#define CLD CHOICE(cld, cld, cld)
#define CLI CHOICE(cli, cli, cli)
#define CLTS CHOICE(clts, clts, clts)
#define CMC CHOICE(cmc, cmc, cmc)
#define CMP_L(a, b) CHOICE(cmpl ARG2(a,b), cmpl ARG2(a,b), _LTOG cmp ARG2(b,a))
#define CMP_W(a, b) CHOICE(cmpw ARG2(a,b), cmpw ARG2(a,b), _WTOG cmp ARG2(b,a))
#define CMP_B(a, b) CHOICE(cmpb ARG2(a,b), cmpb ARG2(a,b), cmpb ARG2(b,a))
#define CMPS_L CHOICE(cmpsl, cmpsl, _LTOG cmps)
#define CMPS_W CHOICE(cmpsw, cmpsw, _WTOG cmps)
#define CMPS_B CHOICE(cmpsb, cmpsb, cmpsb)
#define CWD CHOICE(cwtl, cwd, cwd)
#define CDQ CHOICE(cltd, cdq, cdq)
#define DAA CHOICE(daa, daa, daa)
#define DAS CHOICE(das, das, das)
#define DEC_L(a) CHOICE(decl a, decl a, _LTOG dec a)
#define DEC_W(a) CHOICE(decw a, decw a, _WTOG dec a)
#define DEC_B(a) CHOICE(decb a, decb a, decb a)
#define DIV_L(a) CHOICE(divl a, divl a, div a)
#define DIV_W(a) CHOICE(divw a, divw a, div a)
#define DIV_B(a) CHOICE(divb a, divb a, divb a)
#define ENTER(a,b) CHOICE(enter ARG2(a,b), enter ARG2(a,b), enter ARG2(b,a))
#define HLT CHOICE(hlt, hlt, hlt)
#define IDIV_L(a) CHOICE(idivl a, idivl a, _LTOG idiv a)
#define IDIV_W(a) CHOICE(idivw a, idivw a, _WTOG idiv a)
#define IDIV_B(a) CHOICE(idivb a, idivb a, idivb a)
/* More forms than this for imul!! */
#define IMUL_L(a, b) CHOICE(imull ARG2(a,b), imull ARG2(a,b), _LTOG imul ARG2(b,a))
#define IMUL_W(a, b) CHOICE(imulw ARG2(a,b), imulw ARG2(a,b), _WTOG imul ARG2(b,a))
#define IMUL_B(a) CHOICE(imulb a, imulb a, imulb a)
#define IN_L CHOICE(inl (DX), inl ARG2(DX,EAX), _LTOG in DX)
#define IN_W CHOICE(inw (DX), inw ARG2(DX,AX), _WTOG in DX)
#define IN_B CHOICE(inb (DX), inb ARG2(DX,AL), inb DX)
/* Please AS code writer: use the following ONLY, if you refer to ports<256
* directly, but not in IN1_W(DX), for instance, even if IN1_ looks nicer
*/
#if defined (sun)
#define IN1_L(a) CHOICE(inl (a), inl ARG2(a,EAX), _LTOG in a)
#define IN1_W(a) CHOICE(inw (a), inw ARG2(a,AX), _WTOG in a)
#define IN1_B(a) CHOICE(inb (a), inb ARG2(a,AL), inb a)
#else
#define IN1_L(a) CHOICE(inl a, inl ARG2(a,EAX), _LTOG in a)
#define IN1_W(a) CHOICE(inw a, inw ARG2(a,AX), _WTOG in a)
#define IN1_B(a) CHOICE(inb a, inb ARG2(a,AL), inb a)
#endif
#define INC_L(a) CHOICE(incl a, incl a, _LTOG inc a)
#define INC_W(a) CHOICE(incw a, incw a, _WTOG inc a)
#define INC_B(a) CHOICE(incb a, incb a, incb a)
#define INS_L CHOICE(insl, insl, _LTOG ins)
#define INS_W CHOICE(insw, insw, _WTOG ins)
#define INS_B CHOICE(insb, insb, insb)
#define INT(a) CHOICE(int a, int a, int a)
#define INT3 CHOICE(int CONST(3), int3, int CONST(3))
#define INTO CHOICE(into, into, into)
#define IRET CHOICE(iret, iret, iret)
#define IRETD CHOICE(iret, iret, iretd)
#define JA(a) CHOICE(ja a, ja a, ja a)
#define JAE(a) CHOICE(jae a, jae a, jae a)
#define JB(a) CHOICE(jb a, jb a, jb a)
#define JBE(a) CHOICE(jbe a, jbe a, jbe a)
#define JC(a) CHOICE(jc a, jc a, jc a)
#define JE(a) CHOICE(je a, je a, je a)
#define JG(a) CHOICE(jg a, jg a, jg a)
#define JGE(a) CHOICE(jge a, jge a, jge a)
#define JL(a) CHOICE(jl a, jl a, jl a)
#define JLE(a) CHOICE(jle a, jle a, jle a)
#define JNA(a) CHOICE(jna a, jna a, jna a)
#define JNAE(a) CHOICE(jnae a, jnae a, jnae a)
#define JNB(a) CHOICE(jnb a, jnb a, jnb a)
#define JNBE(a) CHOICE(jnbe a, jnbe a, jnbe a)
#define JNC(a) CHOICE(jnc a, jnc a, jnc a)
#define JNE(a) CHOICE(jne a, jne a, jne a)
#define JNG(a) CHOICE(jng a, jng a, jng a)
#define JNGE(a) CHOICE(jnge a, jnge a, jnge a)
#define JNL(a) CHOICE(jnl a, jnl a, jnl a)
#define JNLE(a) CHOICE(jnle a, jnle a, jnle a)
#define JNO(a) CHOICE(jno a, jno a, jno a)
#define JNP(a) CHOICE(jnp a, jnp a, jnp a)
#define JNS(a) CHOICE(jns a, jns a, jns a)
#define JNZ(a) CHOICE(jnz a, jnz a, jnz a)
#define JO(a) CHOICE(jo a, jo a, jo a)
#define JP(a) CHOICE(jp a, jp a, jp a)
#define JPE(a) CHOICE(jpe a, jpe a, jpe a)
#define JPO(a) CHOICE(jpo a, jpo a, jpo a)
#define JS(a) CHOICE(js a, js a, js a)
#define JZ(a) CHOICE(jz a, jz a, jz a)
#define JMP(a) CHOICE(jmp a, jmp a, jmp a)
#define JMPF(s,a) CHOICE(ljmp ARG2(s,a), ljmp ARG2(s,a), jmpf s:a)
#define LAHF CHOICE(lahf, lahf, lahf)
#if !defined(_REAL_MODE) && !defined(_V86_MODE)
#define LAR(a, b) CHOICE(lar ARG2(a, b), lar ARG2(a, b), lar ARG2(b, a))
#endif
#define LEA_L(a, b) CHOICE(leal ARG2(a,b), leal ARG2(a,b), _LTOG lea ARG2(b,a))
#define LEA_W(a, b) CHOICE(leaw ARG2(a,b), leaw ARG2(a,b), _WTOG lea ARG2(b,a))
#define LEAVE CHOICE(leave, leave, leave)
#define LGDT(a) CHOICE(lgdt a, lgdt a, lgdt a)
#define LIDT(a) CHOICE(lidt a, lidt a, lidt a)
#define LDS(a, b) CHOICE(ldsl ARG2(a,b), lds ARG2(a,b), lds ARG2(b,a))
#define LES(a, b) CHOICE(lesl ARG2(a,b), les ARG2(a,b), les ARG2(b,a))
#define LFS(a, b) CHOICE(lfsl ARG2(a,b), lfs ARG2(a,b), lfs ARG2(b,a))
#define LGS(a, b) CHOICE(lgsl ARG2(a,b), lgs ARG2(a,b), lgs ARG2(b,a))
#define LSS(a, b) CHOICE(lssl ARG2(a,b), lss ARG2(a,b), lss ARG2(b,a))
#define LLDT(a) CHOICE(lldt a, lldt a, lldt a)
#define LMSW(a) CHOICE(lmsw a, lmsw a, lmsw a)
#define LOCK CHOICE(lock, lock, lock)
#define LODS_L CHOICE(lodsl, lodsl, _LTOG lods)
#define LODS_W CHOICE(lodsw, lodsw, _WTOG lods)
#define LODS_B CHOICE(lodsb, lodsb, lodsb)
#define LOOP(a) CHOICE(loop a, loop a, loop a)
#define LOOPE(a) CHOICE(loope a, loope a, loope a)
#define LOOPZ(a) CHOICE(loopz a, loopz a, loopz a)
#define LOOPNE(a) CHOICE(loopne a, loopne a, loopne a)
#define LOOPNZ(a) CHOICE(loopnz a, loopnz a, loopnz a)
#if !defined(_REAL_MODE) && !defined(_V86_MODE)
#define LSL(a, b) CHOICE(lsl ARG2(a,b), lsl ARG2(a,b), lsl ARG2(b,a))
#endif
#define LTR(a) CHOICE(ltr a, ltr a, ltr a)
#define MOV_SR(a, b) CHOICE(movw ARG2(a,b), mov ARG2(a,b), mov ARG2(b,a))
#define MOV_L(a, b) CHOICE(movl ARG2(a,b), movl ARG2(a,b), _LTOG mov ARG2(b,a))
#define MOV_W(a, b) CHOICE(movw ARG2(a,b), movw ARG2(a,b), _WTOG mov ARG2(b,a))
#define MOV_B(a, b) CHOICE(movb ARG2(a,b), movb ARG2(a,b), movb ARG2(b,a))
#define MOVS_L CHOICE(movsl, movsl, _LTOG movs)
#define MOVS_W CHOICE(movsw, movsw, _WTOG movs)
#define MOVS_B CHOICE(movsb, movsb, movsb)
#define MOVSX_BL(a, b) CHOICE(movsbl ARG2(a,b), movsbl ARG2(a,b), movsx ARG2(b,a))
#define MOVSX_BW(a, b) CHOICE(movsbw ARG2(a,b), movsbw ARG2(a,b), movsx ARG2(b,a))
#define MOVSX_WL(a, b) CHOICE(movswl ARG2(a,b), movswl ARG2(a,b), movsx ARG2(b,a))
#define MOVZX_BL(a, b) CHOICE(movzbl ARG2(a,b), movzbl ARG2(a,b), movzx ARG2(b,a))
#define MOVZX_BW(a, b) CHOICE(movzbw ARG2(a,b), movzbw ARG2(a,b), movzx ARG2(b,a))
#define MOVZX_WL(a, b) CHOICE(movzwl ARG2(a,b), movzwl ARG2(a,b), movzx ARG2(b,a))
#define MUL_L(a) CHOICE(mull a, mull a, _LTOG mul a)
#define MUL_W(a) CHOICE(mulw a, mulw a, _WTOG mul a)
#define MUL_B(a) CHOICE(mulb a, mulb a, mulb a)
#define NEG_L(a) CHOICE(negl a, negl a, _LTOG neg a)
#define NEG_W(a) CHOICE(negw a, negw a, _WTOG neg a)
#define NEG_B(a) CHOICE(negb a, negb a, negb a)
#define NOP CHOICE(nop, nop, nop)
#define NOT_L(a) CHOICE(notl a, notl a, _LTOG not a)
#define NOT_W(a) CHOICE(notw a, notw a, _WTOG not a)
#define NOT_B(a) CHOICE(notb a, notb a, notb a)
#define OR_L(a,b) CHOICE(orl ARG2(a,b), orl ARG2(a,b), _LTOG or ARG2(b,a))
#define OR_W(a,b) CHOICE(orw ARG2(a,b), orw ARG2(a,b), _WTOG or ARG2(b,a))
#define OR_B(a,b) CHOICE(orb ARG2(a,b), orb ARG2(a,b), orb ARG2(b,a))
#define OUT_L CHOICE(outl (DX), outl ARG2(EAX,DX), _LTOG out DX)
#define OUT_W CHOICE(outw (DX), outw ARG2(AX,DX), _WTOG out DX)
#define OUT_B CHOICE(outb (DX), outb ARG2(AL,DX), outb DX)
/* Please AS code writer: use the following ONLY, if you refer to ports<256
* directly, but not in OUT1_W(DX), for instance, even if OUT1_ looks nicer
*/
#define OUT1_L(a) CHOICE(outl (a), outl ARG2(EAX,a), _LTOG out a)
#define OUT1_W(a) CHOICE(outw (a), outw ARG2(AX,a), _WTOG out a)
#define OUT1_B(a) CHOICE(outb (a), outb ARG2(AL,a), outb a)
#define OUTS_L CHOICE(outsl, outsl, _LTOG outs)
#define OUTS_W CHOICE(outsw, outsw, _WTOG outs)
#define OUTS_B CHOICE(outsb, outsb, outsb)
#define POP_SR(a) CHOICE(pop a, pop a, pop a)
#define POP_L(a) CHOICE(popl a, popl a, _LTOG pop a)
#define POP_W(a) CHOICE(popw a, popw a, _WTOG pop a)
#define POPA_L CHOICE(popal, popal, _LTOG popa)
#define POPA_W CHOICE(popaw, popaw, _WTOG popa)
#define POPF_L CHOICE(popfl, popfl, _LTOG popf)
#define POPF_W CHOICE(popfw, popfw, _WTOG popf)
#define PUSH_SR(a) CHOICE(push a, push a, push a)
#define PUSH_L(a) CHOICE(pushl a, pushl a, _LTOG push a)
#define PUSH_W(a) CHOICE(pushw a, pushw a, _WTOG push a)
#define PUSH_B(a) CHOICE(push a, pushb a, push a)
#define PUSHA_L CHOICE(pushal, pushal, _LTOG pusha)
#define PUSHA_W CHOICE(pushaw, pushaw, _WTOG pusha)
#define PUSHF_L CHOICE(pushfl, pushfl, _LTOG pushf)
#define PUSHF_W CHOICE(pushfw, pushfw, _WTOG pushf)
#define RCL_L(a, b) CHOICE(rcll ARG2(a,b), rcll ARG2(a,b), _LTOG rcl ARG2(b,a))
#define RCL_W(a, b) CHOICE(rclw ARG2(a,b), rclw ARG2(a,b), _WTOG rcl ARG2(b,a))
#define RCL_B(a, b) CHOICE(rclb ARG2(a,b), rclb ARG2(a,b), rclb ARG2(b,a))
#define RCR_L(a, b) CHOICE(rcrl ARG2(a,b), rcrl ARG2(a,b), _LTOG rcr ARG2(b,a))
#define RCR_W(a, b) CHOICE(rcrw ARG2(a,b), rcrw ARG2(a,b), _WTOG rcr ARG2(b,a))
#define RCR_B(a, b) CHOICE(rcrb ARG2(a,b), rcrb ARG2(a,b), rcrb ARG2(b,a))
#define ROL_L(a, b) CHOICE(roll ARG2(a,b), roll ARG2(a,b), _LTOG rol ARG2(b,a))
#define ROL_W(a, b) CHOICE(rolw ARG2(a,b), rolw ARG2(a,b), _WTOG rol ARG2(b,a))
#define ROL_B(a, b) CHOICE(rolb ARG2(a,b), rolb ARG2(a,b), rolb ARG2(b,a))
#define ROR_L(a, b) CHOICE(rorl ARG2(a,b), rorl ARG2(a,b), _LTOG ror ARG2(b,a))
#define ROR_W(a, b) CHOICE(rorw ARG2(a,b), rorw ARG2(a,b), _WTOG ror ARG2(b,a))
#define ROR_B(a, b) CHOICE(rorb ARG2(a,b), rorb ARG2(a,b), rorb ARG2(b,a))
#define REP CHOICE(rep ;, rep ;, repe)
#define REPE CHOICE(repz ;, repe ;, repe)
#define REPNE CHOICE(repnz ;, repne ;, repne)
#define REPNZ REPNE
#define REPZ REPE
#define RET CHOICE(ret, ret, ret)
#define SAHF CHOICE(sahf, sahf, sahf)
#define SAL_L(a, b) CHOICE(sall ARG2(a,b), sall ARG2(a,b), _LTOG sal ARG2(b,a))
#define SAL_W(a, b) CHOICE(salw ARG2(a,b), salw ARG2(a,b), _WTOG sal ARG2(b,a))
#define SAL_B(a, b) CHOICE(salb ARG2(a,b), salb ARG2(a,b), salb ARG2(b,a))
#define SAR_L(a, b) CHOICE(sarl ARG2(a,b), sarl ARG2(a,b), _LTOG sar ARG2(b,a))
#define SAR_W(a, b) CHOICE(sarw ARG2(a,b), sarw ARG2(a,b), _WTOG sar ARG2(b,a))
#define SAR_B(a, b) CHOICE(sarb ARG2(a,b), sarb ARG2(a,b), sarb ARG2(b,a))
#define SBB_L(a, b) CHOICE(sbbl ARG2(a,b), sbbl ARG2(a,b), _LTOG sbb ARG2(b,a))
#define SBB_W(a, b) CHOICE(sbbw ARG2(a,b), sbbw ARG2(a,b), _WTOG sbb ARG2(b,a))
#define SBB_B(a, b) CHOICE(sbbb ARG2(a,b), sbbb ARG2(a,b), sbbb ARG2(b,a))
#define SCAS_L CHOICE(scasl, scasl, _LTOG scas)
#define SCAS_W CHOICE(scasw, scasw, _WTOG scas)
#define SCAS_B CHOICE(scasb, scasb, scasb)
#define SETA(a) CHOICE(seta a, seta a, seta a)
#define SETAE(a) CHOICE(setae a, setae a, setae a)
#define SETB(a) CHOICE(setb a, setb a, setb a)
#define SETBE(a) CHOICE(setbe a, setbe a, setbe a)
#define SETC(a) CHOICE(setc a, setb a, setb a)
#define SETE(a) CHOICE(sete a, sete a, sete a)
#define SETG(a) CHOICE(setg a, setg a, setg a)
#define SETGE(a) CHOICE(setge a, setge a, setge a)
#define SETL(a) CHOICE(setl a, setl a, setl a)
#define SETLE(a) CHOICE(setle a, setle a, setle a)
#define SETNA(a) CHOICE(setna a, setna a, setna a)
#define SETNAE(a) CHOICE(setnae a, setnae a, setnae a)
#define SETNB(a) CHOICE(setnb a, setnb a, setnb a)
#define SETNBE(a) CHOICE(setnbe a, setnbe a, setnbe a)
#define SETNC(a) CHOICE(setnc a, setnb a, setnb a)
#define SETNE(a) CHOICE(setne a, setne a, setne a)
#define SETNG(a) CHOICE(setng a, setng a, setng a)
#define SETNGE(a) CHOICE(setnge a, setnge a, setnge a)
#define SETNL(a) CHOICE(setnl a, setnl a, setnl a)
#define SETNLE(a) CHOICE(setnle a, setnle a, setnle a)
#define SETNO(a) CHOICE(setno a, setno a, setno a)
#define SETNP(a) CHOICE(setnp a, setnp a, setnp a)
#define SETNS(a) CHOICE(setns a, setns a, setna a)
#define SETNZ(a) CHOICE(setnz a, setnz a, setnz a)
#define SETO(a) CHOICE(seto a, seto a, seto a)
#define SETP(a) CHOICE(setp a, setp a, setp a)
#define SETPE(a) CHOICE(setpe a, setpe a, setpe a)
#define SETPO(a) CHOICE(setpo a, setpo a, setpo a)
#define SETS(a) CHOICE(sets a, sets a, seta a)
#define SETZ(a) CHOICE(setz a, setz a, setz a)
#define SGDT(a) CHOICE(sgdt a, sgdt a, sgdt a)
#define SIDT(a) CHOICE(sidt a, sidt a, sidt a)
#define SHL_L(a, b) CHOICE(shll ARG2(a,b), shll ARG2(a,b), _LTOG shl ARG2(b,a))
#define SHL_W(a, b) CHOICE(shlw ARG2(a,b), shlw ARG2(a,b), _WTOG shl ARG2(b,a))
#define SHL_B(a, b) CHOICE(shlb ARG2(a,b), shlb ARG2(a,b), shlb ARG2(b,a))
#define SHLD_L(a,b,c) CHOICE(shldl ARG3(a,b,c), shldl ARG3(a,b,c), _LTOG shld ARG3(c,b,a))
#define SHLD2_L(a,b) CHOICE(shldl ARG2(a,b), shldl ARG3(CL,a,b), _LTOG shld ARG3(b,a,CL))
#define SHLD_W(a,b,c) CHOICE(shldw ARG3(a,b,c), shldw ARG3(a,b,c), _WTOG shld ARG3(c,b,a))
#define SHLD2_W(a,b) CHOICE(shldw ARG2(a,b), shldw ARG3(CL,a,b), _WTOG shld ARG3(b,a,CL))
#define SHR_L(a, b) CHOICE(shrl ARG2(a,b), shrl ARG2(a,b), _LTOG shr ARG2(b,a))
#define SHR_W(a, b) CHOICE(shrw ARG2(a,b), shrw ARG2(a,b), _WTOG shr ARG2(b,a))
#define SHR_B(a, b) CHOICE(shrb ARG2(a,b), shrb ARG2(a,b), shrb ARG2(b,a))
#define SHRD_L(a,b,c) CHOICE(shrdl ARG3(a,b,c), shrdl ARG3(a,b,c), _LTOG shrd ARG3(c,b,a))
#define SHRD2_L(a,b) CHOICE(shrdl ARG2(a,b), shrdl ARG3(CL,a,b), _LTOG shrd ARG3(b,a,CL))
#define SHRD_W(a,b,c) CHOICE(shrdw ARG3(a,b,c), shrdw ARG3(a,b,c), _WTOG shrd ARG3(c,b,a))
#define SHRD2_W(a,b) CHOICE(shrdw ARG2(a,b), shrdw ARG3(CL,a,b), _WTOG shrd ARG3(b,a,CL))
#define SLDT(a) CHOICE(sldt a, sldt a, sldt a)
#define SMSW(a) CHOICE(smsw a, smsw a, smsw a)
#define STC CHOICE(stc, stc, stc)
#define STD CHOICE(std, std, std)
#define STI CHOICE(sti, sti, sti)
#define STOS_L CHOICE(stosl, stosl, _LTOG stos)
#define STOS_W CHOICE(stosw, stosw, _WTOG stos)
#define STOS_B CHOICE(stosb, stosb, stosb)
#define STR(a) CHOICE(str a, str a, str a)
#define SUB_L(a, b) CHOICE(subl ARG2(a,b), subl ARG2(a,b), _LTOG sub ARG2(b,a))
#define SUB_W(a, b) CHOICE(subw ARG2(a,b), subw ARG2(a,b), _WTOG sub ARG2(b,a))
#define SUB_B(a, b) CHOICE(subb ARG2(a,b), subb ARG2(a,b), subb ARG2(b,a))
#define TEST_L(a, b) CHOICE(testl ARG2(a,b), testl ARG2(a,b), _LTOG test ARG2(b,a))
#define TEST_W(a, b) CHOICE(testw ARG2(a,b), testw ARG2(a,b), _WTOG test ARG2(b,a))
#define TEST_B(a, b) CHOICE(testb ARG2(a,b), testb ARG2(a,b), testb ARG2(b,a))
#define VERR(a) CHOICE(verr a, verr a, verr a)
#define VERW(a) CHOICE(verw a, verw a, verw a)
#define WAIT CHOICE(wait, wait, wait)
#define XCHG_L(a, b) CHOICE(xchgl ARG2(a,b), xchgl ARG2(a,b), _LTOG xchg ARG2(b,a))
#define XCHG_W(a, b) CHOICE(xchgw ARG2(a,b), xchgw ARG2(a,b), _WTOG xchg ARG2(b,a))
#define XCHG_B(a, b) CHOICE(xchgb ARG2(a,b), xchgb ARG2(a,b), xchgb ARG2(b,a))
#define XLAT CHOICE(xlat, xlat, xlat)
#define XOR_L(a, b) CHOICE(xorl ARG2(a,b), xorl ARG2(a,b), _LTOG xor ARG2(b,a))
#define XOR_W(a, b) CHOICE(xorw ARG2(a,b), xorw ARG2(a,b), _WTOG xor ARG2(b,a))
#define XOR_B(a, b) CHOICE(xorb ARG2(a,b), xorb ARG2(a,b), xorb ARG2(b,a))
/* Floating Point Instructions */
#define F2XM1 CHOICE(f2xm1, f2xm1, f2xm1)
#define FABS CHOICE(fabs, fabs, fabs)
#define FADD_D(a) CHOICE(faddl a, faddl a, faddd a)
#define FADD_S(a) CHOICE(fadds a, fadds a, fadds a)
#define FADD2(a, b) CHOICE(fadd ARG2(a,b), fadd ARG2(a,b), fadd ARG2(b,a))
#define FADDP(a, b) CHOICE(faddp ARG2(a,b), faddp ARG2(a,b), faddp ARG2(b,a))
#define FIADD_L(a) CHOICE(fiaddl a, fiaddl a, fiaddl a)
#define FIADD_W(a) CHOICE(fiadd a, fiadds a, fiadds a)
#define FBLD(a) CHOICE(fbld a, fbld a, fbld a)
#define FBSTP(a) CHOICE(fbstp a, fbstp a, fbstp a)
#define FCHS CHOICE(fchs, fchs, fchs)
#define FCLEX CHOICE(fclex, wait; fnclex, wait; fclex)
#define FNCLEX CHOICE(fnclex, fnclex, fclex)
#define FCOM(a) CHOICE(fcom a, fcom a, fcom a)
#define FCOM_D(a) CHOICE(fcoml a, fcoml a, fcomd a)
#define FCOM_S(a) CHOICE(fcoms a, fcoms a, fcoms a)
#define FCOMP(a) CHOICE(fcomp a, fcomp a, fcomp a)
#define FCOMP_D(a) CHOICE(fcompl a, fcompl a, fcompd a)
#define FCOMP_S(a) CHOICE(fcomps a, fcomps a, fcomps a)
#define FCOMPP CHOICE(fcompp, fcompp, fcompp)
#define FCOS CHOICE(fcos, fcos, fcos)
#define FDECSTP CHOICE(fdecstp, fdecstp, fdecstp)
#define FDIV_D(a) CHOICE(fdivl a, fdivl a, fdivd a)
#define FDIV_S(a) CHOICE(fdivs a, fdivs a, fdivs a)
#define FDIV2(a, b) CHOICE(fdiv ARG2(a,b), fdiv ARG2(a,b), fdiv ARG2(b,a))
#define FDIVP(a, b) CHOICE(fdivp ARG2(a,b), fdivp ARG2(a,b), fdivp ARG2(b,a))
#define FIDIV_L(a) CHOICE(fidivl a, fidivl a, fidivl a)
#define FIDIV_W(a) CHOICE(fidiv a, fidivs a, fidivs a)
#define FDIVR_D(a) CHOICE(fdivrl a, fdivrl a, fdivrd a)
#define FDIVR_S(a) CHOICE(fdivrs a, fdivrs a, fdivrs a)
#define FDIVR2(a, b) CHOICE(fdivr ARG2(a,b), fdivr ARG2(a,b), fdivr ARG2(b,a))
#define FDIVRP(a, b) CHOICE(fdivrp ARG2(a,b), fdivrp ARG2(a,b), fdivrp ARG2(b,a))
#define FIDIVR_L(a) CHOICE(fidivrl a, fidivrl a, fidivrl a)
#define FIDIVR_W(a) CHOICE(fidivr a, fidivrs a, fidivrs a)
#define FFREE(a) CHOICE(ffree a, ffree a, ffree a)
#define FICOM_L(a) CHOICE(ficoml a, ficoml a, ficoml a)
#define FICOM_W(a) CHOICE(ficom a, ficoms a, ficoms a)
#define FICOMP_L(a) CHOICE(ficompl a, ficompl a, ficompl a)
#define FICOMP_W(a) CHOICE(ficomp a, ficomps a, ficomps a)
#define FILD_Q(a) CHOICE(fildll a, fildq a, fildq a)
#define FILD_L(a) CHOICE(fildl a, fildl a, fildl a)
#define FILD_W(a) CHOICE(fild a, filds a, filds a)
#define FINCSTP CHOICE(fincstp, fincstp, fincstp)
#define FINIT CHOICE(finit, wait; fninit, wait; finit)
#define FNINIT CHOICE(fninit, fninit, finit)
#define FIST_L(a) CHOICE(fistl a, fistl a, fistl a)
#define FIST_W(a) CHOICE(fist a, fists a, fists a)
#define FISTP_Q(a) CHOICE(fistpll a, fistpq a, fistpq a)
#define FISTP_L(a) CHOICE(fistpl a, fistpl a, fistpl a)
#define FISTP_W(a) CHOICE(fistp a, fistps a, fistps a)
#define FLD_X(a) CHOICE(fldt a, fldt a, fldx a) /* 80 bit data type! */
#define FLD_D(a) CHOICE(fldl a, fldl a, fldd a)
#define FLD_S(a) CHOICE(flds a, flds a, flds a)
#define FLD1 CHOICE(fld1, fld1, fld1)
#define FLDL2T CHOICE(fldl2t, fldl2t, fldl2t)
#define FLDL2E CHOICE(fldl2e, fldl2e, fldl2e)
#define FLDPI CHOICE(fldpi, fldpi, fldpi)
#define FLDLG2 CHOICE(fldlg2, fldlg2, fldlg2)
#define FLDLN2 CHOICE(fldln2, fldln2, fldln2)
#define FLDZ CHOICE(fldz, fldz, fldz)
#define FLDCW(a) CHOICE(fldcw a, fldcw a, fldcw a)
#define FLDENV(a) CHOICE(fldenv a, fldenv a, fldenv a)
#define FMUL_S(a) CHOICE(fmuls a, fmuls a, fmuls a)
#define FMUL_D(a) CHOICE(fmull a, fmull a, fmuld a)
#define FMUL2(a, b) CHOICE(fmul ARG2(a,b), fmul ARG2(a,b), fmul ARG2(b,a))
#define FMULP(a, b) CHOICE(fmulp ARG2(a,b), fmulp ARG2(a,b), fmulp ARG2(b,a))
#define FIMUL_L(a) CHOICE(fimull a, fimull a, fimull a)
#define FIMUL_W(a) CHOICE(fimul a, fimuls a, fimuls a)
#define FNOP CHOICE(fnop, fnop, fnop)
#define FPATAN CHOICE(fpatan, fpatan, fpatan)
#define FPREM CHOICE(fprem, fprem, fprem)
#define FPREM1 CHOICE(fprem1, fprem1, fprem1)
#define FPTAN CHOICE(fptan, fptan, fptan)
#define FRNDINT CHOICE(frndint, frndint, frndint)
#define FRSTOR(a) CHOICE(frstor a, frstor a, frstor a)
#define FSAVE(a) CHOICE(fsave a, wait; fnsave a, wait; fsave a)
#define FNSAVE(a) CHOICE(fnsave a, fnsave a, fsave a)
#define FSCALE CHOICE(fscale, fscale, fscale)
#define FSIN CHOICE(fsin, fsin, fsin)
#define FSINCOS CHOICE(fsincos, fsincos, fsincos)
#define FSQRT CHOICE(fsqrt, fsqrt, fsqrt)
#define FST_D(a) CHOICE(fstl a, fstl a, fstd a)
#define FST_S(a) CHOICE(fsts a, fsts a, fsts a)
#define FSTP_X(a) CHOICE(fstpt a, fstpt a, fstpx a)
#define FSTP_D(a) CHOICE(fstpl a, fstpl a, fstpd a)
#define FSTP_S(a) CHOICE(fstps a, fstps a, fstps a)
#define FSTCW(a) CHOICE(fstcw a, wait; fnstcw a, wait; fstcw a)
#define FNSTCW(a) CHOICE(fnstcw a, fnstcw a, fstcw a)
#define FSTENV(a) CHOICE(fstenv a, wait; fnstenv a, fstenv a)
#define FNSTENV(a) CHOICE(fnstenv a, fnstenv a, fstenv a)
#define FSTSW(a) CHOICE(fstsw a, wait; fnstsw a, wait; fstsw a)
#define FNSTSW(a) CHOICE(fnstsw a, fnstsw a, fstsw a)
#define FSUB_S(a) CHOICE(fsubs a, fsubs a, fsubs a)
#define FSUB_D(a) CHOICE(fsubl a, fsubl a, fsubd a)
#define FSUB2(a, b) CHOICE(fsub ARG2(a,b), fsub ARG2(a,b), fsub ARG2(b,a))
#define FSUBP(a, b) CHOICE(fsubp ARG2(a,b), fsubp ARG2(a,b), fsubp ARG2(b,a))
#define FISUB_L(a) CHOICE(fisubl a, fisubl a, fisubl a)
#define FISUB_W(a) CHOICE(fisub a, fisubs a, fisubs a)
#define FSUBR_S(a) CHOICE(fsubrs a, fsubrs a, fsubrs a)
#define FSUBR_D(a) CHOICE(fsubrl a, fsubrl a, fsubrd a)
#define FSUBR2(a, b) CHOICE(fsubr ARG2(a,b), fsubr ARG2(a,b), fsubr ARG2(b,a))
#define FSUBRP(a, b) CHOICE(fsubrp ARG2(a,b), fsubrp ARG2(a,b), fsubrp ARG2(b,a))
#define FISUBR_L(a) CHOICE(fisubrl a, fisubrl a, fisubrl a)
#define FISUBR_W(a) CHOICE(fisubr a, fisubrs a, fisubrs a)
#define FTST CHOICE(ftst, ftst, ftst)
#define FUCOM(a) CHOICE(fucom a, fucom a, fucom a)
#define FUCOMP(a) CHOICE(fucomp a, fucomp a, fucomp a)
#define FUCOMPP CHOICE(fucompp, fucompp, fucompp)
#define FWAIT CHOICE(wait, wait, wait)
#define FXAM CHOICE(fxam, fxam, fxam)
#define FXCH(a) CHOICE(fxch a, fxch a, fxch a)
#define FXTRACT CHOICE(fxtract, fxtract, fxtract)
#define FYL2X CHOICE(fyl2x, fyl2x, fyl2x)
#define FYL2XP1 CHOICE(fyl2xp1, fyl2xp1, fyl2xp1)
#endif /* __ASSYNTAX_H__ */

View file

@ -72,7 +72,6 @@ libbsd_la_SOURCES = \
EXTRA_DIST = \
bsd_apm.c \
bsd_kqueue_apm.c \
bsdResource.c \
memrange.h \
libusb/data.c \
libusb/descr.c \

View file

@ -1,92 +0,0 @@
/* Resource information code */
#ifdef HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif
#include <X11/X.h>
#include "xf86.h"
#include "xf86Priv.h"
#include "xf86Privstr.h"
#include "xf86Pci.h"
#include "xf86Resources.h"
#define NEED_OS_RAC_PROTOS
#include "xf86_OSlib.h"
/* Avoid Imakefile changes */
#include "bus/Pci.h"
#ifdef INCLUDE_XF86_NO_DOMAIN
#if defined(__alpha__) || defined(__sparc64__) || defined(__amd64__)
resPtr
xf86AccResFromOS(resPtr ret)
{
resRange range;
/*
* Fallback is to claim the following areas:
*
* 0x000c0000 - 0x000effff location of VGA and other extensions ROMS
*/
RANGE(range, 0x000c0000, 0x000effff, ResExcMemBlock);
ret = xf86AddResToList(ret, &range, -1);
/*
* Fallback would be to claim well known ports in the 0x0 - 0x3ff range
* along with their sparse I/O aliases, but that's too imprecise. Instead
* claim a bare minimum here.
*/
RANGE(range, 0x00000000, 0x000000ff, ResExcIoBlock); /* For mainboard */
ret = xf86AddResToList(ret, &range, -1);
/*
* At minimum, the top and bottom resources must be claimed, so that
* resources that are (or appear to be) unallocated can be relocated.
*/
RANGE(range, 0x00000000, 0x00000000, ResExcMemBlock);
ret = xf86AddResToList(ret, &range, -1);
RANGE(range, 0xffffffff, 0xffffffff, ResExcMemBlock);
ret = xf86AddResToList(ret, &range, -1);
/* RANGE(range, 0x00000000, 0x00000000, ResExcIoBlock);
ret = xf86AddResToList(ret, &range, -1); */
RANGE(range, 0xffffffff, 0xffffffff, ResExcIoBlock);
ret = xf86AddResToList(ret, &range, -1);
/* XXX add others */
return ret;
}
#elif defined(__powerpc__)
resPtr
xf86AccResFromOS(resPtr ret)
{
resRange range;
/*
* At minimum, the top and bottom resources must be claimed, so that
* resources that are (or appear to be) unallocated can be relocated.
*/
RANGE(range, 0x00000000, 0x00000000, ResExcMemBlock);
ret = xf86AddResToList(ret, &range, -1);
RANGE(range, 0xffffffff, 0xffffffff, ResExcMemBlock);
ret = xf86AddResToList(ret, &range, -1);
RANGE(range, 0x00000000, 0x00000000, ResExcIoBlock);
ret = xf86AddResToList(ret, &range, -1);
RANGE(range, 0x0000ffff, 0x0000ffff, ResExcIoBlock);
ret = xf86AddResToList(ret, &range, -1);
return ret;
}
#else
#error : Put your platform dependent code here!!
#endif
#endif /* INCLUDE_XF86_NO_DOMAIN */

View file

@ -15,14 +15,6 @@ if XORG_BUS_IX86PCI
PCI_SOURCES += ix86Pci.c
endif
if XORG_BUS_PPCPCI
PCI_SOURCES += ppcPci.c
endif
if XORG_BUS_SPARCPCI
PCI_SOURCES += sparcPci.c
endif
if XORG_BUS_SPARC
PLATFORM_SOURCES = Sbus.c
sdk_HEADERS += xf86Sbus.h

View file

@ -136,28 +136,18 @@
#include <pciaccess.h>
#define PCI_MFDEV_SUPPORT 1 /* Include PCI multifunction device support */
#define PCI_BRIDGE_SUPPORT 1 /* Include support for PCI-to-PCI bridges */
/*
* Global data
*/
pciBusInfo_t *pciBusInfo[MAX_PCI_BUSES] = { NULL, };
_X_EXPORT int pciNumBuses = 0; /* Actual number of PCI buses */
int pciMaxBusNum = MAX_PCI_BUSES;
/* Global data */
pciBusInfo_t *pciBusInfo = NULL;
_X_EXPORT int pciNumBuses = 0; /* Actual number of PCI buses */
_X_EXPORT ADDRESS
pciBusAddrToHostAddr(PCITAG tag, PciAddrType type, ADDRESS addr)
{
int bus = PCI_BUS_FROM_TAG(tag);
if ((bus >= 0) && (bus < pciNumBuses) && pciBusInfo[bus] &&
pciBusInfo[bus]->funcs->pciAddrBusToHost)
return (*pciBusInfo[bus]->funcs->pciAddrBusToHost)(tag, type, addr);
else
return(addr);
if (pciBusInfo->funcs->pciAddrBusToHost)
return pciBusInfo->funcs->pciAddrBusToHost(tag, type, addr);
else
return addr;
}
_X_EXPORT PCITAG

View file

@ -115,16 +115,10 @@
/*
* Global Definitions
*/
#define MAX_PCI_DEVICES 128 /* Max number of devices accomodated */
/* by xf86scanpci */
#if defined(sun) && defined(SVR4) && defined(sparc)
# define MAX_PCI_BUSES 4096 /* Max number of PCI buses */
#elif (defined(__alpha__) || defined(__ia64__)) && defined (linux)
# define MAX_PCI_DOMAINS 512
# define PCI_DOM_MASK 0x01fful
# define MAX_PCI_BUSES (MAX_PCI_DOMAINS*256) /* 256 per domain */
#if (defined(__alpha__) || defined(__ia64__)) && defined (linux)
#define PCI_DOM_MASK 0x01fful
#else
# define MAX_PCI_BUSES 256 /* Max number of PCI buses */
#define PCI_DOM_MASK 0x0ffu
#endif
#define DEVID(vendor, device) \
@ -199,17 +193,10 @@
#if !defined(ARCH_PCI_INIT)
/*
* Select architecture specific PCI init function
*/
#warning You really need to port to libpciaccess.
#if defined(__i386__) || defined(__i386) || defined(__amd64__) || defined(__amd64)
# define ARCH_PCI_INIT ix86PciInit
#elif defined(__powerpc__) || defined(__powerpc64__)
# define ARCH_PCI_INIT ppcPciInit
#elif defined(__sparc__) || defined(sparc)
# define ARCH_PCI_INIT sparcPciInit
# define ARCH_PCI_PCI_BRIDGE sparcPciPciBridge
#endif
#define ARCH_PCI_INIT ix86PciInit
#endif /* i386/amd64 */
#endif /* !defined(ARCH_PCI_INIT) */
#ifndef ARCH_PCI_INIT
@ -218,14 +205,6 @@
extern void ARCH_PCI_INIT(void);
#if defined(XF86SCANPCI_WRAPPER)
typedef enum {
SCANPCI_INIT,
SCANPCI_TERM
} scanpciWrapperOpt;
extern void XF86SCANPCI_WRAPPER(scanpciWrapperOpt flags);
#endif
/*
* Table of functions used to access a specific PCI bus domain
* (e.g. a primary PCI bus and all of its secondaries)
@ -262,8 +241,6 @@ void pciCfgMech1SetBits(PCITAG tag, int offset, CARD32 mask,
CARD32 val);
ADDRESS pciAddrNOOP(PCITAG tag, PciAddrType type, ADDRESS);
extern int pciMaxBusNum;
extern pciBusInfo_t *pciBusInfo[];
extern pciBusInfo_t *pciBusInfo;
#endif /* _PCI_H */

View file

@ -80,7 +80,7 @@ void
bsdPciInit(void)
{
pciNumBuses = 1;
pciBusInfo[0] = &bsd_pci;
pciBusInfo = &bsd_pci;
xf86InitVidMem();
}

View file

@ -277,8 +277,8 @@ ix86PciBusCheck(void)
return FALSE;
}
static
void ix86PciSelectCfgmech(void)
static void
ix86PciSelectCfgmech(void)
{
static Bool beenhere = FALSE;
CARD32 mode1Res1 = 0, mode1Res2 = 0, oldVal1 = 0;
@ -290,429 +290,197 @@ void ix86PciSelectCfgmech(void)
beenhere = TRUE;
/*
* Determine if motherboard chipset supports PCI Config Mech 1 or 2
* We rely on xf86Info.pciFlags to tell which mechanisms to try....
*/
switch (xf86Info.pciFlags) {
case PCIOsConfig:
case PCIProbe1:
if (!xf86EnableIO())
return;
/* Determine if motherboard chipset supports PCI Config Mech 1 or 2 */
do {
if (!xf86EnableIO())
return;
xf86MsgVerb(X_INFO, 2,
"PCI: Probing config type using method 1\n");
oldVal1 = inl(PCI_CFGMECH1_ADDRESS_REG);
#ifdef DEBUGPCI
if (xf86Verbose > 2) {
ErrorF("Checking config type 1:\n"
"\tinitial value of MODE1_ADDR_REG is 0x%08x\n", oldVal1);
ErrorF("\tChecking that all bits in mask 0x7f000000 are clear\n");
}
#endif
/* Assuming config type 1 to start with */
if ((oldVal1 & 0x7f000000) == 0) {
stages |= 0x01;
xf86MsgVerb(X_INFO, 2,
"PCI: Probing config type using method 1\n");
oldVal1 = inl(PCI_CFGMECH1_ADDRESS_REG);
#ifdef DEBUGPCI
if (xf86Verbose > 2) {
ErrorF("\tValue indicates possibly config type 1\n");
ErrorF("\tWriting 32-bit value 0x%08x to MODE1_ADDR_REG\n", PCI_EN);
#if 0
ErrorF("\tWriting 8-bit value 0x00 to MODE1_ADDR_REG + 3\n");
#endif
ErrorF("Checking config type 1:\n"
"\tinitial value of MODE1_ADDR_REG is 0x%08x\n", oldVal1);
ErrorF("\tChecking that all bits in mask 0x7f000000 are clear\n");
}
#endif
ix86Pci0.configMech = PCI_CFG_MECH_1;
ix86Pci0.numDevices = PCI_CFGMECH1_MAXDEV;
ix86Pci0.funcs = &ix86Funcs1;
/* Assuming config type 1 to start with */
if ((oldVal1 & 0x7f000000) == 0) {
outl(PCI_CFGMECH1_ADDRESS_REG, PCI_EN);
#if 0
/*
* This seems to cause some Neptune-based PCI machines to switch
* from config type 1 to config type 2
*/
outb(PCI_CFGMECH1_ADDRESS_REG + 3, 0);
#endif
mode1Res1 = inl(PCI_CFGMECH1_ADDRESS_REG);
stages |= 0x01;
#ifdef DEBUGPCI
if (xf86Verbose > 2) {
ErrorF("\tValue read back from MODE1_ADDR_REG is 0x%08x\n",
if (xf86Verbose > 2) {
ErrorF("\tValue indicates possibly config type 1\n");
ErrorF("\tWriting 32-bit value 0x%08x to MODE1_ADDR_REG\n", PCI_EN);
#if 0
ErrorF("\tWriting 8-bit value 0x00 to MODE1_ADDR_REG + 3\n");
#endif
}
#endif
ix86Pci0.configMech = PCI_CFG_MECH_1;
ix86Pci0.numDevices = PCI_CFGMECH1_MAXDEV;
ix86Pci0.funcs = &ix86Funcs1;
outl(PCI_CFGMECH1_ADDRESS_REG, PCI_EN);
#if 0
/*
* This seems to cause some Neptune-based PCI machines to switch
* from config type 1 to config type 2
*/
outb(PCI_CFGMECH1_ADDRESS_REG + 3, 0);
#endif
mode1Res1 = inl(PCI_CFGMECH1_ADDRESS_REG);
#ifdef DEBUGPCI
if (xf86Verbose > 2) {
ErrorF("\tValue read back from MODE1_ADDR_REG is 0x%08x\n",
mode1Res1);
ErrorF("\tRestoring original contents of MODE1_ADDR_REG\n");
}
ErrorF("\tRestoring original contents of MODE1_ADDR_REG\n");
}
#endif
outl(PCI_CFGMECH1_ADDRESS_REG, oldVal1);
outl(PCI_CFGMECH1_ADDRESS_REG, oldVal1);
if (mode1Res1) {
if (mode1Res1) {
stages |= 0x02;
stages |= 0x02;
#ifdef DEBUGPCI
if (xf86Verbose > 2) {
ErrorF("\tValue read back is non-zero, and indicates possible"
" config type 1\n");
}
#endif
if (ix86PciBusCheck()) {
#ifdef DEBUGPCI
if (xf86Verbose > 2)
ErrorF("\tBus check Confirms this: ");
#endif
xf86MsgVerb(X_INFO, 2, "PCI: Config type is 1\n");
xf86MsgVerb(X_INFO, 3,
"PCI: stages = 0x%02x, oldVal1 = 0x%08lx, mode1Res1"
" = 0x%08lx\n", stages, (unsigned long)oldVal1,
(unsigned long)mode1Res1);
return;
}
#ifdef DEBUGPCI
if (xf86Verbose > 2) {
ErrorF("\tBus check fails to confirm this, continuing type 1"
" check ...\n");
}
#endif
}
stages |= 0x04;
#ifdef DEBUGPCI
if (xf86Verbose > 2) {
ErrorF("\tValue read back is non-zero, and indicates possible"
" config type 1\n");
ErrorF("\tWriting 0xff000001 to MODE1_ADDR_REG\n");
}
#endif
if (ix86PciBusCheck()) {
#ifdef DEBUGPCI
if (xf86Verbose > 2)
ErrorF("\tBus check Confirms this: ");
#endif
xf86MsgVerb(X_INFO, 2, "PCI: Config type is 1\n");
xf86MsgVerb(X_INFO, 3,
"PCI: stages = 0x%02x, oldVal1 = 0x%08lx, mode1Res1"
" = 0x%08lx\n", stages, (unsigned long)oldVal1,
(unsigned long)mode1Res1);
return;
}
outl(PCI_CFGMECH1_ADDRESS_REG, 0xff000001);
mode1Res2 = inl(PCI_CFGMECH1_ADDRESS_REG);
#ifdef DEBUGPCI
if (xf86Verbose > 2) {
ErrorF("\tBus check fails to confirm this, continuing type 1"
" check ...\n");
}
#endif
}
stages |= 0x04;
#ifdef DEBUGPCI
if (xf86Verbose > 2) {
ErrorF("\tWriting 0xff000001 to MODE1_ADDR_REG\n");
}
#endif
outl(PCI_CFGMECH1_ADDRESS_REG, 0xff000001);
mode1Res2 = inl(PCI_CFGMECH1_ADDRESS_REG);
#ifdef DEBUGPCI
if (xf86Verbose > 2) {
ErrorF("\tValue read back from MODE1_ADDR_REG is 0x%08x\n",
ErrorF("\tValue read back from MODE1_ADDR_REG is 0x%08x\n",
mode1Res2);
ErrorF("\tRestoring original contents of MODE1_ADDR_REG\n");
}
ErrorF("\tRestoring original contents of MODE1_ADDR_REG\n");
}
#endif
outl(PCI_CFGMECH1_ADDRESS_REG, oldVal1);
outl(PCI_CFGMECH1_ADDRESS_REG, oldVal1);
if ((mode1Res2 & 0x80000001) == 0x80000000) {
if ((mode1Res2 & 0x80000001) == 0x80000000) {
stages |= 0x08;
stages |= 0x08;
#ifdef DEBUGPCI
if (xf86Verbose > 2) {
ErrorF("\tValue read back has only the msb set\n"
"\tThis indicates possible config type 1\n");
}
if (xf86Verbose > 2) {
ErrorF("\tValue read back has only the msb set\n"
"\tThis indicates possible config type 1\n");
}
#endif
if (ix86PciBusCheck()) {
if (ix86PciBusCheck()) {
#ifdef DEBUGPCI
if (xf86Verbose > 2)
ErrorF("\tBus check Confirms this: ");
if (xf86Verbose > 2)
ErrorF("\tBus check Confirms this: ");
#endif
xf86MsgVerb(X_INFO, 2, "PCI: Config type is 1\n");
xf86MsgVerb(X_INFO, 3,
"PCI: stages = 0x%02x, oldVal1 = 0x%08lx,\n"
"\tmode1Res1 = 0x%08lx, mode1Res2 = 0x%08lx\n",
stages, (unsigned long)oldVal1,
(unsigned long)mode1Res1, (unsigned long)mode1Res2);
return;
}
xf86MsgVerb(X_INFO, 2, "PCI: Config type is 1\n");
xf86MsgVerb(X_INFO, 3,
"PCI: stages = 0x%02x, oldVal1 = 0x%08lx,\n"
"\tmode1Res1 = 0x%08lx, mode1Res2 = 0x%08lx\n",
stages, (unsigned long)oldVal1,
(unsigned long)mode1Res1, (unsigned long)mode1Res2);
return;
}
#ifdef DEBUGPCI
if (xf86Verbose > 2) {
ErrorF("\tBus check fails to confirm this.\n");
}
if (xf86Verbose > 2) {
ErrorF("\tBus check fails to confirm this.\n");
}
#endif
}
}
xf86MsgVerb(X_INFO, 3, "PCI: Standard check for type 1 failed.\n");
xf86MsgVerb(X_INFO, 3, "PCI: stages = 0x%02x, oldVal1 = 0x%08lx,\n"
"\tmode1Res1 = 0x%08lx, mode1Res2 = 0x%08lx\n",
stages, (unsigned long)oldVal1, (unsigned long)mode1Res1,
(unsigned long)mode1Res2);
/* Try config type 2 */
oldVal2 = inb(PCI_CFGMECH2_ENABLE_REG);
if ((oldVal2 & 0xf0) == 0) {
ix86Pci0.configMech = PCI_CFG_MECH_2;
ix86Pci0.numDevices = PCI_CFGMECH2_MAXDEV;
ix86Pci0.funcs = &ix86Funcs2;
outb(PCI_CFGMECH2_ENABLE_REG, 0x0e);
mode2Res1 = inb(PCI_CFGMECH2_ENABLE_REG);
outb(PCI_CFGMECH2_ENABLE_REG, oldVal2);
if (mode2Res1 == 0x0e) {
if (ix86PciBusCheck()) {
xf86MsgVerb(X_INFO, 2, "PCI: Config type is 2\n");
return;
}
}
}
break; /* } */
case PCIProbe2: /* { */
if (!xf86EnableIO())
return;
xf86MsgVerb(X_INFO, 3, "PCI: Standard check for type 1 failed.\n");
xf86MsgVerb(X_INFO, 3, "PCI: stages = 0x%02x, oldVal1 = 0x%08lx,\n"
"\tmode1Res1 = 0x%08lx, mode1Res2 = 0x%08lx\n",
stages, (unsigned long)oldVal1, (unsigned long)mode1Res1,
(unsigned long)mode1Res2);
/* The scanpci-style detection method */
/* Try config type 2 */
oldVal2 = inb(PCI_CFGMECH2_ENABLE_REG);
if ((oldVal2 & 0xf0) == 0) {
ix86Pci0.configMech = PCI_CFG_MECH_2;
ix86Pci0.numDevices = PCI_CFGMECH2_MAXDEV;
ix86Pci0.funcs = &ix86Funcs2;
xf86MsgVerb(X_INFO, 2, "PCI: Probing config type using method 2\n");
outb(PCI_CFGMECH2_ENABLE_REG, 0x0e);
mode2Res1 = inb(PCI_CFGMECH2_ENABLE_REG);
outb(PCI_CFGMECH2_ENABLE_REG, oldVal2);
outb(PCI_CFGMECH2_ENABLE_REG, 0x00);
outb(PCI_CFGMECH2_FORWARD_REG, 0x00);
mode2Res1 = inb(PCI_CFGMECH2_ENABLE_REG);
mode2Res2 = inb(PCI_CFGMECH2_FORWARD_REG);
if (mode2Res1 == 0 && mode2Res2 == 0) {
xf86MsgVerb(X_INFO, 2, "PCI: Config type is 2\n");
ix86Pci0.configMech = PCI_CFG_MECH_2;
ix86Pci0.numDevices = PCI_CFGMECH2_MAXDEV;
ix86Pci0.funcs = &ix86Funcs2;
return;
}
oldVal1 = inl(PCI_CFGMECH1_ADDRESS_REG);
outl(PCI_CFGMECH1_ADDRESS_REG, PCI_EN);
mode1Res1 = inl(PCI_CFGMECH1_ADDRESS_REG);
outl(PCI_CFGMECH1_ADDRESS_REG, oldVal1);
if (mode1Res1 == PCI_EN) {
xf86MsgVerb(X_INFO, 2, "PCI: Config type is 1\n");
ix86Pci0.configMech = PCI_CFG_MECH_1;
ix86Pci0.numDevices = PCI_CFGMECH1_MAXDEV;
ix86Pci0.funcs = &ix86Funcs1;
return;
}
break; /* } */
case PCIForceConfig1:
if (!xf86EnableIO())
return;
xf86MsgVerb(X_INFO, 2, "PCI: Forcing config type 1\n");
ix86Pci0.configMech = PCI_CFG_MECH_1;
ix86Pci0.numDevices = PCI_CFGMECH1_MAXDEV;
ix86Pci0.funcs = &ix86Funcs1;
return;
case PCIForceConfig2:
if (!xf86EnableIO())
return;
xf86MsgVerb(X_INFO, 2, "PCI: Forcing config type 2\n");
ix86Pci0.configMech = PCI_CFG_MECH_2;
ix86Pci0.numDevices = PCI_CFGMECH2_MAXDEV;
ix86Pci0.funcs = &ix86Funcs2;
return;
case PCIForceNone:
if (mode2Res1 == 0x0e) {
if (ix86PciBusCheck()) {
xf86MsgVerb(X_INFO, 2, "PCI: Config type is 2\n");
return;
}
}
}
break;
}
} while (0);
/* No PCI found */
ix86Pci0.configMech = PCI_CFG_MECH_UNKNOWN;
xf86MsgVerb(X_INFO, 2, "PCI: No PCI bus found or probed for\n");
xf86MsgVerb(X_INFO, 2, "PCI: No PCI bus found\n");
}
#if 0
static pciTagRec
ix86PcibusTag(CARD8 bus, CARD8 cardnum, CARD8 func)
{
pciTagRec tag;
tag.cfg1 = 0;
if (func > 7 || cardnum >= pciBusInfo[bus]->numDevices)
return tag;
switch (ix86Pci0.configMech) {
case PCI_CFG_MECH_1:
tag.cfg1 = PCI_EN | ((CARD32)bus << 16) |
((CARD32)cardnum << 11) |
((CARD32)func << 8);
break;
case PCI_CFG_MECH_2:
tag.cfg2.port = 0xc000 | ((CARD16)cardnum << 8);
tag.cfg2.enable = 0xf0 | (func << 1);
tag.cfg2.forward = bus;
break;
}
return tag;
}
#endif
#if 0
static CARD32
ix86PciReadLongSetup(PCITAG Tag, int reg)
{
ix86PciSelectCfgmech();
return (*ix86Pci0.funcs->pciReadLong)(Tag,reg);
}
static CARD32
ix86PciReadLongCFG1(PCITAG Tag, int reg)
{
CARD32 addr, data = 0;
#ifdef DEBUGPCI
ErrorF("ix86PciReadLong 0x%lx, %d\n", Tag, reg);
#endif
addr = PCI_ADDR_FROM_TAG_CFG1(Tag,reg);
outl(PCI_CFGMECH1_ADDRESS_REG, addr);
data = inl(PCI_CFGMECH1_DATA_REG);
outl(PCI_CFGMECH1_ADDRESS_REG, 0);
#ifdef DEBUGPCI
ErrorF("ix86PciReadLong 0x%lx\n", data);
#endif
return data;
}
static CARD32
ix86PciReadLongCFG2(PCITAG Tag, int reg)
{
CARD32 addr, data = 0;
CARD8 forward, enable;
#ifdef DEBUGPCI
ErrorF("ix86PciReadLong 0x%lx, %d\n", Tag, reg);
#endif
forward = PCI_FORWARD_FROM_TAG(Tag);
enable = PCI_ENABLE_FROM_TAG(Tag);
addr = PCI_ADDR_FROM_TAG_CFG2(Tag,reg);
outb(PCI_CFGMECH2_ENABLE_REG, enable);
outb(PCI_CFGMECH2_FORWARD_REG, forward);
data = inl((CARD16)addr);
outb(PCI_CFGMECH2_ENABLE_REG, 0);
outb(PCI_CFGMECH2_FORWARD_REG, 0);
#ifdef DEBUGPCI
ErrorF("ix86PciReadLong 0x%lx\n", data);
#endif
return data;
}
static void
ix86PciWriteLongSetup(PCITAG Tag, int reg, CARD32 data)
{
ix86PciSelectCfgmech();
(*ix86Pci0.funcs->pciWriteLong)(Tag,reg,data);
}
static void
ix86PciWriteLongCFG1(PCITAG Tag, int reg, CARD32 data)
{
CARD32 addr;
addr = PCI_ADDR_FROM_TAG_CFG1(Tag,reg);
outl(PCI_CFGMECH1_ADDRESS_REG, addr);
outl(PCI_CFGMECH1_DATA_REG, data);
outl(PCI_CFGMECH1_ADDRESS_REG, 0);
}
static void
ix86PciWriteLongCFG2(PCITAG Tag, int reg, CARD32 data)
{
CARD32 addr;
CARD8 forward, enable;
forward = PCI_FORWARD_FROM_TAG(Tag);
enable = PCI_ENABLE_FROM_TAG(Tag);
addr = PCI_ADDR_FROM_TAG_CFG2(Tag,reg);
outb(PCI_CFGMECH2_ENABLE_REG, enable);
outb(PCI_CFGMECH2_FORWARD_REG, forward);
outl((CARD16)addr, data);
outb(PCI_CFGMECH2_ENABLE_REG, 0);
outb(PCI_CFGMECH2_FORWARD_REG, 0);
}
static void
ix86PciSetBitsLongSetup(PCITAG Tag, int reg, CARD32 mask, CARD32 val)
{
ix86PciSelectCfgmech();
(*ix86Pci0.funcs->pciSetBitsLong)(Tag,reg,mask,val);
}
static void
ix86PciSetBitsLongCFG1(PCITAG Tag, int reg, CARD32 mask, CARD32 val)
{
CARD32 addr, data = 0;
#ifdef DEBUGPCI
ErrorF("ix86PciSetBitsLong 0x%lx, %d\n", Tag, reg);
#endif
addr = PCI_ADDR_FROM_TAG_CFG1(Tag,reg);
outl(PCI_CFGMECH1_ADDRESS_REG, addr);
data = inl(PCI_CFGMECH1_DATA_REG);
data = (data & ~mask) | (val & mask);
outl(PCI_CFGMECH1_DATA_REG, data);
outl(PCI_CFGMECH1_ADDRESS_REG, 0);
}
static void
ix86PciSetBitsLongCFG2(PCITAG Tag, int reg, CARD32 mask, CARD32 val)
{
CARD32 addr, data = 0;
CARD8 enable, forward;
#ifdef DEBUGPCI
ErrorF("ix86PciSetBitsLong 0x%lx, %d\n", Tag, reg);
#endif
forward = PCI_FORWARD_FROM_TAG(Tag);
enable = PCI_ENABLE_FROM_TAG(Tag);
addr = PCI_ADDR_FROM_TAG_CFG2(Tag,reg);
outb(PCI_CFGMECH2_ENABLE_REG, enable);
outb(PCI_CFGMECH2_FORWARD_REG, forward);
data = inl((CARD16)addr);
data = (data & ~mask) | (val & mask);
outl((CARD16)addr, data);
outb(PCI_CFGMECH2_ENABLE_REG, 0);
outb(PCI_CFGMECH2_FORWARD_REG, 0);
}
#endif
void
ix86PciInit()
{
/* Initialize pciBusInfo[] array and function pointers */
/* Initialize pciBusInfo */
pciNumBuses = 1;
pciBusInfo[0] = &ix86Pci0;
pciBusInfo = &ix86Pci0;
/* Make sure that there is a PCI bus present. */
ix86PciSelectCfgmech();
if (ix86Pci0.configMech == PCI_CFG_MECH_UNKNOWN) {
pciNumBuses = 0;
pciBusInfo[0] = NULL;
pciBusInfo = NULL;
}
}

View file

@ -103,20 +103,19 @@ static pointer DomainMmappedIO[MAX_DOMAINS];
void
linuxPciInit(void)
{
struct stat st;
struct stat st;
#ifndef INCLUDE_XF86_NO_DOMAIN
(void) memset(DomainMmappedIO, 0, sizeof(DomainMmappedIO));
#endif
if ((xf86Info.pciFlags == PCIForceNone) ||
(-1 == stat("/proc/bus/pci", &st))) {
/* when using this as default for all linux architectures,
we'll need a fallback for 2.0 kernels here */
return;
}
pciNumBuses = 1;
pciBusInfo[0] = &linuxPci0;
if (-1 == stat("/proc/bus/pci", &st)) {
/* when using this as default for all linux architectures,
we'll need a fallback for 2.0 kernels here */
return;
}
pciNumBuses = 1;
pciBusInfo = &linuxPci0;
}
/**

View file

@ -1,82 +0,0 @@
/*
* ppcPci.c - PowerPC PCI access functions
*
* PCI driver functions supporting Motorola PowerPC platforms
* including Powerstack(RiscPC/RiscPC+), PowerStackII, MTX, and
* MVME 160x/260x/360x/460x VME boards
*
* Gary Barton
* Concurrent Computer Corporation
* garyb@gate.net
*
*/
/*
* Copyright 1998 by Concurrent Computer Corporation
*
* Permission to use, copy, modify, distribute, and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and that
* both that copyright notice and this permission notice appear in
* supporting documentation, and that the name of Concurrent Computer
* Corporation not be used in advertising or publicity pertaining to
* distribution of the software without specific, written prior
* permission. Concurrent Computer Corporation makes no representations
* about the suitability of this software for any purpose. It is
* provided "as is" without express or implied warranty.
*
* CONCURRENT COMPUTER CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD
* TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS, IN NO EVENT SHALL CONCURRENT COMPUTER CORPORATION BE
* LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
* WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
* SOFTWARE.
*
* Copyright 1998 by Metro Link Incorporated
*
* Permission to use, copy, modify, distribute, and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and that
* both that copyright notice and this permission notice appear in
* supporting documentation, and that the name of Metro Link
* Incorporated not be used in advertising or publicity pertaining to
* distribution of the software without specific, written prior
* permission. Metro Link Incorporated makes no representations
* about the suitability of this software for any purpose. It is
* provided "as is" without express or implied warranty.
*
* METRO LINK INCORPORATED DISCLAIMS ALL WARRANTIES WITH REGARD
* TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS, IN NO EVENT SHALL METRO LINK INCORPORATED BE
* LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
* WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
* SOFTWARE.
*/
#ifdef HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif
#include <stdio.h>
#include "compiler.h"
#include "xf86.h"
#include "xf86Priv.h"
#include "xf86_OSlib.h"
#include "Pci.h"
#ifndef MAP_FAILED
#define MAP_FAILED (pointer)(-1)
#endif
void
ppcPciInit()
{
static void motoppcPciInit(void);
motoppcPciInit();
}

View file

@ -1,979 +0,0 @@
/*
* Copyright (C) 2001-2003 The XFree86 Project, Inc. All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* Except as contained in this notice, the name of the XFree86 Project shall
* not be used in advertising or otherwise to promote the sale, use or other
* dealings in this Software without prior written authorization from the
* XFree86 Project.
*/
#ifdef HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif
#include "xf86.h"
#include "xf86Priv.h"
#include "xf86_OSlib.h"
#include "Pci.h"
#include "xf86sbusBus.h"
#if defined(sun)
extern char *apertureDevName;
static int apertureFd = -1;
/*
* A version of xf86MapVidMem() that allows for 64-bit displacements (but not
* sizes). Areas thus mapped can be unmapped by xf86UnMapVidMem().
*/
static pointer
sparcMapAperture(int iScreen, int Flags,
unsigned long long Base, unsigned long Size)
{
pointer result;
static int lastFlags = 0;
/* Assume both Base & Size are multiples of the page size */
if ((apertureFd < 0) || (Flags != lastFlags)) {
if (apertureFd >= 0)
close(apertureFd);
lastFlags = Flags;
apertureFd = open(apertureDevName,
(Flags & VIDMEM_READONLY) ? O_RDONLY : O_RDWR);
if (apertureFd < 0)
FatalError("sparcMapAperture: open failure: %s\n",
strerror(errno));
}
result = mmap(NULL, Size,
(Flags & VIDMEM_READONLY) ?
PROT_READ : (PROT_READ | PROT_WRITE),
MAP_SHARED, apertureFd, (off_t)Base);
if (result == MAP_FAILED)
FatalError("sparcMapAperture: mmap failure: %s\n", strerror(errno));
return result;
}
/*
* Platform-specific bus privates.
*/
typedef struct _sparcDomainRec {
unsigned long long io_addr, io_size;
unsigned long long mem_addr, mem_size;
pointer pci, io;
int bus_min, bus_max;
unsigned char dfn_mask[256 / 8];
} sparcDomainRec, *sparcDomainPtr;
#define SetBitInMap(bit, map) \
do { \
int _bit = (bit); \
(map)[_bit >> 3] |= 1 << (_bit & 7); \
} while (0)
#define IsBitSetInMap(bit, map) \
((map)[(bit) >> 3] & (1 << ((bit) & 7)))
/*
* Domain 0 is reserved for the one that represents the system as a whole, i.e.
* the one without any resource relocations.
*/
#define MAX_DOMAINS (MAX_PCI_BUSES / 256)
static sparcDomainPtr xf86DomainInfo[MAX_DOMAINS];
static int pciNumDomains = 1;
/* Variables that are assigned this must be declared volatile */
#define PciReg(base, tag, off, type) \
*(volatile type *)(pointer)((char *)(base) + \
(PCI_TAG_NO_DOMAIN(tag) | (off)))
/* Generic SPARC PCI access functions */
static CARD32
sparcPciCfgRead32(PCITAG tag, int off)
{
pciBusInfo_t *pBusInfo;
sparcDomainPtr pDomain;
volatile CARD32 result = (CARD32)(-1); /* Must be volatile */
int bus;
if ((off >= 0) && (off <= 252) && !(off & 3) &&
((bus = PCI_BUS_FROM_TAG(tag)) < pciNumBuses) &&
(pBusInfo = pciBusInfo[bus]) && (pDomain = pBusInfo->pciBusPriv) &&
(bus >= pDomain->bus_min) && (bus < pDomain->bus_max) &&
((bus > pDomain->bus_min) ||
IsBitSetInMap(PCI_DFN_FROM_TAG(tag), pDomain->dfn_mask))) {
result = PciReg(pDomain->pci, tag, off, CARD32);
result = PCI_CPU(result);
}
return result;
}
static void
sparcPciCfgWrite32(PCITAG tag, int off, CARD32 val)
{
pciBusInfo_t *pBusInfo;
sparcDomainPtr pDomain;
int bus;
if ((off < 0) || (off > 252) || (off & 3) ||
((bus = PCI_BUS_FROM_TAG(tag)) >= pciNumBuses) ||
!(pBusInfo = pciBusInfo[bus]) || !(pDomain = pBusInfo->pciBusPriv) ||
(bus < pDomain->bus_min) || (bus >= pDomain->bus_max) ||
((bus == pDomain->bus_min) &&
!IsBitSetInMap(PCI_DFN_FROM_TAG(tag), pDomain->dfn_mask)))
return;
val = PCI_CPU(val);
PciReg(pDomain->pci, tag, off, CARD32) = val;
}
static void
sparcPciCfgSetBits32(PCITAG tag, int off, CARD32 mask, CARD32 bits)
{
CARD32 PciVal;
PciVal = sparcPciCfgRead32(tag, off);
PciVal &= ~mask;
PciVal |= bits;
sparcPciCfgWrite32(tag, off, PciVal);
}
static pciBusFuncs_t sparcPCIFunctions =
{
sparcPciCfgRead32,
sparcPciCfgWrite32,
sparcPciCfgSetBits32,
pciAddrNOOP,
pciAddrNOOP
};
/*
* Sabre-specific versions of the above because of its peculiar access size
* requirements.
*/
static CARD32
sabrePciCfgRead32(PCITAG tag, int off)
{
pciBusInfo_t *pBusInfo;
sparcDomainPtr pDomain;
volatile CARD32 result; /* Must be volatile */
int bus;
if (PCI_BDEV_FROM_TAG(tag))
return sparcPciCfgRead32(tag, off);
if (PCI_FUNC_FROM_TAG(tag) || (off < 0) || (off > 252) || (off & 3) ||
((bus = PCI_BUS_FROM_TAG(tag)) >= pciNumBuses) ||
!(pBusInfo = pciBusInfo[bus]) || !(pDomain = pBusInfo->pciBusPriv) ||
(bus != pDomain->bus_min))
return (CARD32)(-1);
if (off < 8) {
result = (PciReg(pDomain->pci, tag, off, CARD16) << 16) |
PciReg(pDomain->pci, tag, off + 2, CARD16);
return PCI_CPU(result);
}
result = (PciReg(pDomain->pci, tag, off + 3, CARD8) << 24) |
(PciReg(pDomain->pci, tag, off + 2, CARD8) << 16) |
(PciReg(pDomain->pci, tag, off + 1, CARD8) << 8) |
(PciReg(pDomain->pci, tag, off , CARD8) );
return result;
}
static void
sabrePciCfgWrite32(PCITAG tag, int off, CARD32 val)
{
pciBusInfo_t *pBusInfo;
sparcDomainPtr pDomain;
int bus;
if (PCI_BDEV_FROM_TAG(tag))
sparcPciCfgWrite32(tag, off, val);
else if (!PCI_FUNC_FROM_TAG(tag) &&
(off >= 0) && (off <= 252) && !(off & 3) &&
((bus = PCI_BUS_FROM_TAG(tag)) < pciNumBuses) &&
(pBusInfo = pciBusInfo[bus]) &&
(pDomain = pBusInfo->pciBusPriv) &&
(bus == pDomain->bus_min)) {
if (off < 8) {
val = PCI_CPU(val);
PciReg(pDomain->pci, tag, off , CARD16) = val >> 16;
PciReg(pDomain->pci, tag, off + 2, CARD16) = val;
} else {
PciReg(pDomain->pci, tag, off , CARD8) = val;
PciReg(pDomain->pci, tag, off + 1, CARD8) = val >> 8;
PciReg(pDomain->pci, tag, off + 2, CARD8) = val >> 16;
PciReg(pDomain->pci, tag, off + 3, CARD8) = val >> 24;
}
}
}
static void
sabrePciCfgSetBits32(PCITAG tag, int off, CARD32 mask, CARD32 bits)
{
CARD32 PciVal;
PciVal = sabrePciCfgRead32(tag, off);
PciVal &= ~mask;
PciVal |= bits;
sabrePciCfgWrite32(tag, off, PciVal);
}
static pciBusFuncs_t sabrePCIFunctions =
{
sabrePciCfgRead32,
sabrePciCfgWrite32,
sabrePciCfgSetBits32,
pciAddrNOOP,
pciAddrNOOP
};
static int pagemask;
/* Scan PROM for all PCI host bridges in the system */
void
sparcPciInit(void)
{
int node, node2;
if (!xf86LinearVidMem())
return;
apertureFd = open(apertureDevName, O_RDWR);
if (apertureFd < 0) {
xf86Msg(X_ERROR,
"sparcPciInit: open failure: %s\n", strerror(errno));
return;
}
sparcPromInit();
pagemask = getpagesize() - 1;
for (node = promGetChild(promRootNode);
node;
node = promGetSibling(node)) {
unsigned long long pci_addr;
sparcDomainRec domain;
sparcDomainPtr pDomain;
pciBusFuncs_p pFunctions;
char *prop_val;
int prop_len, bus;
prop_val = promGetProperty("name", &prop_len);
/* Some PROMs include the trailing null; some don't */
if (!prop_val || (prop_len < 3) || (prop_len > 4) ||
strcmp(prop_val, "pci"))
continue;
prop_val = promGetProperty("model", &prop_len);
if (!prop_val || (prop_len <= 0)) {
prop_val = promGetProperty("compatible", &prop_len);
if (!prop_val || (prop_len <= 0))
continue;
}
pFunctions = &sparcPCIFunctions;
(void)memset(&domain, 0, sizeof(domain));
if (!strncmp("SUNW,sabre", prop_val, prop_len) ||
!strncmp("pci108e,a000", prop_val, prop_len) ||
!strncmp("pci108e,a001", prop_val, prop_len)) {
/*
* There can only be one "Sabre" bridge in a system. It provides
* PCI configuration space, a 24-bit I/O space and a 32-bit memory
* space, all three of which are at fixed physical CPU addresses.
*/
static Bool sabre_seen = FALSE;
xf86Msg(X_INFO,
"Sabre or Hummingbird PCI host bridge found (\"%s\")\n",
prop_val);
/* There can only be one Sabre */
if (sabre_seen)
continue;
sabre_seen = TRUE;
/* Get "bus-range" property */
prop_val = promGetProperty("bus-range", &prop_len);
if (!prop_val || (prop_len != 8) ||
(((unsigned int *)prop_val)[0]) ||
(((unsigned int *)prop_val)[1] >= 256))
continue;
pci_addr = 0x01fe01000000ull;
domain.io_addr = 0x01fe02000000ull;
domain.io_size = 0x000001000000ull;
domain.mem_addr = 0x01ff00000000ull;
domain.mem_size = 0x000100000000ull;
domain.bus_min = 0; /* Always */
domain.bus_max = ((int *)prop_val)[1];
pFunctions = &sabrePCIFunctions;
} else
if (!strncmp("SUNW,psycho", prop_val, prop_len) ||
!strncmp("pci108e,8000", prop_val, prop_len)) {
/*
* A "Psycho" host bridge provides two PCI interfaces, each with
* its own 16-bit I/O and 31-bit memory spaces. Both share the
* same PCI configuration space. Here, they are assigned separate
* domain numbers to prevent unintentional I/O and/or memory
* resource conflicts.
*/
xf86Msg(X_INFO,
"Psycho PCI host bridge found (\"%s\")\n", prop_val);
/* Get "bus-range" property */
prop_val = promGetProperty("bus-range", &prop_len);
if (!prop_val || (prop_len != 8) ||
(((unsigned int *)prop_val)[1] >= 256) ||
(((unsigned int *)prop_val)[0] > ((unsigned int *)prop_val)[1]))
continue;
domain.bus_min = ((int *)prop_val)[0];
domain.bus_max = ((int *)prop_val)[1];
/* Get "ranges" property */
prop_val = promGetProperty("ranges", &prop_len);
if (!prop_val || (prop_len != 112) ||
prop_val[0] || (prop_val[28] != 0x01u) ||
(prop_val[56] != 0x02u) || (prop_val[84] != 0x03u) ||
(((unsigned int *)prop_val)[4] != 0x01000000u) ||
((unsigned int *)prop_val)[5] ||
((unsigned int *)prop_val)[12] ||
(((unsigned int *)prop_val)[13] != 0x00010000u) ||
((unsigned int *)prop_val)[19] ||
(((unsigned int *)prop_val)[20] != 0x80000000u) ||
((((unsigned int *)prop_val)[11] & ~0x00010000u) !=
0x02000000u) ||
(((unsigned int *)prop_val)[18] & ~0x80000000u) ||
(((unsigned int *)prop_val)[3] !=
((unsigned int *)prop_val)[10]) ||
(((unsigned int *)prop_val)[17] !=
((unsigned int *)prop_val)[24]) ||
(((unsigned int *)prop_val)[18] !=
((unsigned int *)prop_val)[25]) ||
(((unsigned int *)prop_val)[19] !=
((unsigned int *)prop_val)[26]) ||
(((unsigned int *)prop_val)[20] !=
((unsigned int *)prop_val)[27]))
continue;
/* Use memcpy() to avoid alignment issues */
(void)memcpy(&pci_addr, prop_val + 12,
sizeof(pci_addr));
(void)memcpy(&domain.io_addr, prop_val + 40,
sizeof(domain.io_addr));
(void)memcpy(&domain.mem_addr, prop_val + 68,
sizeof(domain.mem_addr));
domain.io_size = 0x000000010000ull;
domain.mem_size = 0x000080000000ull;
} else
if (!strncmp("SUNW,schizo", prop_val, prop_len) ||
!strncmp("pci108e,8001", prop_val, prop_len)) {
/*
* I have no docs on the "Schizo", but judging from the Linux
* kernel, it also provides two PCI domains. Each PCI
* configuration space is the usual 16M in size, followed by a
* variable-length I/O space. Each domain also provides a
* variable-length memory space. The kernel seems to think the I/O
* spaces are 16M long, and the memory spaces, 2G, but these
* assumptions are actually only present in source code comments.
* Sun has, however, confirmed to me the validity of these
* assumptions.
*/
volatile unsigned long long mem_match, mem_mask, io_match, io_mask;
unsigned long Offset;
pointer pSchizo;
xf86Msg(X_INFO,
"Schizo PCI host bridge found (\"%s\")\n", prop_val);
/* Get "bus-range" property */
prop_val = promGetProperty("bus-range", &prop_len);
if (!prop_val || (prop_len != 8) ||
(((unsigned int *)prop_val)[1] >= 256) ||
(((unsigned int *)prop_val)[0] > ((unsigned int *)prop_val)[1]))
continue;
domain.bus_min = ((int *)prop_val)[0];
domain.bus_max = ((int *)prop_val)[1];
/* Get "reg" property */
prop_val = promGetProperty("reg", &prop_len);
if (!prop_val || (prop_len != 48))
continue;
/* Temporarily map some of Schizo's registers */
pSchizo = sparcMapAperture(-1, VIDMEM_MMIO,
((unsigned long long *)prop_val)[2] - 0x000000010000ull,
0x00010000ul);
/* Determine where PCI config, I/O and memory spaces reside */
if ((((unsigned long long *)prop_val)[0] & 0x000000700000ull) ==
0x000000600000ull)
Offset = 0x0040;
else
Offset = 0x0060;
mem_match = PciReg(pSchizo, 0, Offset, unsigned long long);
mem_mask = PciReg(pSchizo, 0, Offset + 8, unsigned long long);
io_match = PciReg(pSchizo, 0, Offset + 16, unsigned long long);
io_mask = PciReg(pSchizo, 0, Offset + 24, unsigned long long);
/* Unmap Schizo registers */
xf86UnMapVidMem(-1, pSchizo, 0x00010000ul);
/* Calculate sizes */
mem_mask = (((mem_mask - 1) ^ mem_mask) >> 1) + 1;
io_mask = (((io_mask - 1) ^ io_mask ) >> 1) + 1;
if (io_mask <= 0x000001000000ull) /* Nothing left for I/O */
continue;
domain.mem_addr = mem_match & ~0x8000000000000000ull;
domain.mem_size = mem_mask;
pci_addr = io_match & ~0x8000000000000000ull;
domain.io_addr = pci_addr + 0x0000000001000000ull;
domain.io_size = io_mask - 0x0000000001000000ull;
} else {
xf86Msg(X_WARNING, "Unknown PCI host bridge: \"%s\"\n", prop_val);
continue;
}
/* Only map as much PCI configuration as we need */
domain.pci = (char *)sparcMapAperture(-1, VIDMEM_MMIO,
pci_addr + PCI_MAKE_TAG(domain.bus_min, 0, 0),
PCI_MAKE_TAG(domain.bus_max - domain.bus_min + 1, 0, 0)) -
PCI_MAKE_TAG(domain.bus_min, 0, 0);
/* Allocate a domain record */
pDomain = xnfalloc(sizeof(sparcDomainRec));
*pDomain = domain;
/*
* Allocate and prime pciBusInfo records. These are allocated one at a
* time because those for empty buses are eventually released.
*/
bus = pDomain->bus_min =
PCI_MAKE_BUS(pciNumDomains, domain.bus_min);
pciNumBuses = pDomain->bus_max =
PCI_MAKE_BUS(pciNumDomains, domain.bus_max) + 1;
pciBusInfo[bus] = xnfcalloc(1, sizeof(pciBusInfo_t));
pciBusInfo[bus]->configMech = PCI_CFG_MECH_OTHER;
pciBusInfo[bus]->numDevices = 32;
pciBusInfo[bus]->funcs = pFunctions;
pciBusInfo[bus]->pciBusPriv = pDomain;
while (++bus < pciNumBuses) {
pciBusInfo[bus] = xnfalloc(sizeof(pciBusInfo_t));
*(pciBusInfo[bus]) = *(pciBusInfo[bus - 1]);
pciBusInfo[bus]->funcs = &sparcPCIFunctions;
}
/* Next domain, please... */
xf86DomainInfo[pciNumDomains++] = pDomain;
/*
* OK, enough of the straight-forward stuff. Time to deal with some
* brokenness...
*
* The PCI specs require that when a bus transaction remains unclaimed
* for too long, the master entity on that bus is to cancel the
* transaction it issued or passed on with a master abort. Two
* outcomes are possible:
*
* - the master abort can be treated as an error that is propogated
* back through the bus tree to the entity that ultimately originated
* the transaction; or
* - the transaction can be allowed to complete normally, which means
* that writes are ignored and reads return all ones.
*
* In the first case, if the CPU happens to be at the tail end of the
* tree path through one of its host bridges, it will be told there is
* a hardware mal-function, despite being generated by software.
*
* For a software function (be it firmware, OS or userland application)
* to determine how a PCI bus tree is populated, it must be able to
* detect when master aborts occur. Obviously, PCI discovery is much
* simpler when master aborts are allowed to complete normally.
*
* Unfortunately, a number of non-Intel PCI implementations have chosen
* to treat master aborts as severe errors. The net effect is to
* cripple PCI discovery algorithms in userland.
*
* On SPARCs, master aborts cause a number of different behaviours,
* including delivering a signal to the userland application, rebooting
* the system, "dropping down" to firmware, or, worst of all, bus
* lockouts. Even in the first case, the SIGBUS signal that is
* eventually generated isn't delivered in a timely enough fashion to
* allow an application to reliably detect the master abort that
* ultimately caused it.
*
* This can be somewhat mitigated. On all architectures, master aborts
* that occur on secondary buses can be forced to complete normally
* because the PCI-to-PCI bridges that serve them are governed by an
* industry-wide specification. (This is just another way of saying
* that whatever justification there might be for erroring out master
* aborts is deemed by the industry as insufficient to generate more
* PCI non-compliance than there already is...)
*
* This leaves us with master aborts that occur on primary buses.
* There is no specification for host-to-PCI bridges. Bridges used in
* SPARCs can be told to ignore all PCI errors, but not specifically
* master aborts. Not only is this too coarse-grained, but
* master-aborted read transactions on the primary bus end up returning
* garbage rather than all ones.
*
* I have elected to work around this the only way I can think of doing
* so right now. The following scans an additional PROM level and
* builds a device/function map for the primary bus. I can only hope
* this PROM information represents all devices on the primary bus,
* rather than only a subset of them.
*
* Master aborts are useful in other ways too, that are not addressed
* here. These include determining whether or not a domain provides
* VGA, or if a PCI device actually implements PCI disablement.
*
* --- TSI @ UQV 2001.09.19
*/
for (node2 = promGetChild(node);
node2;
node2 = promGetSibling(node2)) {
/* Get "reg" property */
prop_val = promGetProperty("reg", &prop_len);
if (!prop_val || (prop_len % 20))
continue;
/*
* It's unnecessary to scan the entire "reg" property, but I'll do
* so anyway.
*/
prop_len /= 20;
for (; prop_len--; prop_val += 20)
SetBitInMap(PCI_DFN_FROM_TAG(*(PCITAG *)prop_val),
pDomain->dfn_mask);
}
/* Assume the host bridge is device 0, function 0 on its bus */
SetBitInMap(0, pDomain->dfn_mask);
}
sparcPromClose();
close(apertureFd);
apertureFd = -1;
}
#ifndef INCLUDE_XF86_NO_DOMAIN
_X_EXPORT int
xf86GetPciDomain(PCITAG Tag)
{
return PCI_DOM_FROM_TAG(Tag);
}
_X_EXPORT pointer
xf86MapDomainMemory(int ScreenNum, int Flags, PCITAG Tag,
ADDRESS Base, unsigned long Size)
{
sparcDomainPtr pDomain;
pointer result;
int domain = PCI_DOM_FROM_TAG(Tag);
if ((domain <= 0) || (domain >= pciNumDomains) ||
!(pDomain = xf86DomainInfo[domain]) ||
(((unsigned long long)Base + (unsigned long long)Size) >
pDomain->mem_size))
FatalError("xf86MapDomainMemory() called with invalid parameters.\n");
result = sparcMapAperture(ScreenNum, Flags, pDomain->mem_addr + Base, Size);
if (apertureFd >= 0) {
close(apertureFd);
apertureFd = -1;
}
return result;
}
_X_EXPORT IOADDRESS
xf86MapLegacyIO(int ScreenNum, int Flags, PCITAG Tag,
IOADDRESS Base, unsigned long Size)
{
sparcDomainPtr pDomain;
int domain = PCI_DOM_FROM_TAG(Tag);
if ((domain <= 0) || (domain >= pciNumDomains) ||
!(pDomain = xf86DomainInfo[domain]) ||
(((unsigned long long)Base + (unsigned long long)Size) >
pDomain->io_size))
FatalError("xf86MapLegacyIO() called with invalid parameters.\n");
/* Permanently map all of I/O space */
if (!pDomain->io) {
pDomain->io = sparcMapAperture(ScreenNum, Flags,
pDomain->io_addr, pDomain->io_size);
if (apertureFd >= 0) {
close(apertureFd);
apertureFd = -1;
}
}
return (IOADDRESS)pDomain->io + Base;
}
resPtr
xf86AccResFromOS(resPtr pRes)
{
sparcDomainPtr pDomain;
resRange range;
int domain;
for (domain = 1; domain < pciNumDomains; domain++) {
if (!(pDomain = xf86DomainInfo[domain]))
continue;
/*
* At minimum, the top and bottom resources must be claimed, so that
* resources that are (or appear to be) unallocated can be relocated.
*/
RANGE(range, 0x00000000u, 0x0009ffffu,
RANGE_TYPE(ResExcMemBlock, domain));
pRes = xf86AddResToList(pRes, &range, -1);
RANGE(range, 0x000c0000u, 0x000effffu,
RANGE_TYPE(ResExcMemBlock, domain));
pRes = xf86AddResToList(pRes, &range, -1);
RANGE(range, 0x000f0000u, 0x000fffffu,
RANGE_TYPE(ResExcMemBlock, domain));
pRes = xf86AddResToList(pRes, &range, -1);
RANGE(range, pDomain->mem_size - 1, pDomain->mem_size - 1,
RANGE_TYPE(ResExcMemBlock, domain));
pRes = xf86AddResToList(pRes, &range, -1);
RANGE(range, 0x00000000u, 0x00000000u,
RANGE_TYPE(ResExcIoBlock, domain));
pRes = xf86AddResToList(pRes, &range, -1);
RANGE(range, pDomain->io_size - 1, pDomain->io_size - 1,
RANGE_TYPE(ResExcIoBlock, domain));
pRes = xf86AddResToList(pRes, &range, -1);
}
return pRes;
}
#endif /* !INCLUDE_XF86_NO_DOMAIN */
#endif /* defined(sun) */
#if defined(ARCH_PCI_PCI_BRIDGE)
/* Definitions specific to Sun's APB P2P bridge (a.k.a. Simba) */
#define APB_IO_ADDRESS_MAP 0xDE
#define APB_MEM_ADDRESS_MAP 0xDF
/*
* Simba's can only occur on bus 0. Furthermore, Simba's must have a non-zero
* device/function number because the Sabre interface they must connect to
* occupies the 0:0:0 slot. Also, there can be only one Sabre interface in the
* system, and therefore, only one Simba function can route any particular
* resource. Thus, it is appropriate to use a single set of static variables
* to hold the tag of the Simba function routing a VGA resource range at any
* one time, and to test these variables for non-zero to determine whether or
* not the Sabre would master-abort a VGA access (and kill the system).
*
* The trick is to determine when it is safe to re-route VGA, because doing so
* re-routes much more.
*/
static PCITAG simbavgaIOTag = 0, simbavgaMemTag = 0;
static Bool simbavgaRoutingAllow = TRUE;
/*
* Scan the bus subtree rooted at 'bus' for a non-display device that might be
* decoding the bottom 2 MB of I/O space and/or the bottom 512 MB of memory
* space. Reset simbavgaRoutingAllow if such a device is found.
*
* XXX For now, this is very conservative and should be made less so as the
* need arises.
*/
static void
simbaCheckBus(CARD16 pcicommand, int bus)
{
pciConfigPtr pPCI, *ppPCI = xf86scanpci(0);
while ((pPCI = *ppPCI++)) {
if (pPCI->busnum < bus)
continue;
if (pPCI->busnum > bus)
break;
/* XXX Assume all devices respect PCI disablement */
if (!(pcicommand & pPCI->pci_command))
continue;
/* XXX This doesn't deal with mis-advertised classes */
switch (pPCI->pci_base_class) {
case PCI_CLASS_PREHISTORIC:
if (pPCI->pci_sub_class == PCI_SUBCLASS_PREHISTORIC_VGA)
continue; /* Ignore VGA */
break;
case PCI_CLASS_DISPLAY:
continue;
case PCI_CLASS_BRIDGE:
switch (pPCI->pci_sub_class) {
case PCI_SUBCLASS_BRIDGE_PCI:
case PCI_SUBCLASS_BRIDGE_CARDBUS:
/* Scan secondary bus */
/* XXX First check bridge routing? */
simbaCheckBus(pcicommand & pPCI->pci_command,
PCI_SECONDARY_BUS_EXTRACT(pPCI->pci_pp_bus_register,
pPCI->tag));
if (!simbavgaRoutingAllow)
return;
default:
break;
}
default:
break;
}
/*
* XXX We could check the device's bases here, but PCI doesn't limit
* the device's decoding to them.
*/
simbavgaRoutingAllow = FALSE;
break;
}
}
static pciConfigPtr
simbaVerifyBus(int bus)
{
pciConfigPtr pPCI;
if ((bus < 0) || (bus >= pciNumBuses) ||
!pciBusInfo[bus] || !(pPCI = pciBusInfo[bus]->bridge) ||
(pPCI->pci_device_vendor != DEVID(VENDOR_SUN, CHIP_SIMBA)))
return NULL;
return pPCI;
}
static CARD16
simbaControlBridge(int bus, CARD16 mask, CARD16 value)
{
pciConfigPtr pPCI;
CARD16 current = 0, tmp;
CARD8 iomap, memmap;
if ((pPCI = simbaVerifyBus(bus))) {
/*
* The Simba does not implement VGA enablement as described in the P2P
* spec. It does however route I/O and memory in large enough chunks
* so that we can determine were VGA resources would be routed
* (including ISA VGA I/O aliases). We can allow changes to that
* routing only under certain circumstances.
*/
iomap = pciReadByte(pPCI->tag, APB_IO_ADDRESS_MAP);
memmap = pciReadByte(pPCI->tag, APB_MEM_ADDRESS_MAP);
if (iomap & memmap & 0x01) {
current |= PCI_PCI_BRIDGE_VGA_EN;
if ((mask & PCI_PCI_BRIDGE_VGA_EN) &&
!(value & PCI_PCI_BRIDGE_VGA_EN)) {
if (!simbavgaRoutingAllow) {
xf86MsgVerb(X_WARNING, 3, "Attempt to disable VGA routing"
" through Simba at %x:%x:%x disallowed.\n",
pPCI->busnum, pPCI->devnum, pPCI->funcnum);
value |= PCI_PCI_BRIDGE_VGA_EN;
} else {
pciWriteByte(pPCI->tag, APB_IO_ADDRESS_MAP,
iomap & ~0x01);
pciWriteByte(pPCI->tag, APB_MEM_ADDRESS_MAP,
memmap & ~0x01);
simbavgaIOTag = simbavgaMemTag = 0;
}
}
} else {
if (mask & value & PCI_PCI_BRIDGE_VGA_EN) {
if (!simbavgaRoutingAllow) {
xf86MsgVerb(X_WARNING, 3, "Attempt to enable VGA routing"
" through Simba at %x:%x:%x disallowed.\n",
pPCI->busnum, pPCI->devnum, pPCI->funcnum);
value &= ~PCI_PCI_BRIDGE_VGA_EN;
} else {
if (pPCI->tag != simbavgaIOTag) {
if (simbavgaIOTag) {
tmp = pciReadByte(simbavgaIOTag,
APB_IO_ADDRESS_MAP);
pciWriteByte(simbavgaIOTag, APB_IO_ADDRESS_MAP,
tmp & ~0x01);
}
pciWriteByte(pPCI->tag, APB_IO_ADDRESS_MAP,
iomap | 0x01);
simbavgaIOTag = pPCI->tag;
}
if (pPCI->tag != simbavgaMemTag) {
if (simbavgaMemTag) {
tmp = pciReadByte(simbavgaMemTag,
APB_MEM_ADDRESS_MAP);
pciWriteByte(simbavgaMemTag, APB_MEM_ADDRESS_MAP,
tmp & ~0x01);
}
pciWriteByte(pPCI->tag, APB_MEM_ADDRESS_MAP,
memmap | 0x01);
simbavgaMemTag = pPCI->tag;
}
}
}
}
/* Move on to master abort failure enablement (as per P2P spec) */
tmp = pciReadWord(pPCI->tag, PCI_PCI_BRIDGE_CONTROL_REG);
current |= tmp;
if (tmp & PCI_PCI_BRIDGE_MASTER_ABORT_EN) {
if ((mask & PCI_PCI_BRIDGE_MASTER_ABORT_EN) &&
!(value & PCI_PCI_BRIDGE_MASTER_ABORT_EN))
pciWriteWord(pPCI->tag, PCI_PCI_BRIDGE_CONTROL_REG,
tmp & ~PCI_PCI_BRIDGE_MASTER_ABORT_EN);
} else {
if (mask & value & PCI_PCI_BRIDGE_MASTER_ABORT_EN)
pciWriteWord(pPCI->tag, PCI_PCI_BRIDGE_CONTROL_REG,
tmp | PCI_PCI_BRIDGE_MASTER_ABORT_EN);
}
/* Insert emulation of other P2P controls here */
}
return (current & ~mask) | (value & mask);
}
static void
simbaGetBridgeResources(int bus,
pointer *ppIoRes,
pointer *ppMemRes,
pointer *ppPmemRes)
{
pciConfigPtr pPCI = simbaVerifyBus(bus);
resRange range;
int i;
if (!pPCI)
return;
if (ppIoRes) {
xf86FreeResList(*ppIoRes);
*ppIoRes = NULL;
if (pPCI->pci_command & PCI_CMD_IO_ENABLE) {
unsigned char iomap = pciReadByte(pPCI->tag, APB_IO_ADDRESS_MAP);
if (simbavgaRoutingAllow)
iomap |= 0x01;
for (i = 0; i < 8; i++) {
if (iomap & (1 << i)) {
RANGE(range, i << 21, ((i + 1) << 21) - 1,
RANGE_TYPE(ResExcIoBlock,
xf86GetPciDomain(pPCI->tag)));
*ppIoRes = xf86AddResToList(*ppIoRes, &range, -1);
}
}
}
}
if (ppMemRes) {
xf86FreeResList(*ppMemRes);
*ppMemRes = NULL;
if (pPCI->pci_command & PCI_CMD_MEM_ENABLE) {
unsigned char memmap = pciReadByte(pPCI->tag, APB_MEM_ADDRESS_MAP);
if (simbavgaRoutingAllow)
memmap |= 0x01;
for (i = 0; i < 8; i++) {
if (memmap & (1 << i)) {
RANGE(range, i << 29, ((i + 1) << 29) - 1,
RANGE_TYPE(ResExcMemBlock,
xf86GetPciDomain(pPCI->tag)));
*ppMemRes = xf86AddResToList(*ppMemRes, &range, -1);
}
}
}
}
if (ppPmemRes) {
xf86FreeResList(*ppPmemRes);
*ppPmemRes = NULL;
}
}
void ARCH_PCI_PCI_BRIDGE(pciConfigPtr pPCI)
{
static pciBusFuncs_t simbaBusFuncs;
pciBusInfo_t *pBusInfo;
CARD16 pcicommand;
if (pPCI->pci_device_vendor != DEVID(VENDOR_SUN, CHIP_SIMBA))
return;
pBusInfo = pPCI->businfo;
simbaBusFuncs = *(pBusInfo->funcs);
simbaBusFuncs.pciControlBridge = simbaControlBridge;
simbaBusFuncs.pciGetBridgeResources = simbaGetBridgeResources;
pBusInfo->funcs = &simbaBusFuncs;
if (!simbavgaRoutingAllow)
return;
pcicommand = 0;
if (pciReadByte(pPCI->tag, APB_IO_ADDRESS_MAP) & 0x01) {
pcicommand |= PCI_CMD_IO_ENABLE;
simbavgaIOTag = pPCI->tag;
}
if (pciReadByte(pPCI->tag, APB_MEM_ADDRESS_MAP) & 0x01) {
pcicommand |= PCI_CMD_MEM_ENABLE;
simbavgaMemTag = pPCI->tag;
}
if (!pcicommand)
return;
simbaCheckBus(pcicommand,
PCI_SECONDARY_BUS_EXTRACT(pPCI->pci_pp_bus_register, pPCI->tag));
}
#endif /* defined(ARCH_PCI_PCI_BRIDGE) */

View file

@ -44,8 +44,7 @@ INCLUDES = $(XORG_INCS) $(PLATFORM_INCLUDES) $(LIBDRM_CFLAGS)
# FIXME: These need to be added to the build
LNX_EXTRA_SRCS = \
lnx_font.c \
lnxResource.c
lnx_font.c
EXTRA_DIST = \
$(LNX_EXTRA_SRCS) \

View file

@ -1,105 +0,0 @@
/* Resource information code */
#ifdef HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif
#include <X11/X.h>
#include "xf86.h"
#include "xf86Priv.h"
#include "xf86Privstr.h"
#include "xf86Pci.h"
#include "xf86Resources.h"
#define NEED_OS_RAC_PROTOS
#include "xf86_OSlib.h"
#include "lnx.h"
/* Avoid Imakefile changes */
#include "bus/Pci.h"
#ifdef INCLUDE_XF86_NO_DOMAIN
#ifdef __alpha__
resPtr
xf86AccResFromOS(resPtr ret)
{
resRange range;
/*
* Fallback is to claim the following areas:
*
* 0x000c0000 - 0x000effff location of VGA and other extensions ROMS
*/
RANGE(range, 0x000c0000, 0x000effff, ResExcMemBlock);
ret = xf86AddResToList(ret, &range, -1);
/*
* Fallback would be to claim well known ports in the 0x0 - 0x3ff range
* along with their sparse I/O aliases, but that's too imprecise. Instead
* claim a bare minimum here.
*/
RANGE(range, 0x00000000, 0x000000ff, ResExcIoBlock); /* For mainboard */
ret = xf86AddResToList(ret, &range, -1);
/*
* At minimum, the top and bottom resources must be claimed, so that
* resources that are (or appear to be) unallocated can be relocated.
*/
RANGE(range, 0x00000000, 0x00000000, ResExcMemBlock);
ret = xf86AddResToList(ret, &range, -1);
RANGE(range, 0xffffffff, 0xffffffff, ResExcMemBlock);
ret = xf86AddResToList(ret, &range, -1);
/* RANGE(range, 0x00000000, 0x00000000, ResExcIoBlock);
ret = xf86AddResToList(ret, &range, -1); */
RANGE(range, 0xffffffff, 0xffffffff, ResExcIoBlock);
ret = xf86AddResToList(ret, &range, -1);
/* XXX add others */
return ret;
}
#elif defined(__powerpc__) || \
defined(__sparc__) || \
defined(__mips__) || \
defined(__sh__) || \
defined(__m32r__) || \
defined(__mc68000__) || \
defined(__arm__) || \
defined(__s390__) || \
defined(__hppa__)
resPtr
xf86AccResFromOS(resPtr ret)
{
resRange range;
/*
* At minimum, the top and bottom resources must be claimed, so that
* resources that are (or appear to be) unallocated can be relocated.
*/
RANGE(range, 0x00000000, 0x00000000, ResExcMemBlock);
ret = xf86AddResToList(ret, &range, -1);
RANGE(range, 0xffffffff, 0xffffffff, ResExcMemBlock);
ret = xf86AddResToList(ret, &range, -1);
RANGE(range, 0x00000000, 0x00000000, ResExcIoBlock);
ret = xf86AddResToList(ret, &range, -1);
#if defined(__sparc__) || defined(__powerpc__)
RANGE(range, 0x00ffffff, 0x00ffffff, ResExcIoBlock);
#else
RANGE(range, 0x0000ffff, 0x0000ffff, ResExcIoBlock);
#endif
ret = xf86AddResToList(ret, &range, -1);
return ret;
}
#else
#error : Put your platform dependent code here!!
#endif
#endif /* INCLUDE_XF86_NO_DOMAIN */

View file

@ -1,153 +0,0 @@
/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/misc/BUSmemcpy.s,v 1.2 1998/07/25 16:56:49 dawes Exp $ */
/******************************************************************************
Copyright 1993 by Glenn G. Lai
All Rights Reserved
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in
supporting documentation, and that the name of Glenn G. Lai not be
used in advertising or publicity pertaining to distribution of the
software without specific, written prior permission.
Glenn G. Lai DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.
Glenn G. Lai
P.O. Box 4314
Austin, Tx 78765
(glenn@cs.utexas.edu)
8/9/93
******************************************************************************/
/* $XConsortium: BUSmemcpy.s /main/4 1996/02/21 17:39:34 kaleb $ */
/*
* Modified to use long-alignment of video memory rather than word-alignment
* to improve performance for LocalBus video cards. Function names changed
* from ISAToMem and MemToISA to BusToMem and MemToBus.
*
* David Dawes <dawes@XFree86.org>, 25 August 1993.
*/
#include "assyntax.h"
FILE("BUSmemcpy.s")
AS_BEGIN
/* BusToMem copies from video memory to main memory
MemToBus copies from main memory to video memory
void xf86BusToMem(unsigned char *dst, unsigned char *src, int len);
void xf86MemToBus(unsigned char *dst, unsigned char *src, int len);
*/
#define dst REGOFF(4,ESP)
#define src REGOFF(8,ESP)
#define len REGOFF(12,ESP)
GLOBL GLNAME(xf86BusToMem)
GLOBL GLNAME(xf86MemToBus)
SEG_DATA
copyright:
STRING("Copyright 8/9/1993 by Glenn G. Lai")
SEG_TEXT
ALIGNTEXT4
GLNAME(xf86BusToMem):
CLD
PUSH_L (ESI)
MOV_L (EDI, EDX)
MOV_L (src, ESI)
MOV_L (dst, EDI)
MOV_L (len, ECX)
CMP_L (CONST(7), ECX)
JC (quickBM)
TEST_L (CONST(1), ESI)
JZ (BwM)
MOVS_B
DEC_L (ECX)
BwM:
TEST_L (CONST(2), ESI)
JZ (BlM)
MOVS_W
DEC_L (ECX)
DEC_L (ECX)
BlM:
MOV_L (ECX, EAX)
AND_L (CONST(3), EAX)
SHR_L (CONST(2), ECX)
REP
MOVS_L
MOV_L (EAX, ECX)
quickBM:
OR_L (ECX, ECX)
JZ (return)
REP
MOVS_B
return:
POP_L (ESI)
MOV_L (EDX, EDI)
RET
/************************/
ALIGNTEXT4
GLNAME(xf86MemToBus):
CLD
PUSH_L (ESI)
MOV_L (EDI, EDX)
MOV_L (src, ESI)
MOV_L (dst, EDI)
MOV_L (len, ECX)
CMP_L (CONST(7), ECX)
JC (quickMB)
TEST_L (CONST(1), EDI)
JZ (MwB)
MOVS_B
DEC_L (ECX)
MwB:
TEST_L (CONST(2), EDI)
JZ (MlB)
MOVS_W
DEC_L (ECX)
DEC_L (ECX)
MlB:
MOV_L (ECX, EAX)
AND_L (CONST(3), EAX)
SHR_L (CONST(2), ECX)
REP
MOVS_L
MOV_L (EAX, ECX)
quickMB:
OR_L (ECX, ECX)
JZ (return)
REP
MOVS_B
POP_L (ESI)
MOV_L (EDX, EDI)
RET

View file

@ -1,53 +0,0 @@
/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/misc/IODelay.S,v 1.1 1999/07/10 07:24:50 dawes Exp $ */
/*******************************************************************************
Copyright 1994 by Glenn G. Lai
All Rights Reserved
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyr notice appear in all copies and that
both that copyr notice and this permission notice appear in
supporting documentation, and that the name of Glenn G. Lai not be
used in advertising or publicity pertaining to distribution of the
software without specific, written prior permission.
Glenn G. Lai DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.
Glenn G. Lai
P.O. Box 4314
Austin, Tx 78765
glenn@cs.utexas.edu)
7/21/94
*******************************************************************************/
/* $XConsortium: IODelay.s /main/4 1996/02/21 17:40:21 kaleb $ */
/*
* All we really need is a delay of about 40ns for I/O recovery for just
* about any occasion, but we'll be more conservative here: On a
* 100-MHz CPU, produce at least a delay of 1,000ns.
*/
#include "assyntax.h"
FILE("DACDelay.s")
AS_BEGIN
GLOBL GLNAME(xf86IODelay)
SEG_TEXT
ALIGNTEXT4
GLNAME(xf86IODelay):
MOV_L (CONST(100), EAX)
delay_it:
DEC_L (EAX)
JNE (delay_it)
RET

View file

@ -1,18 +1,7 @@
# FIXME: Add the *.S files to build when applicable
I386_SRCS = BUSmemcpy.S IODelay.S SlowBcopy.S
OTHER_SRCS = BUSmemcpy.c IODelay.c SlowBcopy.c
ARCH_SRCS = $(OTHER_SRCS)
# FIXME: Add to the build (NeedPortIO)
PORTIO_SRCS = PortIO.S
# FIXME: Add to the build (if HasGcc || HasGcc2)
ILHACK_SRCS = xf86_IlHack.c
noinst_LTLIBRARIES = libmisc.la
libmisc_la_SOURCES = Delay.c $(ARCH_SRCS)
libmisc_la_SOURCES = Delay.c BUSmemcpy.c IODelay.c SlowBcopy.c
#AM_LDFLAGS = -r
@ -20,4 +9,4 @@ INCLUDES = $(XORG_INCS)
AM_CFLAGS = $(XORG_CFLAGS) $(DIX_CFLAGS)
EXTRA_DIST = $(I386_SRCS) $(PORTIO_SRCS) $(ILHACK_SRCS)
EXTRA_DIST = $(I386_SRCS) $(PORTIO_SRCS)

View file

@ -1,57 +0,0 @@
/* $XFree86$ */
/* Port I/O functions for platforms with no inlining. */
#include "assyntax.h"
FILE("PortIO.s")
AS_BEGIN
GLOBL GLNAME(outb)
GLOBL GLNAME(outw)
GLOBL GLNAME(outl)
GLOBL GLNAME(inb)
GLOBL GLNAME(inw)
GLOBL GLNAME(inl)
SEG_TEXT
ALIGNTEXT4
GLNAME(outb):
MOV_L (REGOFF(4,ESP), EDX)
MOV_L (REGOFF(8,ESP), EAX)
OUT_B
RET
ALIGNTEXT4
GLNAME(outw):
MOV_L (REGOFF(4,ESP), EDX)
MOV_L (REGOFF(8,ESP), EAX)
OUT_W
RET
ALIGNTEXT4
GLNAME(outl):
MOV_L (REGOFF(4,ESP), EDX)
MOV_L (REGOFF(8,ESP), EAX)
OUT_L
RET
ALIGNTEXT4
GLNAME(inb):
MOV_L (REGOFF(4,ESP), EDX)
IN_B
RET
ALIGNTEXT4
GLNAME(inw):
MOV_L (REGOFF(4,ESP), EDX)
IN_L
RET
ALIGNTEXT4
GLNAME(inl):
MOV_L (REGOFF(4,ESP), EDX)
IN_L
RET

View file

@ -1,108 +0,0 @@
/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/misc/SlowBcopy.S,v 1.1 1999/07/10 07:24:51 dawes Exp $ */
/*******************************************************************************
Copyright 1994 by Glenn G. Lai
All Rights Reserved
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyr notice appear in all copies and that
both that copyr notice and this permission notice appear in
supporting documentation, and that the name of Glenn G. Lai not be
used in advertising or publicity pertaining to distribution of the
software without specific, written prior permission.
Glenn G. Lai DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.
Glenn G. Lai
P.O. Box 4314
Austin, Tx 78765
glenn@cs.utexas.edu)
7/21/94
*******************************************************************************/
/* $XConsortium: SlowBcopy.s /main/4 1996/02/21 17:40:52 kaleb $ */
/*
* Modified from the output generated by GCC
*
* Create a dependency that should be immune from the effect of register
* renaming as is commonly seen in superscalar processors. This should
* insert a minimum of 100-ns delays between reads/writes at clock rates
* up to 100 MHz---GGL
*
* Slowbcopy(char *src, char *dst, int count)
*
*/
#include "assyntax.h"
FILE("SlowBcopy.s")
AS_BEGIN
gcc2_compiled.:
___gnu_compiled_c:
GLOBL GLNAME(xf86SlowBcopy)
SEG_TEXT
ALIGNTEXT4
GLNAME(xf86SlowBcopy):
PUSH_L (EBP)
MOV_L (ESP,EBP)
PUSH_L (ESI)
PUSH_L (EBX)
MOV_L (REGOFF(8,EBP),ECX)
MOV_L (REGOFF(12,EBP),EDX)
MOV_L (REGOFF(16,EBP),ESI)
XOR_L (EAX,EAX)
CMP_L (ESI,EAX)
JGE (L3)
ALIGNTEXT4
L5:
MOV_B (REGIND(ECX),BL)
MOV_B (BL, BH)
MOV_B (BH, BL)
MOV_B (BL, BH)
MOV_B (BH, BL)
MOV_B (BL, BH)
MOV_B (BH, BL)
MOV_B (BL, BH)
MOV_B (BH, BL)
MOV_B (BL, BH)
MOV_B (BH, BL)
MOV_B (BL,REGIND(EDX))
INC_L (ECX)
DEC_L (ECX)
INC_L (ECX)
DEC_L (ECX)
INC_L (ECX)
DEC_L (ECX)
INC_L (ECX)
DEC_L (ECX)
INC_L (ECX)
DEC_L (ECX)
INC_L (ECX)
INC_L (EDX)
INC_L (EAX)
CMP_L (ESI,EAX)
JL (L5)
L3:
LEA_L (REGOFF(-8,EBP),ESP)
POP_L (EBX)
POP_L (ESI)
MOV_L (EBP,ESP)
POP_L (EBP)
RET

View file

@ -1,16 +0,0 @@
/*
* This file is an incredible crock to get the normally-inline functions
* built into the server so that things can be debugged properly.
*
* Note: this doesn't work when using a compiler other than GCC.
*/
#define static /**/
#define __inline__ /**/
#undef NO_INLINE
#define DO_PROTOTYPES
#ifdef HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif
#include "compiler.h"

View file

@ -1,111 +0,0 @@
/* $XConsortium: inout.s /main/6 1996/02/21 17:53:35 kaleb $ */
/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/shared/inout.S,v 1.1 1999/07/10 07:24:52 dawes Exp $ */
#include "assyntax.h"
/*
* Make i80386 io primitives available at C-level.
*/
FILE("inout.s")
AS_BEGIN
SEG_TEXT
/*
*-----------------------------------------------------------------------
* inb ---
* Input one byte.
*
* Results:
* Byte in al.
*-----------------------------------------------------------------------
*/
GLOBL GLNAME(inb)
GLNAME(inb):
MOV_L (REGOFF(4,ESP),EDX)
SUB_L (EAX,EAX)
IN_B
RET
/*
*-----------------------------------------------------------------------
* outb ---
* Output one byte.
*
* Results:
* None.
*-----------------------------------------------------------------------
*/
GLOBL GLNAME(outb)
GLNAME(outb):
MOV_L (REGOFF(4,sp),EDX)
MOV_L (REGOFF(8,sp),EAX)
OUT_B
RET
/*
*-----------------------------------------------------------------------
* inw ---
* Input one 16-bit word.
*
* Results:
* Word in ax.
*-----------------------------------------------------------------------
*/
GLOBL GLNAME(inw)
GLNAME(inw):
MOV_L (REGOFF(4,ESP),EDX)
IN_W
RET
/*
*-----------------------------------------------------------------------
* outw ---
* Output one 16-bit word.
*
* Results:
* None.
*-----------------------------------------------------------------------
*/
GLOBL GLNAME(outw)
GLNAME(outw):
MOV_L (REGOFF(4,ESP),EDX)
MOV_L (REGOFF(8,ESP),EAX)
OUT_W
RET
/*
*-----------------------------------------------------------------------
* inl ---
* Input one 32-bit longword.
*
* Results:
* Word in eax.
*-----------------------------------------------------------------------
*/
GLOBL GLNAME(inl)
GLNAME(inl):
MOV_L (REGOFF(4,ESP),EDX)
IN_L
RET
/*
*-----------------------------------------------------------------------
* outl ---
* Output one 32-bit longword.
*
* Results:
* None.
*-----------------------------------------------------------------------
*/
GLOBL GLNAME(outl)
GLNAME(outl):
MOV_L (REGOFF(4,ESP),EDX)
MOV_L (REGOFF(8,ESP),EAX)
OUT_L
RET

View file

@ -67,7 +67,7 @@ DISTCLEANFILES = $(POLYSEG) \
sdk_HEADERS = xaa.h xaalocal.h xaarop.h xaaWrapper.h
EXTRA_DIST = xaacexp.h xaawrap.h xaaLine.c xaaDashLine.c \
xaaStipple.c xaaTEGlyph.c xaaNonTEGlyph.c xaaBitmap.c \
xaaTEGlyphBlt.S XAA.HOWTO
XAA.HOWTO
INCLUDES = $(XORG_INCS)

View file

@ -1,964 +0,0 @@
/*
* Copyright 1996 The XFree86 Project
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* HARM HANEMAAYER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Written by Harm Hanemaayer (H.Hanemaayer@inter.nl.net).
*/
/* $XFree86: xc/programs/Xserver/hw/xfree86/xaa/xaaTEGlyphBlt.S,v 1.1 1999/07/10 07:24:54 dawes Exp $ */
/*
* Intel Pentium-optimized versions of "terminal emulator font" text
* bitmap transfer routines.
*
* SCANLINE_PAD_DWORD.
*
* Only for glyphs with a fixed width of 6 pixels or 8 pixels.
*/
#include "assyntax.h"
#ifndef QNX4
FILE("xaaTEGlyphBlt.s")
#else
FILE( __FILE__ )
#endif
AS_BEGIN
/*
* Definition of stack frame function arguments.
* All functions have the same arguments (some don't have glyphwidth,
* but that's OK, since it comes last and doesn't affect the offset
* of the other arguments).
*/
#define base_arg REGOFF(20,ESP)
#define glyphp_arg REGOFF(24,ESP)
#define line_arg REGOFF(28,ESP)
#define width_arg REGOFF(32,ESP)
#define glyphwidth_arg REGOFF(36,ESP)
#define BYTE_REVERSED GLNAME(byte_reversed)
/* I assume %eax and %edx can be trashed. */
SEG_TEXT
ALIGNTEXT4
#ifdef FIXEDBASE
# ifdef MSBFIRST
GLOBL GLNAME(DrawTETextScanlineWidth6PMSBFirstFixedBase)
GLNAME(DrawTETextScanlineWidth6PMSBFirstFixedBase):
# else
GLOBL GLNAME(DrawTETextScanlineWidth6PLSBFirstFixedBase)
GLNAME(DrawTETextScanlineWidth6PLSBFirstFixedBase):
# endif
#else
# ifdef MSBFIRST
GLOBL GLNAME(DrawTETextScanlineWidth6PMSBFirst)
GLNAME(DrawTETextScanlineWidth6PMSBFirst):
# else
GLOBL GLNAME(DrawTETextScanlineWidth6PLSBFirst)
GLNAME(DrawTETextScanlineWidth6PLSBFirst):
# endif
#endif
/* Definition of stack frame function arguments. */
#define base_arg REGOFF(20,ESP)
#define glyphp_arg REGOFF(24,ESP)
#define line_arg REGOFF(28,ESP)
#define width_arg REGOFF(32,ESP)
SUB_L (CONST(16),ESP)
MOV_L (EBP,REGOFF(12,ESP)) /* PUSH EBP */
MOV_L (EBX,REGOFF(8,ESP)) /* PUSH EBX */
MOV_L (ESI,REGOFF(4,ESP)) /* PUSH ESI */
MOV_L (EDI,REGOFF(0,ESP)) /* PUSH EDI */
MOV_L (line_arg,EBP)
MOV_L (base_arg,EDI)
MOV_L (glyphp_arg,ESI)
ALIGNTEXT4
.L6_1:
/* Pentium-optimized instruction pairing. */
/* EBX = bits = glyph[0][line] */
MOV_L (REGOFF(4,ESI),EDX) /* glyphp[1] */
MOV_L (REGIND(ESI),EBX) /* glyphp[0] */
MOV_L (REGBISD(EDX,EBP,4,0),EDX) /* glyphp[1][line] */
MOV_L (REGBISD(EBX,EBP,4,0),EBX) /* glyphp[0][line] */
SAL_L (CONST(6),EDX) /* glyphp[1][line] << 6 */
MOV_L (REGOFF(8,ESI),ECX) /* glyphp[2] */
MOV_L (REGOFF(12,ESI),EAX) /* glyphp[3] */
MOV_L (REGBISD(ECX,EBP,4,0),ECX) /* glyphp[2][line] */
MOV_L (REGBISD(EAX,EBP,4,0),EAX) /* glyphp[3][line] */
SAL_L (CONST(12),ECX) /* glyphp[2][line] << 12 */
OR_L (EDX,EBX) /* bits |= ..[1].. << 6 */
SAL_L (CONST(18),EAX) /* glyphp[3][line] << 18 */
OR_L (ECX,EBX) /* bits |= ..[2].. << 12 */
MOV_L (REGOFF(16,ESI),EDX) /* glyphp[4] */
MOV_L (REGOFF(20,ESI),ECX) /* glyphp[5] */
MOV_L (REGBISD(EDX,EBP,4,0),EDX) /* glyphp[4][line] */
MOV_L (REGBISD(ECX,EBP,4,0),ECX) /* glyphp[5][line] */
SAL_L (CONST(24),EDX) /* glyphp[4][line] << 24 */
OR_L (EAX,EBX) /* bits |= ..[3].. << 18 */
SAL_L (CONST(30),ECX) /* glyphp[5][line] << 30 */
OR_L (EDX,EBX) /* bits |= ..[4].. << 24 */
#ifndef MSBFIRST
MOV_L (REGOFF(20,ESI),EAX) /* glyphp[5] */
OR_L (ECX,EBX) /* bits |= ..[5].. << 30 */
MOV_L (REGBISD(EAX,EBP,4,0),EAX) /* glyphp[5][line] */
MOV_L (EBX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (CONST(0),EAX)
OR_L (ECX,EBX) /* bits |= ..[5].. << 30 */
MOV_L (CONST(0),EDX)
MOV_B (BL,AL)
MOV_B (BH,DL)
MOV_B (REGOFF(BYTE_REVERSED,EAX),BL)
MOV_B (REGOFF(BYTE_REVERSED,EDX),BH)
ROL_L (CONST(16),EBX)
MOV_B (BL,AL)
MOV_B (BH,DL)
MOV_B (REGOFF(BYTE_REVERSED,EAX),BL)
MOV_B (REGOFF(BYTE_REVERSED,EDX),BH)
ROL_L (CONST(16),EBX)
MOV_L (REGOFF(20,ESI),EAX) /* glyphp[5] */
MOV_L (EBX,REGIND(EDI))
MOV_L (REGBISD(EAX,EBP,4,0),EAX) /* glyphp[5][line] */
#endif
CMP_L (CONST(32),width_arg)
JG (.L6_2)
#ifndef FIXEDBASE
ADD_L (CONST(4),EDI) /* base++ */
#endif
JMP (.L6_4)
.L6_2:
/* Note that glyphp[5][line] is already read again. */
/* EAX = bits = glyphp[5][line] >> 2 */
MOV_L (REGOFF(24,ESI),EDX) /* glyphp[6] */
MOV_L (REGOFF(28,ESI),EBX) /* glyphp[7] */
SHR_L (CONST(2),EAX) /* glyphp[5][line] >> 2 */
MOV_L (REGBISD(EDX,EBP,4,0),EDX) /* glyphp[6][line] */
MOV_L (REGBISD(EBX,EBP,4,0),EBX) /* glyphp[7][line] */
MOV_L (REGOFF(32,ESI),ECX) /* glyphp[8] */
SAL_L (CONST(4),EDX) /* glyphp[6][line] << 4 */
MOV_L (REGBISD(ECX,EBP,4,0),ECX) /* glyphp[8][line] */
SAL_L (CONST(10),EBX) /* glyphp[7][line] << 10 */
OR_L (EDX,EAX) /* bits |= ..[6].. << 4 */
SAL_L (CONST(16),ECX) /* glyphp[8][line] << 16 */
MOV_L (REGOFF(36,ESI),EDX) /* glyphp[9] */
OR_L (EBX,EAX) /* bits |= ..[7].. << 10 */
MOV_L (REGBISD(EDX,EBP,4,0),EDX) /* glyphp[9][line] */
OR_L (ECX,EAX) /* bits |= ..[8].. << 16 */
MOV_L (REGOFF(40,ESI),EBX) /* glyphp[10] */
SAL_L (CONST(22),EDX) /* glyphp[9][line] << 22 */
MOV_L (REGBISD(EBX,EBP,4,0),EBX) /* glyphp[10][line] */
OR_L (EDX,EAX) /* bits |= ..[9].. << 22 */
#ifndef MSBFIRST
MOV_L (REGOFF(40,ESI),ECX) /* glyphp[10] */
SAL_L (CONST(28),EBX) /* glyphp[10][line] << 28 */
MOV_L (REGOFF(44,ESI),EDX) /* glyphp[11] */
OR_L (EBX,EAX) /* bits |= ..[10].. << 28 */
MOV_L (REGBISD(ECX,EBP,4,0),ECX) /* glyphp[10][line] */
#ifndef FIXEDBASE
MOV_L (EAX,REGOFF(4,EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (EAX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#endif
MOV_L (REGBISD(EDX,EBP,4,0),EDX) /* glyphp[11][line] */
#else
MOV_L (CONST(0),ECX)
SAL_L (CONST(28),EBX) /* glyphp[10][line] << 28 */
MOV_L (CONST(0),EDX)
OR_L (EBX,EAX) /* bits |= ..[10].. << 28 */
MOV_B (AL,CL)
MOV_B (AH,DL)
MOV_B (REGOFF(BYTE_REVERSED,ECX),AL)
MOV_B (REGOFF(BYTE_REVERSED,EDX),AH)
ROL_L (CONST(16),EAX)
MOV_B (AL,CL)
MOV_B (AH,DL)
MOV_B (REGOFF(BYTE_REVERSED,ECX),AL)
MOV_B (REGOFF(BYTE_REVERSED,EDX),AH)
MOV_L (REGOFF(40,ESI),ECX) /* glyphp[10] */
ROL_L (CONST(16),EAX)
MOV_L (REGOFF(44,ESI),EDX) /* glyphp[11] */
#ifndef FIXEDBASE
MOV_L (EAX,REGOFF(4,EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (EAX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#endif
MOV_L (REGBISD(ECX,EBP,4,0),ECX) /* glyphp[10][line] */
MOV_L (REGBISD(EDX,EBP,4,0),EDX) /* glyphp[11][line] */
#endif
CMP_L (CONST(64),width_arg)
JG (.L6_3)
#ifndef FIXEDBASE
ADD_L (CONST(8),EDI) /* base+=2 */
#endif
JMP (.L6_4)
.L6_3:
/* Note that glyphp[10][line] is read again. */
/* EAX = bits = glyphp[10][line] >> 4 */
SHR_L (CONST(4),ECX) /* glyphp[10][line] >> 4 */
MOV_L (REGOFF(48,ESI),EBX) /* glyphp[12] */
SAL_L (CONST(2),EDX) /* glyphp[11][line] << 2 */
MOV_L (REGBISD(EBX,EBP,4,0),EBX) /* glyphp[12][line] */
OR_L (EDX,ECX) /* bits |= ..[11].. << 2 */
MOV_L (REGOFF(52,ESI),EAX) /* glyphp[13] */
SAL_L (CONST(8),EBX) /* glyphp[12][line] << 8 */
MOV_L (REGBISD(EAX,EBP,4,0),EAX) /* glyphp[13][line] */
OR_L (EBX,ECX) /* bits |= ..[12].. << 8 */
MOV_L (REGOFF(56,ESI),EDX) /* glyphp[14] */
SAL_L (CONST(14),EAX) /* glyphp[13][line] << 14 */
MOV_L (REGBISD(EDX,EBP,4,0),EDX) /* glyphp[14][line] */
OR_L (EAX,ECX) /* bits |= ..[13].. << 14 */
MOV_L (REGOFF(60,ESI),EBX) /* glyphp[15] */
SAL_L (CONST(20),EDX) /* glyphp[14][line] << 20 */
MOV_L (REGBISD(EBX,EBP,4,0),EBX) /* glyphp[15][line] */
OR_L (EDX,ECX) /* bits |= ..[14].. << 20 */
#ifndef MSBFIRST
SAL_L (CONST(26),EBX) /* glyphp[15][line] << 26 */
OR_L (EBX,ECX) /* bits |= ..[15].. << 26 */
#ifndef FIXEDBASE
MOV_L (ECX,REGOFF(8,EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (ECX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#endif
#else
MOV_L (CONST(0),EAX)
SAL_L (CONST(26),EBX) /* glyphp[15][line] << 26 */
MOV_L (CONST(0),EDX)
OR_L (EBX,ECX) /* bits |= ..[15].. << 26 */
MOV_B (CL,AL)
MOV_B (CH,DL)
MOV_B (REGOFF(BYTE_REVERSED,EAX),CL)
MOV_B (REGOFF(BYTE_REVERSED,EDX),CH)
ROL_L (CONST(16),ECX)
MOV_B (CL,AL)
MOV_B (CH,DL)
MOV_B (REGOFF(BYTE_REVERSED,EAX),CL)
MOV_B (REGOFF(BYTE_REVERSED,EDX),CH)
ROL_L (CONST(16),ECX)
#ifndef FIXEDBASE
MOV_L (ECX,REGOFF(8,EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (ECX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#endif
#endif
#ifndef FIXEDBASE
ADD_L (CONST(12),EDI) /* base += 3*/
#endif
CMP_L (CONST(96),width_arg)
JLE (.L6_4)
ADD_L (CONST(64),ESI) /* glyphp += 16 */
SUB_L (CONST(96),width_arg)
JMP (.L6_1)
.L6_4:
#ifndef FIXEDBASE
MOV_L (EDI,EAX) /* return base */
#else
MOV_L (base_arg,EAX) /* return base */
#endif
MOV_L (REGOFF(0,ESP),EDI) /* POPL EDI */
MOV_L (REGOFF(4,ESP),ESI) /* POPL ESI */
MOV_L (REGOFF(8,ESP),EBX) /* POPL EBX */
MOV_L (REGOFF(12,ESP),EBP) /* POPL EBP */
ADD_L (CONST(16),ESP)
RET
ALIGNTEXT4
#ifdef FIXEDBASE
# ifdef MSBFIRST
GLOBL GLNAME(DrawTETextScanlineWidth8PMSBFirstFixedBase)
GLNAME(DrawTETextScanlineWidth8PMSBFirstFixedBase):
# else
GLOBL GLNAME(DrawTETextScanlineWidth8PLSBFirstFixedBase)
GLNAME(DrawTETextScanlineWidth8PLSBFirstFixedBase):
# endif
#else
# ifdef MSBFIRST
GLOBL GLNAME(DrawTETextScanlineWidth8PMSBFirst)
GLNAME(DrawTETextScanlineWidth8PMSBFirst):
# else
GLOBL GLNAME(DrawTETextScanlineWidth8PLSBFirst)
GLNAME(DrawTETextScanlineWidth8PLSBFirst):
# endif
#endif
SUB_L (CONST(16),ESP)
MOV_L (EBP,REGOFF(12,ESP)) /* PUSH EBP */
MOV_L (EBX,REGOFF(8,ESP)) /* PUSH EBX */
MOV_L (ESI,REGOFF(4,ESP)) /* PUSH ESI */
MOV_L (EDI,REGOFF(0,ESP)) /* PUSH EDI */
MOV_L (line_arg,EBP)
MOV_L (base_arg,EDI)
MOV_L (glyphp_arg,ESI)
ALIGNTEXT4
.L8_1:
/* Pentium-optimized instruction pairing. */
/* EBX = bits */
MOV_L (REGIND(ESI),EAX) /* glyphp[0] */
MOV_L (REGOFF(4,ESI),EDX) /* glyphp[1] */
MOV_L (REGBISD(EAX,EBP,4,0),EAX) /* glyphp[0][line] */
MOV_L (REGBISD(EDX,EBP,4,0),EDX) /* glyphp[1][line] */
#ifdef MSBFIRST
MOV_B (REGOFF(BYTE_REVERSED,EAX),BL)
MOV_B (REGOFF(BYTE_REVERSED,EDX),BH)
#else
MOV_L (EAX,EBX) /* bits = glyph[0][line] */
MOV_B (DL,BH) /* bits |= ..[1].. << 8 */
#endif
ROL_L (CONST(16),EBX)
MOV_L (REGOFF(8,ESI),EAX) /* glyphp[2] */
MOV_L (REGOFF(12,ESI),ECX) /* glyphp[3] */
MOV_L (REGBISD(EAX,EBP,4,0),EAX) /* glyphp[2][line] */
MOV_L (REGBISD(ECX,EBP,4,0),ECX) /* glyphp[3][line] */
#ifdef MSBFIRST
MOV_B (REGOFF(BYTE_REVERSED,EAX),BL)
MOV_B (REGOFF(BYTE_REVERSED,ECX),BH)
#else
MOV_B (AL,BL) /* bits |= ..[2].. << 16 */
MOV_B (CL,BH) /* bits |= ..[3].. << 24 */
#endif
ROL_L (CONST(16),EBX)
MOV_L (EBX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
CMP_L (CONST(32),width_arg)
#ifndef FIXEDBASE
JLE (.L8_2)
#else
JLE (.L8_3)
#endif
MOV_L (REGOFF(16,ESI),EAX) /* glyphp[4] */
MOV_L (REGOFF(20,ESI),EDX) /* glyphp[5] */
MOV_L (REGBISD(EAX,EBP,4,0),EAX) /* glyphp[4][line] */
MOV_L (REGBISD(EDX,EBP,4,0),EDX) /* glyphp[5][line] */
#ifdef MSBFIRST
MOV_B (REGOFF(BYTE_REVERSED,EAX),BL)
MOV_B (REGOFF(BYTE_REVERSED,EDX),BH)
#else
MOV_L (EAX,EBX) /* bits = glyph[4][line] */
MOV_B (DL,BH) /* nits |= ..[5].. << 8 */
#endif
ROL_L (CONST(16),EBX)
MOV_L (REGOFF(24,ESI),EAX) /* glyphp[6] */
MOV_L (REGOFF(28,ESI),ECX) /* glyphp[7] */
MOV_L (REGBISD(EAX,EBP,4,0),EAX) /* glyphp[6][line] */
MOV_L (REGBISD(ECX,EBP,4,0),ECX) /* glyphp[7][line] */
#ifdef MSBFIRST
MOV_B (REGOFF(BYTE_REVERSED,EAX),BL)
MOV_B (REGOFF(BYTE_REVERSED,ECX),BH)
#else
MOV_B (AL,BL) /* bits |= ..[6].. << 16 */
MOV_B (CL,BH) /* bits |= ..[7].. << 24 */
#endif
ROL_L (CONST(16),EBX)
#ifndef FIXEDBASE
MOV_L (EAX,REGOFF(4,EDI)) /* WRITE_IN_BIT_ORDER(base+1, bits) */
ADD_L (CONST(8),EDI) /* base += 2 */
#else
MOV_L (EAX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#endif
CMP_L (CONST(64),width_arg)
JLE (.L8_3)
ADD_L (CONST(32),ESI) /* glyphp += 8 */
SUB_L (CONST(64),width_arg)
JMP (.L8_1)
#ifndef FIXEDBASE
.L8_2:
ADD_L (CONST(4),EDI) /* base++ */
.L8_3:
MOV_L (EDI,EAX) /* return base */
#else
.L8_3:
MOV_L (base_arg,EAX) /* return base */
#endif
MOV_L (REGOFF(0,ESP),EDI) /* POPL EDI */
MOV_L (REGOFF(4,ESP),ESI) /* POPL ESI */
MOV_L (REGOFF(8,ESP),EBX) /* POPL EBX */
MOV_L (REGOFF(12,ESP),EBP) /* POPL EBP */
ADD_L (CONST(16),ESP)
RET
ALIGNTEXT4
#ifdef FIXEDBASE
# ifdef MSBFIRST
GLOBL GLNAME(DrawTETextScanlineWidth9PMSBFirstFixedBase)
GLNAME(DrawTETextScanlineWidth9PMSBFirstFixedBase):
# else
GLOBL GLNAME(DrawTETextScanlineWidth9PLSBFirstFixedBase)
GLNAME(DrawTETextScanlineWidth9PLSBFirstFixedBase):
# endif
#else
# ifdef MSBFIRST
GLOBL GLNAME(DrawTETextScanlineWidth9PMSBFirst)
GLNAME(DrawTETextScanlineWidth9PMSBFirst):
# else
GLOBL GLNAME(DrawTETextScanlineWidth9PLSBFirst)
GLNAME(DrawTETextScanlineWidth9PLSBFirst):
# endif
#endif
SUB_L (CONST(16),ESP)
MOV_L (EBP,REGOFF(12,ESP)) /* PUSH EBP */
MOV_L (EBX,REGOFF(8,ESP)) /* PUSH EBX */
MOV_L (ESI,REGOFF(4,ESP)) /* PUSH ESI */
MOV_L (EDI,REGOFF(0,ESP)) /* PUSH EDI */
MOV_L (line_arg,EBP)
MOV_L (base_arg,EDI)
MOV_L (glyphp_arg,ESI)
ALIGNTEXT4
.L9_1:
/* Pentium-optimized instruction pairing. */
/* EAX = bits */
MOV_L (REGOFF(4,ESI),EBX) /* glyphp[1] */
MOV_L (REGIND(ESI),EAX) /* glyphp[0] */
MOV_L (REGBISD(EBX,EBP,4,0),EBX) /* glyphp[1][line] */
MOV_L (REGOFF(8,ESI),ECX) /* glyphp[2] */
SAL_L (CONST(9),EBX) /* glyphp[1][line] << 9 */
MOV_L (REGOFF(12,ESI),EDX) /* glyphp[3] */
MOV_L (REGBISD(EAX,EBP,4,0),EAX) /* glyphp[0][line] */
MOV_L (REGBISD(EDX,EBP,4,0),EDX) /* glyphp[3][line] */
MOV_L (REGBISD(ECX,EBP,4,0),ECX) /* glyphp[2][line] */
OR_L (EBX,EAX) /* bits |= ..[1].. << 9 */
SAL_L (CONST(18),ECX) /* glyphp[2][line] << 18 */
OR_L (ECX,EAX) /* bits |= ..[2].. << 18 */
SAL_L (CONST(27),EDX) /* glyphp[3][line << 27 */
#ifndef MSBFIRST
MOV_L (REGOFF(12,ESI),EBX) /* glyphp[3] */
OR_L (EDX,EAX) /* bits |= ..[3].. << 27 */
MOV_L (REGBISD(EBX,EBP,4,0),EBX) /* glyphp[3][line] */
MOV_L (EAX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (CONST(0),EBX)
OR_L (EDX,EAX) /* bits |= ..[3].. << 27 */
MOV_L (CONST(0),ECX)
MOV_B (AL,BL)
MOV_B (AH,CL)
MOV_B (REGOFF(BYTE_REVERSED,EBX),AL)
MOV_B (REGOFF(BYTE_REVERSED,ECX),AH)
ROL_L (CONST(16),EAX)
MOV_B (AL,BL)
MOV_B (AH,CL)
MOV_B (REGOFF(BYTE_REVERSED,EBX),AL)
MOV_B (REGOFF(BYTE_REVERSED,ECX),AH)
MOV_L (REGOFF(12,ESI),EBX) /* glyphp[3] */
ROL_L (CONST(16),EAX)
MOV_L (REGBISD(EBX,EBP,4,0),EBX) /* glyphp[3][line] */
MOV_L (EAX,REGIND(EDI))
#endif
CMP_L (CONST(32),width_arg)
JG (.L9_2)
#ifndef FIXEDBASE
ADD_L (CONST(4),EDI) /* base++ */
#endif
JMP (.L9_11)
.L9_2:
/* Note that glyphp[3][line] is read again. */
/* EAX = bits, EBX = glyphp[3][line] >> 5 */
SHR_L (CONST(5),EBX) /* glyphp[3][line] >> 5 */
MOV_L (REGOFF(16,ESI),EAX) /* glyphp[4] */
MOV_L (REGOFF(20,ESI),ECX) /* glyphp[5] */
MOV_L (REGBISD(EAX,EBP,4,0),EAX) /* glyphp[4][line] */
MOV_L (REGBISD(ECX,EBP,4,0),ECX) /* glyphp[5][line] */
MOV_L (REGOFF(24,ESI),EDX) /* glyphp[6] */
SAL_L (CONST(4),EAX) /* glyphp[4][line] << 4 */
MOV_L (REGBISD(EDX,EBP,4,0),EDX) /* glyphp[6][line] */
SAL_L (CONST(13),ECX) /* glyphp[5][line] << 13 */
OR_L (EBX,EAX) /* bits |= ..[4].. << 4 */
SAL_L (CONST(22),EDX) /* glyphp[6][line] << 22 */
MOV_L (REGOFF(28,ESI),EBX) /* glyphp[7] */
OR_L (ECX,EAX) /* bits |= ..[5].. << 13 */
MOV_L (REGBISD(EBX,EBP,4,0),EBX) /* glyphp[7][line] */
OR_L (EDX,EAX) /* bits |= ..[6].. << 22 */
#ifndef MSBFIRST
MOV_L (REGOFF(28,ESI),ECX) /* glyphp[7] */
SAL_L (CONST(31),EBX) /* glyphp[7][line] << 31 */
MOV_L (REGBISD(ECX,EBP,4,0),ECX) /* glyphp[7][line] */
OR_L (EBX,EAX) /* bits |= ..[7].. << 31 */
MOV_L (REGOFF(32,ESI),EDX) /* glyphp[8] */
#ifndef FIXEDBASE
MOV_L (EAX,REGOFF(4,EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (EAX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#endif
#else
MOV_L (CONST(0),ECX)
SAL_L (CONST(31),EBX) /* glyphp[7][line] << 31 */
MOV_L (CONST(0),EDX)
OR_L (EBX,EAX) /* bits |= ..[7].. << 31 */
MOV_B (AL,CL)
MOV_B (AH,DL)
MOV_B (REGOFF(BYTE_REVERSED,ECX),AL)
MOV_B (REGOFF(BYTE_REVERSED,EDX),AH)
ROL_L (CONST(16),EAX)
MOV_B (AL,CL)
MOV_B (AH,DL)
MOV_B (REGOFF(BYTE_REVERSED,ECX),AL)
MOV_B (REGOFF(BYTE_REVERSED,EDX),AH)
MOV_L (REGOFF(28,ESI),ECX) /* glyphp[7] */
ROL_L (CONST(16),EAX)
MOV_L (REGBISD(ECX,EBP,4,0),ECX) /* glyphp[7][line] */
#ifndef FIXEDBASE
MOV_L (EAX,REGOFF(4,EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (EAX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#endif
MOV_L (REGOFF(32,ESI),EDX) /* glyphp[8] */
#endif
CMP_L (CONST(64),width_arg)
JG (.L9_3)
#ifndef FIXEDBASE
ADD_L (CONST(8),EDI) /* base+=2 */
#endif
JMP (.L9_11)
.L9_3:
/* Note that glyphp[7][line] is read again. */
/* ECX = bits = glyphp[7][line] >> 1 */
SHR_L (CONST(1),ECX) /* glyphp[7][line] >> 1 */
MOV_L (REGOFF(36,ESI),EBX) /* glyphp[9] */
MOV_L (REGBISD(EDX,EBP,4,0),EDX) /* glyphp[8][line] */
MOV_L (REGBISD(EBX,EBP,4,0),EBX) /* glyphp[9][line] */
SAL_L (CONST(8),EDX) /* glyphp[8][line] << 8 */
MOV_L (REGOFF(40,ESI),EAX) /* glyphp[10] */
SAL_L (CONST(17),EBX) /* glyphp[9][line] << 17 */
OR_L (EDX,ECX) /* bits |= ..[8].. << 8 */
MOV_L (REGBISD(EAX,EBP,4,0),EAX) /* glyphp[10][line] */
OR_L (EBX,ECX) /* bits |= ..[9].. << 17 */
SAL_L (CONST(26),EAX) /* glyphp[10][line] << 26 */
#ifndef MSBFIRST
MOV_L (REGOFF(40,ESI),EDX) /* glyphp[10] */
OR_L (EAX,ECX) /* bits |= ..[10].. << 26 */
MOV_L (REGBISD(EDX,EBP,4,0),EDX) /* glyphp[10][line] */
#ifndef FIXEDBASE
MOV_L (ECX,REGOFF(8,EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (ECX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#endif
#else
MOV_L (CONST(0),EDX)
OR_L (EAX,ECX) /* bits |= ..[10].. << 26 */
MOV_L (CONST(0),EBX)
MOV_B (CL,DL)
MOV_B (CH,BL)
MOV_B (REGOFF(BYTE_REVERSED,EDX),CL)
MOV_B (REGOFF(BYTE_REVERSED,EBX),CH)
ROL_L (CONST(16),ECX)
MOV_B (CL,DL)
MOV_B (CH,BL)
MOV_B (REGOFF(BYTE_REVERSED,EDX),CL)
MOV_B (REGOFF(BYTE_REVERSED,EBX),CH)
MOV_L (REGOFF(40,ESI),EDX) /* glyphp[10] */
ROL_L (CONST(16),ECX)
MOV_L (REGBISD(EDX,EBP,4,0),EDX) /* glyphp[10][line] */
#ifndef FIXEDBASE
MOV_L (ECX,REGOFF(8,EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (ECX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#endif
#endif
CMP_L (CONST(96),width_arg)
JG (.L9_4)
#ifndef FIXEDBASE
ADD_L (CONST(12),EDI) /* base+=3 */
#endif
JMP (.L9_11)
.L9_4:
/* Note that glyphp[10][line] is read again. */
/* EDX = bits = glyphp[10][line] >> 6 */
SHR_L (CONST(6),EDX) /* glyphp[10][line] >> 6 */
MOV_L (REGOFF(44,ESI),EBX) /* glyphp[11] */
MOV_L (REGOFF(48,ESI),EAX) /* glyphp[12] */
MOV_L (REGBISD(EBX,EBP,4,0),EBX) /* glyphp[11][line] */
MOV_L (REGBISD(EAX,EBP,4,0),EAX) /* glyphp[12][line] */
MOV_L (REGOFF(52,ESI),ECX) /* glyphp[13] */
SAL_L (CONST(3),EBX) /* glyphp[11][line] << 3 */
MOV_L (REGBISD(ECX,EBP,4,0),ECX) /* glyphp[13][line] */
SAL_L (CONST(12),EAX) /* glyphp[12][line] << 12 */
OR_L (EBX,EDX) /* bits |= ..[11].. << 3 */
SAL_L (CONST(21),ECX) /* glyphp[13][line] << 21 */
MOV_L (REGOFF(56,ESI),EBX) /* glyphp[14] */
OR_L (EAX,EDX) /* bits |= ..[12].. << 17 */
MOV_L (REGBISD(EBX,EBP,4,0),EBX) /* glyphp[14][line] */
SAL_L (CONST(30),EBX) /* glyphp[14][line] << 30 */
OR_L (ECX,EDX) /* bits |= ..[13].. << 21 */
#ifndef MSBFIRST
MOV_L (REGOFF(56,ESI),EAX) /* glyphp[14] */
OR_L (EBX,EDX) /* bits |= ..[14].. << 30 */
MOV_L (REGBISD(EAX,EBP,4,0),EAX) /* glyphp[14][line] */
#ifndef FIXEDBASE
MOV_L (EDX,REGOFF(12,EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (EDX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#endif
#else
MOV_L (CONST(0),EAX)
OR_L (EBX,EDX) /* bits |= ..[14].. << 30 */
MOV_L (CONST(0),ECX)
MOV_B (DL,AL)
MOV_B (DH,CL)
MOV_B (REGOFF(BYTE_REVERSED,EAX),DL)
MOV_B (REGOFF(BYTE_REVERSED,ECX),DH)
ROL_L (CONST(16),EDX)
MOV_B (DL,AL)
MOV_B (DH,CL)
MOV_B (REGOFF(BYTE_REVERSED,EAX),DL)
MOV_B (REGOFF(BYTE_REVERSED,ECX),DH)
MOV_L (REGOFF(56,ESI),EAX) /* glyphp[14] */
ROL_L (CONST(16),EDX)
MOV_L (REGBISD(EAX,EBP,4,0),EAX) /* glyphp[14][line] */
#ifndef FIXEDBASE
MOV_L (EDX,REGOFF(12,EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (EDX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#endif
#endif
CMP_L (CONST(128),width_arg)
JG (.L9_5)
#ifndef FIXEDBASE
ADD_L (CONST(16),EDI) /* base+=4 */
#endif
JMP (.L9_11)
.L9_5:
/* Note that glyphp[14][line] is read again. */
/* EAX = bits = glyphp[14][line] >> 2 */
SHR_L (CONST(2),EAX) /* glyphp[14][line] >> 2 */
MOV_L (REGOFF(60,ESI),ECX) /* glyphp[15] */
MOV_L (REGOFF(64,ESI),EBX) /* glyphp[16] */
MOV_L (REGBISD(ECX,EBP,4,0),ECX) /* glyphp[15][line] */
MOV_L (REGBISD(EBX,EBP,4,0),EBX) /* glyphp[16][line] */
MOV_L (REGOFF(68,ESI),EDX) /* glyphp[17] */
SAL_L (CONST(7),ECX) /* glyphp[15][line] << 7 */
MOV_L (REGBISD(EDX,EBP,4,0),EDX) /* glyphp[17][line] */
SAL_L (CONST(16),EBX) /* glyphp[16][line] << 16 */
OR_L (ECX,EAX) /* bits |= ..[15].. << 7 */
SAL_L (CONST(25),EDX) /* glyphp[17][line] << 25 */
OR_L (EBX,EAX) /* bits |= ..[16].. << 16 */
#ifndef MSBFIRST
MOV_L (REGOFF(68,ESI),ECX) /* glyphp[17] */
OR_L (EDX,EAX) /* bits |= ..[17].. << 25 */
MOV_L (REGBISD(ECX,EBP,4,0),ECX) /* glyphp[17][line] */
#ifndef FIXEDBASE
MOV_L (EAX,REGOFF(16,EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (EAX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#endif
#else
MOV_L (CONST(0),ECX)
OR_L (EDX,EAX) /* bits |= ..[17].. << 25 */
MOV_L (CONST(0),EBX)
MOV_B (AL,CL)
MOV_B (AH,BL)
MOV_B (REGOFF(BYTE_REVERSED,ECX),AL)
MOV_B (REGOFF(BYTE_REVERSED,EBX),AH)
ROL_L (CONST(16),EAX)
MOV_B (AL,CL)
MOV_B (AH,BL)
MOV_B (REGOFF(BYTE_REVERSED,ECX),AL)
MOV_B (REGOFF(BYTE_REVERSED,EBX),AH)
MOV_L (REGOFF(68,ESI),ECX) /* glyphp[17] */
ROL_L (CONST(16),EAX)
MOV_L (REGBISD(ECX,EBP,4,0),ECX) /* glyphp[17][line] */
#ifndef FIXEDBASE
MOV_L (EAX,REGOFF(16,EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (EAX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#endif
#endif
CMP_L (CONST(160),width_arg)
JG (.L9_6)
#ifndef FIXEDBASE
ADD_L (CONST(20),EDI) /* base+=5 */
#endif
JMP (.L9_11)
.L9_6:
/* Note that glyphp[17][line] is read again. */
/* ECX = bits = glyphp[17][line] >> 7 */
SHR_L (CONST(7),ECX) /* glyphp[17][line] >> 7 */
MOV_L (REGOFF(72,ESI),EBX) /* glyphp[18] */
MOV_L (REGOFF(76,ESI),EAX) /* glyphp[19] */
MOV_L (REGBISD(EBX,EBP,4,0),EBX) /* glyphp[18][line] */
MOV_L (REGBISD(EAX,EBP,4,0),EAX) /* glyphp[19][line] */
MOV_L (REGOFF(80,ESI),EDX) /* glyphp[20] */
SAL_L (CONST(2),EBX) /* glyphp[18][line] << 2 */
MOV_L (REGBISD(EDX,EBP,4,0),EDX) /* glyphp[20][line] */
SAL_L (CONST(11),EAX) /* glyphp[19][line] << 11 */
OR_L (EBX,ECX) /* bits |= ..[18].. << 2 */
SAL_L (CONST(20),EDX) /* glyphp[20][line] << 20 */
MOV_L (REGOFF(84,ESI),EBX) /* glyphp[21] */
OR_L (EAX,ECX) /* bits |= ..[19].. << 11 */
MOV_L (REGBISD(EBX,EBP,4,0),EBX) /* glyphp[21][line] */
OR_L (EDX,ECX) /* bits |= ..[20].. << 20 */
#ifndef MSBFIRST
MOV_L (REGOFF(84,ESI),EAX) /* glyphp[21] */
SAL_L (CONST(29),EBX) /* glyphp[21][line] << 29 */
MOV_L (REGBISD(EAX,EBP,4,0),EAX) /* glyphp[21][line] */
OR_L (EBX,ECX) /* bits |= ..[14].. << 30 */
MOV_L (REGOFF(88,ESI),EDX) /* glyphp[22] */
#ifndef FIXEDBASE
MOV_L (ECX,REGOFF(20,EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (ECX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#endif
#else
MOV_L (CONST(0),EAX)
SAL_L (CONST(29),EBX) /* glyphp[21][line] << 29 */
MOV_L (CONST(0),EDX)
OR_L (EBX,ECX) /* bits |= ..[14].. << 30 */
MOV_B (CL,AL)
MOV_B (CH,DL)
MOV_B (REGOFF(BYTE_REVERSED,EAX),CL)
MOV_B (REGOFF(BYTE_REVERSED,EDX),CH)
ROL_L (CONST(16),ECX)
MOV_B (CL,AL)
MOV_B (CH,DL)
MOV_B (REGOFF(BYTE_REVERSED,EAX),CL)
MOV_B (REGOFF(BYTE_REVERSED,EDX),CH)
MOV_L (REGOFF(84,ESI),EAX) /* glyphp[21] */
ROL_L (CONST(16),ECX)
MOV_L (REGBISD(EAX,EBP,4,0),EAX) /* glyphp[21][line] */
#ifndef FIXEDBASE
MOV_L (ECX,REGOFF(20,EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (ECX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#endif
MOV_L (REGOFF(88,ESI),EDX) /* glyphp[22] */
#endif
CMP_L (CONST(192),width_arg)
JG (.L9_7)
#ifndef FIXEDBASE
ADD_L (CONST(24),EDI) /* base+=6 */
#endif
JMP (.L9_11)
.L9_7:
/* Note that glyphp[21][line] is read again. */
/* EAX = bits = glyphp[21][line] >> 3 */
SHR_L (CONST(3),EAX) /* glyphp[21][line] >> 3 */
MOV_L (REGBISD(EDX,EBP,4,0),EDX) /* glyphp[22][line] */
MOV_L (REGOFF(92,ESI),EBX) /* glyphp[23] */
MOV_L (REGOFF(96,ESI),ECX) /* glyphp[24] */
SAL_L (CONST(6),EDX) /* glyphp[22][line] << 6 */
MOV_L (REGBISD(EBX,EBP,4,0),EBX) /* glyphp[23][line] */
OR_L (EDX,EAX) /* bits |= ..[22].. << 6 */
MOV_L (REGBISD(ECX,EBP,4,0),ECX) /* glyphp[24][line] */
SAL_L (CONST(15),EBX) /* glyphp[23][line] << 15 */
OR_L (EBX,EAX) /* bits |= ..[23].. << 15 */
SAL_L (CONST(24),ECX) /* glyphp[24][line] << 24 */
#ifndef MSBFIRST
MOV_L (REGOFF(96,ESI),EDX) /* glyphp[24] */
OR_L (ECX,EAX) /* bits |= ..[24].. << 24 */
MOV_L (REGBISD(EDX,EBP,4,0),EDX) /* glyphp[24][line] */
#ifndef FIXEDBASE
MOV_L (EAX,REGOFF(24,EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (EAX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#endif
#else
MOV_L (CONST(0),EDX)
OR_L (ECX,EAX) /* bits |= ..[24].. << 24 */
MOV_L (CONST(0),EBX)
MOV_B (AL,DL)
MOV_B (AH,BL)
MOV_B (REGOFF(BYTE_REVERSED,EDX),AL)
MOV_B (REGOFF(BYTE_REVERSED,EBX),AH)
ROL_L (CONST(16),EAX)
MOV_B (AL,DL)
MOV_B (AH,BL)
MOV_B (REGOFF(BYTE_REVERSED,EDX),AL)
MOV_B (REGOFF(BYTE_REVERSED,EBX),AH)
MOV_L (REGOFF(96,ESI),EDX) /* glyphp[24] */
ROL_L (CONST(16),EAX)
MOV_L (REGBISD(EDX,EBP,4,0),EDX) /* glyphp[24][line] */
#ifndef FIXEDBASE
MOV_L (EAX,REGOFF(24,EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (EAX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#endif
#endif
CMP_L (CONST(224),width_arg)
JG (.L9_8)
#ifndef FIXEDBASE
ADD_L (CONST(28),EDI) /* base+=7 */
#endif
JMP (.L9_11)
.L9_8:
/* Note that glyphp[24][line] is read again. */
/* EDX = bits = glyphp[24][line] >> 8 */
SHR_L (CONST(8),EDX) /* glyphp[24][line] >> 8 */
MOV_L (REGOFF(100,ESI),EAX) /* glyphp[25] */
MOV_L (REGOFF(104,ESI),EBX) /* glyphp[26] */
MOV_L (REGBISD(EAX,EBP,4,0),EAX) /* glyphp[25][line] */
MOV_L (REGBISD(EBX,EBP,4,0),EBX) /* glyphp[26][line] */
MOV_L (REGOFF(108,ESI),ECX) /* glyphp[27] */
SAL_L (CONST(1),EAX) /* glyphp[25][line] << 1 */
MOV_L (REGBISD(ECX,EBP,4,0),ECX) /* glyphp[27][line] */
SAL_L (CONST(10),EBX) /* glyphp[26][line] << 10 */
OR_L (EAX,EDX) /* bits |= ..[25].. << 1 */
SAL_L (CONST(19),ECX) /* glyphp[27][line] << 19 */
OR_L (EBX,EDX) /* bits |= ..[26].. << 10 */
MOV_L (REGOFF(112,ESI),EAX) /* glyphp[28] */
OR_L (ECX,EDX) /* bits |= ..[27].. << 19 */
MOV_L (REGBISD(EAX,EBP,4,0),EAX) /* glyphp[28][line] */
#ifndef MSBFIRST
MOV_L (REGOFF(112,ESI),EBX) /* glyphp[28] */
SAL_L (CONST(28),EAX) /* glyphp[28][line] << 28 */
MOV_L (REGBISD(EBX,EBP,4,0),EBX) /* glyphp[28][line] */
OR_L (EAX,EDX) /* bits |= ..[28].. << 28 */
MOV_L (REGOFF(116,ESI),ECX) /* glyphp[29] */
#ifndef FIXEDBASE
MOV_L (EDX,REGOFF(28,EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (EDX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#endif
#else
MOV_L (CONST(0),EBX)
SAL_L (CONST(28),EAX) /* glyphp[28][line] << 28 */
MOV_L (CONST(0),ECX)
OR_L (EAX,EDX) /* bits |= ..[28].. << 28 */
MOV_B (DL,BL)
MOV_B (DH,CL)
MOV_B (REGOFF(BYTE_REVERSED,EBX),DL)
MOV_B (REGOFF(BYTE_REVERSED,ECX),DH)
ROL_L (CONST(16),EDX)
MOV_B (DL,BL)
MOV_B (DH,CL)
MOV_B (REGOFF(BYTE_REVERSED,EBX),DL)
MOV_B (REGOFF(BYTE_REVERSED,ECX),DH)
MOV_L (REGOFF(112,ESI),EBX) /* glyphp[28] */
ROL_L (CONST(16),EDX)
MOV_L (REGOFF(116,ESI),ECX) /* glyphp[29] */
#ifndef FIXEDBASE
MOV_L (EDX,REGOFF(28,EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (EDX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#endif
MOV_L (REGBISD(EBX,EBP,4,0),EBX) /* glyphp[28][line] */
#endif
CMP_L (CONST(256),width_arg)
JG (.L9_9)
#ifndef FIXEDBASE
ADD_L (CONST(32),EDI) /* base+=8 */
#endif
JMP (.L9_11)
.L9_9:
/* Note that glyphp[28][line] is read again. */
/* EBX = bits = glyphp[28][line] >> 4 */
SHR_L (CONST(4),EBX) /* glyphp[28][line] >> 4 */
MOV_L (REGBISD(ECX,EBP,4,0),ECX) /* glyphp[29][line] */
MOV_L (REGOFF(120,ESI),EAX) /* glyphp[30] */
MOV_L (REGOFF(124,ESI),EDX) /* glyphp[31] */
SAL_L (CONST(5),ECX) /* glyphp[29][line] << 5 */
MOV_L (REGBISD(EAX,EBP,4,0),EAX) /* glyphp[30][line] */
OR_L (ECX,EBX) /* bits |= ..[29].. << 5 */
MOV_L (REGBISD(EDX,EBP,4,0),EDX) /* glyphp[31][line] */
SAL_L (CONST(14),EAX) /* glyphp[30][line] << 14 */
ADD_L (CONST(128),ESI) /* glyphp+=32 */
SAL_L (CONST(23),EDX) /* glyphp[31][line] << 23 */
OR_L (EAX,EBX) /* bits |= ..[30].. << 14 */
SUB_L (CONST(288),width_arg) /* width-=288 */
OR_L (EDX,EBX) /* bits |= ..[31].. << 23 */
#ifndef MSBFIRST
#ifndef FIXEDBASE
MOV_L (EBX,REGOFF(32,EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (EBX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#endif
#else
MOV_L (CONST(0),ECX)
MOV_L (CONST(0),EAX)
MOV_B (BL,CL)
MOV_B (BH,AL)
MOV_B (REGOFF(BYTE_REVERSED,ECX),BL)
MOV_B (REGOFF(BYTE_REVERSED,EAX),BH)
ROL_L (CONST(16),EBX)
MOV_B (BL,CL)
MOV_B (BH,AL)
MOV_B (REGOFF(BYTE_REVERSED,ECX),BL)
MOV_B (REGOFF(BYTE_REVERSED,EAX),BH)
ROL_L (CONST(16),EBX)
#ifndef FIXEDBASE
MOV_L (EBX,REGOFF(32,EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#else
MOV_L (EBX,REGIND(EDI)) /* WRITE_IN_BIT_ORDER(base, bits) */
#endif
#endif
ADD_L (CONST(36),EDI) /* base+=9 */
CMP_L (CONST(0),width_arg)
JG (.L9_1)
.L9_11:
#ifndef FIXEDBASE
MOV_L (EDI,EAX) /* return base */
#else
MOV_L (base_arg,EAX) /* return base */
#endif
MOV_L (REGOFF(0,ESP),EDI) /* POPL EDI */
MOV_L (REGOFF(4,ESP),ESI) /* POPL ESI */
MOV_L (REGOFF(8,ESP),EBX) /* POPL EBX */
MOV_L (REGOFF(12,ESP),EBP) /* POPL EBP */
ADD_L (CONST(16),ESP)
RET

View file

@ -898,7 +898,7 @@ handle_mouse:
break;
case NSKeyDown: case NSKeyUp:
DarwinSendKeyboardEvents((type == NSKeyDown)?KeyPress:KeyRelease, [e keyCode]);
DarwinSendKeyboardEvents((type == NSKeyDown)?KeyPress:KeyRelease, [e keyCode]);
break;
case NSFlagsChanged:

View file

@ -2,12 +2,13 @@
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.02">
<data>
<int key="IBDocument.SystemTarget">1050</int>
<string key="IBDocument.SystemVersion">9E17</string>
<string key="IBDocument.SystemVersion">9F10</string>
<string key="IBDocument.InterfaceBuilderVersion">670</string>
<string key="IBDocument.AppKitVersion">949.33</string>
<string key="IBDocument.AppKitVersion">949.34</string>
<string key="IBDocument.HIToolboxVersion">352.00</string>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
<integer value="351"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -456,7 +457,7 @@
<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
<string key="NSWindowContentMinSize">{320, 240}</string>
<object class="NSView" key="NSWindowView" id="941366957">
<nil key="NSNextResponder"/>
<reference key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -548,7 +549,7 @@
<object class="NSTextFieldCell" key="NSCell" id="649334366">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags2">4194304</int>
<string type="base64-UTF8" key="NSContents">SG9sZCBPcHRpb24gb3IgQ29udHJvbCB3aGlsZSBjbGlja2luZyB0byBhY3RpdmF0ZSB0aGUgbWlkZGxl
<string type="base64-UTF8" key="NSContents">SG9sZCBPcHRpb24gb3IgQ29tbWFuZCB3aGlsZSBjbGlja2luZyB0byBhY3RpdmF0ZSB0aGUgbWlkZGxl
IG9yIHJpZ2h0IG1vdXNlIGJ1dHRvbnMuCg</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="282885445"/>
@ -1080,6 +1081,7 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4</string>
</object>
</object>
<string key="NSFrameSize">{484, 280}</string>
<reference key="NSSuperview"/>
</object>
<string key="NSScreenRect">{{0, 0}, {1280, 938}}</string>
<string key="NSMinSize">{213, 129}</string>

View file

@ -900,9 +900,6 @@ xf86SetRootClip (ScreenPtr pScreen, int enable)
Bool WasViewable = (Bool)(pWin->viewable);
Bool anyMarked = TRUE;
RegionPtr pOldClip = NULL, bsExposed;
#ifdef DO_SAVE_UNDERS
Bool dosave = FALSE;
#endif
WindowPtr pLayerWin;
BoxRec box;
@ -973,12 +970,6 @@ xf86SetRootClip (ScreenPtr pScreen, int enable)
anyMarked = TRUE;
}
#ifdef DO_SAVE_UNDERS
if (DO_SAVE_UNDERS(pWin))
{
dosave = (*pScreen->ChangeSaveUnder)(pLayerWin, pLayerWin);
}
#endif /* DO_SAVE_UNDERS */
if (anyMarked)
(*pScreen->ValidateTree)(pWin, NullWindow, VTOther);
@ -1010,10 +1001,6 @@ xf86SetRootClip (ScreenPtr pScreen, int enable)
{
if (anyMarked)
(*pScreen->HandleExposures)(pWin);
#ifdef DO_SAVE_UNDERS
if (dosave)
(*pScreen->PostChangeSaveUnder)(pLayerWin, pLayerWin);
#endif /* DO_SAVE_UNDERS */
if (anyMarked && pScreen->PostValidateTree)
(*pScreen->PostValidateTree)(pWin, NullWindow, VTOther);
}

View file

@ -77,7 +77,7 @@ in this Software without prior written authorization from The Open Group.
/* FIXME: Abstract this better */
void QuartzModeEQInit(void);
static int old_flags = 0; // last known modifier state
static int modifier_flags = 0; // last known modifier state
#define FD_ADD_MAX 128
static int fd_add[FD_ADD_MAX];
@ -140,43 +140,49 @@ static inline void darwinEvents_unlock(void) {
/*
* DarwinPressModifierMask
* Press or release the given modifier key, specified by its mask.
* Press or release the given modifier key, specified by its mask (one of NX_*MASK constants)
*/
static void DarwinPressModifierMask(
int pressed,
int mask) // one of NX_*MASK constants
{
static void DarwinPressModifierMask(int pressed, int mask) {
int keycode;
int key = DarwinModifierNXMaskToNXKey(mask);
if (key != -1) {
int keycode = DarwinModifierNXKeyToNXKeycode(key, 0);
keycode = DarwinModifierNXKeyToNXKeycode(key, 0);
if (keycode != 0)
DarwinSendKeyboardEvents(pressed, keycode);
DarwinSendKeyboardEvents(pressed, keycode);
}
}
#ifdef NX_DEVICELCTLKEYMASK
#define CONTROL_MASK(flags) (flags & (NX_DEVICELCTLKEYMASK|NX_DEVICERCTLKEYMASK))
#define NX_CONTROLMASK_FULL (NX_CONTROLMASK | NX_DEVICELCTLKEYMASK | NX_DEVICERCTLKEYMASK)
#else
#define CONTROL_MASK(flags) (NX_CONTROLMASK)
#define NX_CONTROLMASK_FULL NX_CONTROLMASK
#endif /* NX_DEVICELCTLKEYMASK */
#ifdef NX_DEVICELSHIFTKEYMASK
#define SHIFT_MASK(flags) (flags & (NX_DEVICELSHIFTKEYMASK|NX_DEVICERSHIFTKEYMASK))
#define NX_SHIFTMASK_FULL (NX_SHIFTMASK | NX_DEVICELSHIFTKEYMASK | NX_DEVICERSHIFTKEYMASK)
#else
#define SHIFT_MASK(flags) (NX_SHIFTMASK)
#define NX_SHIFTMASK_FULL NX_SHIFTMASK
#endif /* NX_DEVICELSHIFTKEYMASK */
#ifdef NX_DEVICELCMDKEYMASK
#define COMMAND_MASK(flags) (flags & (NX_DEVICELCMDKEYMASK|NX_DEVICERCMDKEYMASK))
#define NX_COMMANDMASK_FULL (NX_COMMANDMASK | NX_DEVICELCMDKEYMASK | NX_DEVICERCMDKEYMASK)
#else
#define COMMAND_MASK(flags) (NX_COMMANDMASK)
#define NX_COMMANDMASK_FULL NX_COMMANDMASK
#endif /* NX_DEVICELCMDKEYMASK */
#ifdef NX_DEVICELALTKEYMASK
#define ALTERNATE_MASK(flags) (flags & (NX_DEVICELALTKEYMASK|NX_DEVICERALTKEYMASK))
#define NX_ALTERNATEMASK_FULL (NX_ALTERNATEMASK | NX_DEVICELALTKEYMASK | NX_DEVICERALTKEYMASK)
#else
#define ALTERNATE_MASK(flags) (NX_ALTERNATEMASK)
#define NX_ALTERNATEMASK_FULL NX_ALTERNATEMASK
#endif /* NX_DEVICELALTKEYMASK */
/*
@ -190,16 +196,16 @@ static void DarwinUpdateModifiers(
if (flags & NX_ALPHASHIFTMASK) {
DarwinPressModifierMask(pressed, NX_ALPHASHIFTMASK);
}
if (flags & NX_COMMANDMASK) {
if (flags & NX_COMMANDMASK_FULL) {
DarwinPressModifierMask(pressed, COMMAND_MASK(flags));
}
if (flags & NX_CONTROLMASK) {
if (flags & NX_CONTROLMASK_FULL) {
DarwinPressModifierMask(pressed, CONTROL_MASK(flags));
}
if (flags & NX_ALTERNATEMASK) {
if (flags & NX_ALTERNATEMASK_FULL) {
DarwinPressModifierMask(pressed, ALTERNATE_MASK(flags));
}
if (flags & NX_SHIFTMASK) {
if (flags & NX_SHIFTMASK_FULL) {
DarwinPressModifierMask(pressed, SHIFT_MASK(flags));
}
if (flags & NX_SECONDARYFNMASK) {
@ -214,45 +220,10 @@ static void DarwinUpdateModifiers(
* are held down during a "context" switch -- otherwise, we would miss the KeyUp.
*/
static void DarwinReleaseModifiers(void) {
ErrorF("DarwinReleaseModifiers\n");
DarwinUpdateModifiers(KeyRelease, COMMAND_MASK(-1) | CONTROL_MASK(-1) | ALTERNATE_MASK(-1) | SHIFT_MASK(-1));
}
/*
* DarwinSimulateMouseClick
* Send a mouse click to X when multiple mouse buttons are simulated
* with modifier-clicks, such as command-click for button 2. The dix
* layer is told that the previously pressed modifier key(s) are
* released, the simulated click event is sent. After the mouse button
* is released, the modifier keys are reverted to their actual state,
* which may or may not be pressed at that point. This is usually
* closest to what the user wants. Ie. the user typically wants to
* simulate a button 2 press instead of Command-button 2.
*/
static void DarwinSimulateMouseClick(
int pointer_x,
int pointer_y,
float pressure,
float tilt_x,
float tilt_y,
int whichButton, // mouse button to be pressed
int modifierMask) // modifiers used for the fake click
{
// first fool X into forgetting about the keys
// for some reason, it's not enough to tell X we released the Command key --
// it has to be the *left* Command key.
if (modifierMask & NX_COMMANDMASK) modifierMask |=NX_DEVICELCMDKEYMASK ;
DarwinUpdateModifiers(KeyRelease, modifierMask);
// push the mouse button
DarwinSendPointerEvents(ButtonPress, whichButton, pointer_x, pointer_y,
pressure, tilt_x, tilt_y);
DarwinSendPointerEvents(ButtonRelease, whichButton, pointer_x, pointer_y,
pressure, tilt_x, tilt_y);
// restore old modifiers
DarwinUpdateModifiers(KeyPress, modifierMask);
}
/* Generic handler for Xquartz-specifc events. When possible, these should
be moved into their own individual functions and set as handlers using
mieqSetHandler. */
@ -475,7 +446,6 @@ static void DarwinPrepareValuators(int *valuators, ScreenPtr screen,
void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int pointer_y,
float pressure, float tilt_x, float tilt_y) {
static int darwinFakeMouseButtonDown = 0;
static int darwinFakeMouseButtonMask = 0;
int i, num_events;
DeviceIntPtr dev;
ScreenPtr screen;
@ -499,35 +469,27 @@ void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int poin
return;
}
/* Handle fake click */
if (ev_type == ButtonPress && darwinFakeButtons && ev_button == 1) {
// Mimic multi-button mouse with modifier-clicks
// If both sets of modifiers are pressed,
// button 2 is clicked.
if ((old_flags & darwinFakeMouse2Mask) == darwinFakeMouse2Mask) {
DarwinSimulateMouseClick(pointer_x, pointer_y, pressure,
tilt_x, tilt_y, 2, darwinFakeMouse2Mask);
if(darwinFakeMouseButtonDown != 0) {
/* We're currently "down" with another button, so release it first */
DarwinSendPointerEvents(ButtonRelease, darwinFakeMouseButtonDown, pointer_x, pointer_y, pressure, tilt_x, tilt_y);
darwinFakeMouseButtonDown=0;
}
if ((modifier_flags & darwinFakeMouse2Mask) == darwinFakeMouse2Mask) {
ev_button = 2;
darwinFakeMouseButtonDown = 2;
darwinFakeMouseButtonMask = darwinFakeMouse2Mask;
return;
} else if ((old_flags & darwinFakeMouse3Mask) == darwinFakeMouse3Mask) {
DarwinSimulateMouseClick(pointer_x, pointer_y, pressure,
tilt_x, tilt_y, 3, darwinFakeMouse3Mask);
} else if ((modifier_flags & darwinFakeMouse3Mask) == darwinFakeMouse3Mask) {
ev_button = 3;
darwinFakeMouseButtonDown = 3;
darwinFakeMouseButtonMask = darwinFakeMouse3Mask;
return;
}
}
if (ev_type == ButtonRelease && darwinFakeButtons && darwinFakeMouseButtonDown) {
// If last mousedown was a fake click, don't check for
// mouse modifiers here. The user may have released the
// modifiers before the mouse button.
ev_button = darwinFakeMouseButtonDown;
darwinFakeMouseButtonDown = 0;
// Bring modifiers back up to date
DarwinUpdateModifiers(KeyPress, darwinFakeMouseButtonMask & old_flags);
darwinFakeMouseButtonMask = 0;
return;
if (ev_type == ButtonRelease && ev_button == 1) {
if(darwinFakeMouseButtonDown) {
ev_button = darwinFakeMouseButtonDown;
darwinFakeMouseButtonDown = 0;
}
}
DarwinPrepareValuators(valuators, screen, pointer_x, pointer_y, pressure, tilt_x, tilt_y);
@ -547,7 +509,7 @@ void DarwinSendKeyboardEvents(int ev_type, int keycode) {
return;
}
if (old_flags == 0 && darwinSyncKeymap && darwinKeymapFile == NULL) {
if (modifier_flags == 0 && darwinSyncKeymap && darwinKeymapFile == NULL) {
/* See if keymap has changed. */
static unsigned int last_seed;
@ -627,9 +589,9 @@ void DarwinSendScrollEvents(float count_x, float count_y,
/* Send the appropriate KeyPress/KeyRelease events to GetKeyboardEvents to
reflect changing modifier flags (alt, control, meta, etc) */
void DarwinUpdateModKeys(int flags) {
DarwinUpdateModifiers(KeyRelease, old_flags & ~flags);
DarwinUpdateModifiers(KeyPress, ~old_flags & flags);
old_flags = flags;
DarwinUpdateModifiers(KeyRelease, modifier_flags & ~flags);
DarwinUpdateModifiers(KeyPress, ~modifier_flags & flags);
modifier_flags = flags;
}
/*

View file

@ -54,7 +54,6 @@ extern char *display;
extern int defaultBackingStore;
extern Bool disableBackingStore;
extern Bool enableBackingStore;
extern Bool disableSaveUnders;
extern Bool PartialNetwork;
#ifndef NOLOGOHACK
extern int logoScreenSaver;

View file

@ -257,25 +257,6 @@ typedef struct _FocusSemaphores {
char focusinout[(MAX_DEVICES + 7)/8];
} FocusSemaphoresRec, *FocusSemaphoresPtr;
/*
* this is the configuration parameter "NO_BACK_SAVE"
* it means that any existant backing store should not
* be used to implement save unders.
*/
#ifndef NO_BACK_SAVE
#define DO_SAVE_UNDERS(pWin) ((pWin)->drawable.pScreen->saveUnderSupport ==\
USE_DIX_SAVE_UNDERS)
/*
* saveUnderSupport is set to this magic value when using DIXsaveUnders
*/
#define USE_DIX_SAVE_UNDERS 0x40
#endif
extern int numSaveUndersViewable;
extern int deltaSaveUndersViewable;
#ifdef XEVIE
extern WindowPtr xeviewin;
#endif

10
mi/mi.h
View file

@ -485,16 +485,6 @@ extern void miClearToBackground(
Bool /*generateExposures*/
);
extern Bool miChangeSaveUnder(
WindowPtr /*pWin*/,
WindowPtr /*first*/
);
extern void miPostChangeSaveUnder(
WindowPtr /*pWin*/,
WindowPtr /*pFirst*/
);
extern void miMarkWindow(
WindowPtr /*pWin*/
);

View file

@ -547,8 +547,8 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
draw_x_off = drawable->x;
draw_y_off = drawable->y;
tile_x_off = 0;
tile_y_off = 0;
tile_x_off = pWin->drawable.x - draw_x_off;
tile_y_off = pWin->drawable.y - draw_y_off;
fill = pWin->background;
switch (pWin->backgroundState) {
case None:

View file

@ -929,9 +929,6 @@ miOverlayMoveWindow(
short bw;
RegionRec overReg, underReg;
DDXPointRec oldpt;
#ifdef DO_SAVE_UNDERS
Bool dosave = FALSE;
#endif
if (!(pParent = pWin->parent))
return ;
@ -969,10 +966,6 @@ miOverlayMoveWindow(
miOverlayScreenPtr pPriv = MIOVERLAY_GET_SCREEN_PRIVATE(pScreen);
(*pScreen->MarkOverlappedWindows) (pWin, windowToValidate, NULL);
#ifdef DO_SAVE_UNDERS
if (DO_SAVE_UNDERS(pWin))
dosave = (*pScreen->ChangeSaveUnder)(pWin, windowToValidate);
#endif /* DO_SAVE_UNDERS */
(*pScreen->ValidateTree)(pWin->parent, NullWindow, kind);
if(REGION_NOTEMPTY(pScreen, &underReg)) {
@ -987,10 +980,6 @@ miOverlayMoveWindow(
REGION_UNINIT(pScreen, &overReg);
(*pScreen->HandleExposures)(pWin->parent);
#ifdef DO_SAVE_UNDERS
if (dosave)
(*pScreen->PostChangeSaveUnder)(pWin, windowToValidate);
#endif /* DO_SAVE_UNDERS */
if (pScreen->PostValidateTree)
(*pScreen->PostValidateTree)(pWin->parent, NullWindow, kind);
}
@ -1147,9 +1136,6 @@ miOverlayResizeWindow(
RegionPtr borderVisible2 = NullRegion;
Bool shrunk = FALSE; /* shrunk in an inner dimension */
Bool moved = FALSE; /* window position changed */
#ifdef DO_SAVE_UNDERS
Bool dosave = FALSE;
#endif
Bool doUnderlay;
/* if this is a root window, can't be resized */
@ -1279,10 +1265,6 @@ miOverlayResizeWindow(
if(pTree)
pTree->valdata->borderVisible = borderVisible2;
#ifdef DO_SAVE_UNDERS
if (DO_SAVE_UNDERS(pWin))
dosave = (*pScreen->ChangeSaveUnder)(pWin, pFirstChange);
#endif /* DO_SAVE_UNDERS */
(*pScreen->ValidateTree)(pWin->parent, pFirstChange, VTOther);
/*
@ -1504,10 +1486,6 @@ miOverlayResizeWindow(
if (destClip2)
REGION_DESTROY(pScreen, destClip2);
(*pScreen->HandleExposures)(pWin->parent);
#ifdef DO_SAVE_UNDERS
if (dosave)
(*pScreen->PostChangeSaveUnder)(pWin, pFirstChange);
#endif /* DO_SAVE_UNDERS */
if (pScreen->PostValidateTree)
(*pScreen->PostValidateTree)(pWin->parent, pFirstChange, VTOther);
}
@ -1521,9 +1499,6 @@ miOverlaySetShape(WindowPtr pWin)
{
Bool WasViewable = (Bool)(pWin->viewable);
ScreenPtr pScreen = pWin->drawable.pScreen;
#ifdef DO_SAVE_UNDERS
Bool dosave = FALSE;
#endif
if (WasViewable) {
(*pScreen->MarkOverlappedWindows)(pWin, pWin, NULL);
@ -1556,20 +1531,12 @@ miOverlaySetShape(WindowPtr pWin)
if (WasViewable) {
(*pScreen->MarkOverlappedWindows)(pWin, pWin, NULL);
#ifdef DO_SAVE_UNDERS
if (DO_SAVE_UNDERS(pWin))
dosave = (*pScreen->ChangeSaveUnder)(pWin, pWin);
#endif /* DO_SAVE_UNDERS */
(*pScreen->ValidateTree)(pWin->parent, NullWindow, VTOther);
}
if (WasViewable) {
(*pScreen->HandleExposures)(pWin->parent);
#ifdef DO_SAVE_UNDERS
if (dosave)
(*pScreen->PostChangeSaveUnder)(pWin, pWin);
#endif /* DO_SAVE_UNDERS */
if (pScreen->PostValidateTree)
(*pScreen->PostValidateTree)(pWin->parent, NullWindow, VTOther);
}
@ -1589,9 +1556,6 @@ miOverlayChangeBorderWidth(
ScreenPtr pScreen;
Bool WasViewable = (Bool)(pWin->viewable);
Bool HadBorder;
#ifdef DO_SAVE_UNDERS
Bool dosave = FALSE;
#endif
oldwidth = wBorderWidth (pWin);
if (oldwidth == width)
@ -1625,17 +1589,9 @@ miOverlayChangeBorderWidth(
}
}
}
#ifdef DO_SAVE_UNDERS
if (DO_SAVE_UNDERS(pWin))
dosave = (*pScreen->ChangeSaveUnder)(pWin, pWin->nextSib);
#endif /* DO_SAVE_UNDERS */
(*pScreen->ValidateTree)(pWin->parent, pWin, VTOther);
(*pScreen->HandleExposures)(pWin->parent);
#ifdef DO_SAVE_UNDERS
if (dosave)
(*pScreen->PostChangeSaveUnder)(pWin, pWin->nextSib);
#endif /* DO_SAVE_UNDERS */
if (pScreen->PostValidateTree)
(*pScreen->PostValidateTree)(pWin->parent, pWin, VTOther);
}

View file

@ -257,8 +257,8 @@ miScreenInit(
pScreen->wakeupData = (pointer)0;
pScreen->MarkWindow = miMarkWindow;
pScreen->MarkOverlappedWindows = miMarkOverlappedWindows;
pScreen->ChangeSaveUnder = miChangeSaveUnder;
pScreen->PostChangeSaveUnder = miPostChangeSaveUnder;
pScreen->ChangeSaveUnder = NULL;
pScreen->PostChangeSaveUnder = NULL;
pScreen->MoveWindow = miMoveWindow;
pScreen->ResizeWindow = miSlideAndSizeWindow;
pScreen->GetLayerWindow = miGetLayerWindow;

View file

@ -4,7 +4,6 @@
* machine independent software sprite routines
*/
/*
Copyright 1989, 1998 The Open Group
@ -72,6 +71,39 @@ in this Software without prior written authorization from The Open Group.
(miCursorInfoPtr)dixLookupPrivate(&dev->devPrivates, miSpriteDevPrivatesKey) : \
(miCursorInfoPtr)dixLookupPrivate(&dev->u.master->devPrivates, miSpriteDevPrivatesKey))
static int damageRegister = 0;
static void
miSpriteDisableDamage(ScreenPtr pScreen, miSpriteScreenPtr pScreenPriv)
{
if (damageRegister) {
DamageUnregister (&(pScreen->GetScreenPixmap(pScreen)->drawable),
pScreenPriv->pDamage);
damageRegister = 0;
}
}
static void
miSpriteEnableDamage(ScreenPtr pScreen, miSpriteScreenPtr pScreenPriv)
{
if (!damageRegister) {
damageRegister = 1;
DamageRegister (&(pScreen->GetScreenPixmap(pScreen)->drawable),
pScreenPriv->pDamage);
}
}
static void
miSpriteIsUp(miCursorInfoPtr pDevCursor)
{
pDevCursor->isUp = TRUE;
}
static void
miSpriteIsDown(miCursorInfoPtr pDevCursor)
{
pDevCursor->isUp = FALSE;
}
/*
* screen wrappers
@ -749,7 +781,7 @@ miSpriteSetCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
)
{
DamageDrawInternal (pScreen, TRUE);
miSpriteIsUpFALSE (pScreen, pScreenPriv);
miSpriteIsDown(pCursorInfo);
if (!(sx >= pointer->saved.x1 &&
sx + (int)pCursor->bits->width < pointer->saved.x2
&& sy >= pointer->saved.y1 &&
@ -786,7 +818,7 @@ miSpriteSetCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
sy - pointer->saved.y1,
pointer->colors[SOURCE_COLOR].pixel,
pointer->colors[MASK_COLOR].pixel);
miSpriteIsUpTRUE (pScreen, pScreenPriv);
miSpriteIsUp(pCursorInfo);
DamageDrawInternal (pScreen, FALSE);
}
else
@ -893,7 +925,7 @@ miSpriteRemoveCursor (DeviceIntPtr pDev, ScreenPtr pScreen)
miSpriteScreenKey);
pCursorInfo = MISPRITE(pDev);
miSpriteIsUpFALSE (pCursorInfo, pScreen, pScreenPriv);
miSpriteIsDown(pCursorInfo);
pCursorInfo->pCacheWin = NullWindow;
miSpriteDisableDamage(pScreen, pScreenPriv);
if (!(*pScreenPriv->funcs->RestoreUnderCursor) (pDev,
@ -905,7 +937,7 @@ miSpriteRemoveCursor (DeviceIntPtr pDev, ScreenPtr pScreen)
pCursorInfo->saved.y2 -
pCursorInfo->saved.y1))
{
miSpriteIsUpTRUE (pCursorInfo, pScreen, pScreenPriv);
miSpriteIsUp(pCursorInfo);
}
miSpriteEnableDamage(pScreen, pScreenPriv);
DamageDrawInternal (pScreen, FALSE);
@ -993,7 +1025,7 @@ miSpriteRestoreCursor (DeviceIntPtr pDev, ScreenPtr pScreen)
pScreenPriv->colors[SOURCE_COLOR].pixel,
pScreenPriv->colors[MASK_COLOR].pixel))
{
miSpriteIsUpTRUE (pCursorInfo, pScreen, pScreenPriv);
miSpriteIsUp(pCursorInfo);
pCursorInfo->pScreen = pScreen;
}
miSpriteEnableDamage(pScreen, pScreenPriv);

View file

@ -92,26 +92,6 @@ typedef struct {
#define SOURCE_COLOR 0
#define MASK_COLOR 1
static int damageRegister = 0;
#define miSpriteDisableDamage(pScreen, pScreenPriv) \
if (damageRegister) { \
DamageUnregister (&(*pScreen->GetScreenPixmap) (pScreen)->drawable, pScreenPriv->pDamage); \
damageRegister = 0; \
}
#define miSpriteEnableDamage(pScreen, pScreenPriv) \
if (!damageRegister) {\
damageRegister = 1; \
DamageRegister (&(*pScreen->GetScreenPixmap) (pScreen)->drawable, pScreenPriv->pDamage); \
}
#define miSpriteIsUpTRUE(pDevCursor, pScreen, pScreenPriv) if (!pDevCursor->isUp) \
pDevCursor->isUp = TRUE;
#define miSpriteIsUpFALSE(pDevCursor, pScreen, pScreenPriv) if (pDevCursor->isUp) \
pDevCursor->isUp = FALSE;
/*
* Overlap BoxPtr and Box elements
*/

View file

@ -122,209 +122,6 @@ miClearToBackground(WindowPtr pWin,
REGION_DESTROY(pScreen, pBSReg);
}
/*
* For SaveUnders using backing-store. The idea is that when a window is mapped
* with saveUnder set TRUE, any windows it obscures will have its backing
* store turned on setting the DIXsaveUnder bit,
* The backing-store code must be written to allow for this
*/
/*-
*-----------------------------------------------------------------------
* miCheckSubSaveUnder --
* Check all the inferiors of a window for coverage by saveUnder
* windows. Called from ChangeSaveUnder and CheckSaveUnder.
* This code is very inefficient.
*
* Results:
* TRUE if any windows need to have backing-store removed.
*
* Side Effects:
* Windows may have backing-store turned on or off.
*
*-----------------------------------------------------------------------
*/
static Bool
miCheckSubSaveUnder(
WindowPtr pParent, /* Parent to check */
WindowPtr pFirst, /* first reconfigured window */
RegionPtr pRegion) /* Initial area obscured by saveUnder */
{
WindowPtr pChild; /* Current child */
ScreenPtr pScreen; /* Screen to use */
RegionRec SubRegion; /* Area of children obscured */
Bool res = FALSE; /* result */
Bool subInited=FALSE;/* SubRegion initialized */
pScreen = pParent->drawable.pScreen;
if ( (pChild = pParent->firstChild) )
{
/*
* build region above first changed window
*/
for (; pChild != pFirst; pChild = pChild->nextSib)
if (pChild->viewable && pChild->saveUnder)
REGION_UNION(pScreen, pRegion, pRegion, &pChild->borderSize);
/*
* check region below and including first changed window
*/
for (; pChild; pChild = pChild->nextSib)
{
if (pChild->viewable)
{
/*
* don't save under nephew/niece windows;
* use a separate region
*/
if (pChild->firstChild)
{
if (!subInited)
{
REGION_NULL(pScreen, &SubRegion);
subInited = TRUE;
}
REGION_COPY(pScreen, &SubRegion, pRegion);
res |= miCheckSubSaveUnder(pChild, pChild->firstChild,
&SubRegion);
}
else
{
res |= miCheckSubSaveUnder(pChild, pChild->firstChild,
pRegion);
}
if (pChild->saveUnder)
REGION_UNION(pScreen, pRegion, pRegion, &pChild->borderSize);
}
}
if (subInited)
REGION_UNINIT(pScreen, &SubRegion);
}
/*
* Check the state of this window. DIX save unders are
* enabled for viewable windows with some client expressing
* exposure interest and which intersect the save under region
*/
if (pParent->viewable &&
((pParent->eventMask | wOtherEventMasks(pParent)) & ExposureMask) &&
REGION_NOTEMPTY(pScreen, &pParent->borderSize) &&
RECT_IN_REGION(pScreen, pRegion, REGION_EXTENTS(pScreen,
&pParent->borderSize)) != rgnOUT)
{
if (!pParent->DIXsaveUnder)
{
pParent->DIXsaveUnder = TRUE;
(*pScreen->ChangeWindowAttributes) (pParent, CWBackingStore);
}
}
else
{
if (pParent->DIXsaveUnder)
{
res = TRUE;
pParent->DIXsaveUnder = FALSE;
}
}
return res;
}
/*-
*-----------------------------------------------------------------------
* miChangeSaveUnder --
* Change the save-under state of a tree of windows. Called when
* a window with saveUnder TRUE is mapped/unmapped/reconfigured.
*
* Results:
* TRUE if any windows need to have backing-store removed (which
* means that PostChangeSaveUnder needs to be called later to
* finish the job).
*
* Side Effects:
* Windows may have backing-store turned on or off.
*
*-----------------------------------------------------------------------
*/
Bool
miChangeSaveUnder(
WindowPtr pWin,
WindowPtr first /* First window to check.
* Used when pWin was restacked */
)
{
RegionRec rgn; /* Area obscured by saveUnder windows */
ScreenPtr pScreen;
Bool res;
if (!deltaSaveUndersViewable && !numSaveUndersViewable)
return FALSE;
numSaveUndersViewable += deltaSaveUndersViewable;
deltaSaveUndersViewable = 0;
pScreen = pWin->drawable.pScreen;
REGION_NULL(pScreen, &rgn);
res = miCheckSubSaveUnder (pWin->parent,
pWin->saveUnder ? first : pWin->nextSib,
&rgn);
REGION_UNINIT(pScreen, &rgn);
return res;
}
/*-
*-----------------------------------------------------------------------
* miPostChangeSaveUnder --
* Actually turn backing-store off for those windows that no longer
* need to have it on.
*
* Results:
* None.
*
* Side Effects:
* Backing-store and SAVE_UNDER_CHANGE_BIT are turned off for those
* windows affected.
*
*-----------------------------------------------------------------------
*/
void
miPostChangeSaveUnder(WindowPtr pWin, WindowPtr pFirst)
{
WindowPtr pParent, pChild;
ChangeWindowAttributesProcPtr ChangeWindowAttributes;
if (!(pParent = pWin->parent))
return;
ChangeWindowAttributes = pParent->drawable.pScreen->ChangeWindowAttributes;
if (!pParent->DIXsaveUnder &&
(pParent->backingStore == NotUseful) && pParent->backStorage)
(*ChangeWindowAttributes)(pParent, CWBackingStore);
if (!(pChild = pFirst))
return;
while (1)
{
if (!pChild->DIXsaveUnder &&
(pChild->backingStore == NotUseful) && pChild->backStorage)
(*ChangeWindowAttributes)(pChild, CWBackingStore);
if (pChild->firstChild)
{
pChild = pChild->firstChild;
continue;
}
while (!pChild->nextSib)
{
pChild = pChild->parent;
if (pChild == pParent)
return;
}
pChild = pChild->nextSib;
}
}
void
miMarkWindow(WindowPtr pWin)
{
@ -474,9 +271,6 @@ miMoveWindow(WindowPtr pWin, int x, int y, WindowPtr pNextSib, VTKind kind)
Bool anyMarked = FALSE;
ScreenPtr pScreen;
WindowPtr windowToValidate;
#ifdef DO_SAVE_UNDERS
Bool dosave = FALSE;
#endif
WindowPtr pLayerWin;
/* if this is a root window, can't be moved */
@ -516,12 +310,6 @@ miMoveWindow(WindowPtr pWin, int x, int y, WindowPtr pNextSib, VTKind kind)
anyMarked |= (*pScreen->MarkOverlappedWindows)
(pWin, pLayerWin, (WindowPtr *)NULL);
#ifdef DO_SAVE_UNDERS
if (DO_SAVE_UNDERS(pWin))
{
dosave = (*pScreen->ChangeSaveUnder)(pLayerWin, windowToValidate);
}
#endif /* DO_SAVE_UNDERS */
if (anyMarked)
{
@ -531,10 +319,6 @@ miMoveWindow(WindowPtr pWin, int x, int y, WindowPtr pNextSib, VTKind kind)
/* XXX need to retile border if ParentRelative origin */
(*pScreen->HandleExposures)(pLayerWin->parent);
}
#ifdef DO_SAVE_UNDERS
if (dosave)
(*pScreen->PostChangeSaveUnder)(pLayerWin, windowToValidate);
#endif /* DO_SAVE_UNDERS */
if (anyMarked && pScreen->PostValidateTree)
(*pScreen->PostValidateTree)(pLayerWin->parent, NullWindow, kind);
}
@ -606,9 +390,6 @@ miSlideAndSizeWindow(WindowPtr pWin,
RegionPtr borderVisible = NullRegion; /* visible area of the border */
Bool shrunk = FALSE; /* shrunk in an inner dimension */
Bool moved = FALSE; /* window position changed */
#ifdef DO_SAVE_UNDERS
Bool dosave = FALSE;
#endif
WindowPtr pLayerWin;
/* if this is a root window, can't be resized */
@ -721,12 +502,6 @@ miSlideAndSizeWindow(WindowPtr pWin,
pWin->valdata->before.borderVisible = borderVisible;
}
#ifdef DO_SAVE_UNDERS
if (DO_SAVE_UNDERS(pWin))
{
dosave = (*pScreen->ChangeSaveUnder)(pLayerWin, pFirstChange);
}
#endif /* DO_SAVE_UNDERS */
if (anyMarked)
(*pScreen->ValidateTree)(pLayerWin->parent, pFirstChange, VTOther);
@ -889,12 +664,6 @@ miSlideAndSizeWindow(WindowPtr pWin,
REGION_DESTROY(pScreen, destClip);
if (anyMarked)
(*pScreen->HandleExposures)(pLayerWin->parent);
#ifdef DO_SAVE_UNDERS
if (dosave)
{
(*pScreen->PostChangeSaveUnder)(pLayerWin, pFirstChange);
}
#endif /* DO_SAVE_UNDERS */
if (anyMarked && pScreen->PostValidateTree)
(*pScreen->PostValidateTree)(pLayerWin->parent, pFirstChange,
VTOther);
@ -922,9 +691,6 @@ miSetShape(WindowPtr pWin)
Bool WasViewable = (Bool)(pWin->viewable);
ScreenPtr pScreen = pWin->drawable.pScreen;
Bool anyMarked = FALSE;
#ifdef DO_SAVE_UNDERS
Bool dosave = FALSE;
#endif
WindowPtr pLayerWin;
if (WasViewable)
@ -956,12 +722,6 @@ miSetShape(WindowPtr pWin)
anyMarked |= (*pScreen->MarkOverlappedWindows)(pWin, pWin,
(WindowPtr *)NULL);
#ifdef DO_SAVE_UNDERS
if (DO_SAVE_UNDERS(pWin))
{
dosave = (*pScreen->ChangeSaveUnder)(pLayerWin, pLayerWin);
}
#endif /* DO_SAVE_UNDERS */
if (anyMarked)
(*pScreen->ValidateTree)(pLayerWin->parent, NullWindow, VTOther);
@ -971,10 +731,6 @@ miSetShape(WindowPtr pWin)
{
if (anyMarked)
(*pScreen->HandleExposures)(pLayerWin->parent);
#ifdef DO_SAVE_UNDERS
if (dosave)
(*pScreen->PostChangeSaveUnder)(pLayerWin, pLayerWin);
#endif /* DO_SAVE_UNDERS */
if (anyMarked && pScreen->PostValidateTree)
(*pScreen->PostValidateTree)(pLayerWin->parent, NullWindow, VTOther);
}
@ -993,9 +749,6 @@ miChangeBorderWidth(WindowPtr pWin, unsigned int width)
ScreenPtr pScreen;
Bool WasViewable = (Bool)(pWin->viewable);
Bool HadBorder;
#ifdef DO_SAVE_UNDERS
Bool dosave = FALSE;
#endif
WindowPtr pLayerWin;
oldwidth = wBorderWidth (pWin);
@ -1028,22 +781,12 @@ miChangeBorderWidth(WindowPtr pWin, unsigned int width)
pWin->valdata->before.borderVisible = borderVisible;
}
}
#ifdef DO_SAVE_UNDERS
if (DO_SAVE_UNDERS(pWin))
{
dosave = (*pScreen->ChangeSaveUnder)(pLayerWin, pWin->nextSib);
}
#endif /* DO_SAVE_UNDERS */
if (anyMarked)
{
(*pScreen->ValidateTree)(pLayerWin->parent, pLayerWin, VTOther);
(*pScreen->HandleExposures)(pLayerWin->parent);
}
#ifdef DO_SAVE_UNDERS
if (dosave)
(*pScreen->PostChangeSaveUnder)(pLayerWin, pWin->nextSib);
#endif /* DO_SAVE_UNDERS */
if (anyMarked && pScreen->PostValidateTree)
(*pScreen->PostValidateTree)(pLayerWin->parent, pLayerWin,
VTOther);

View file

@ -878,6 +878,10 @@ EstablishNewConnections(ClientPtr clientUnused, pointer closure)
ErrorConnMax(new_trans_conn);
_XSERVTransClose(new_trans_conn);
}
if(trans_conn->flags & TRANS_NOXAUTH)
new_trans_conn->flags = new_trans_conn->flags | TRANS_NOXAUTH;
}
#ifndef WIN32
}

View file

@ -534,7 +534,6 @@ void UseMsg(void)
ErrorF("-render [default|mono|gray|color] set render color alloc policy\n");
#endif
ErrorF("-s # screen-saver timeout (minutes)\n");
ErrorF("-su disable any save under support\n");
ErrorF("-t # mouse threshold (pixels)\n");
ErrorF("-terminate terminate at server reset\n");
ErrorF("-to # connection time out\n");
@ -837,8 +836,6 @@ ProcessCommandLine(int argc, char *argv[])
else
UseMsg();
}
else if ( strcmp( argv[i], "-su") == 0)
disableSaveUnders = TRUE;
else if ( strcmp( argv[i], "-t") == 0)
{
if(++i < argc)