mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-02-15 13:50:33 +01:00
Merge commit 'origin/master' into transform-proposal
This commit is contained in:
commit
501bdedc11
29 changed files with 299 additions and 176 deletions
|
|
@ -944,6 +944,12 @@ int __glXDisp_GetVisualConfigs(__GLXclientState *cl, GLbyte *pc)
|
|||
buf[p++] = modes->transparentAlpha;
|
||||
buf[p++] = GLX_TRANSPARENT_INDEX_VALUE;
|
||||
buf[p++] = modes->transparentIndex;
|
||||
buf[p++] = 0;
|
||||
buf[p++] = 0;
|
||||
buf[p++] = 0;
|
||||
buf[p++] = 0;
|
||||
buf[p++] = 0;
|
||||
buf[p++] = 0;
|
||||
|
||||
if (client->swapped) {
|
||||
__GLX_SWAP_INT_ARRAY(buf, __GLX_TOTAL_CONFIG);
|
||||
|
|
|
|||
|
|
@ -1308,6 +1308,13 @@ if test "x$XORG" = xyes -o "x$XGL" = xyes; then
|
|||
XORG_LIBS="$COMPOSITE_LIB $FIXES_LIB $XEXTXORG_LIB $GLX_LIBS $RENDER_LIB $RANDR_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XPSTUBS_LIB $SELINUX_LIB"
|
||||
|
||||
PKG_CHECK_MODULES([PCIACCESS], [pciaccess >= 0.8.0])
|
||||
SAVE_LIBS=$LIBS
|
||||
SAVE_CFLAGS=$CFLAGS
|
||||
CFLAGS=$PCIACCESS_CFLAGS
|
||||
LIBS=$PCIACCESS_LIBS
|
||||
AC_CHECK_FUNCS([pci_system_init_dev_mem])
|
||||
LIBS=$SAVE_LIBS
|
||||
CFLAGS=$SAVE_CFLAGS
|
||||
XORG_SYS_LIBS="$XORG_SYS_LIBS $PCIACCESS_LIBS $DLOPEN_LIBS $GLX_SYS_LIBS"
|
||||
XORG_CFLAGS="$XORG_CFLAGS $PCIACCESS_CFLAGS"
|
||||
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ if XEPHYR_HAS_DRI
|
|||
|
||||
libxephyr_hostdri_a_SOURCES= \
|
||||
ephyrdriext.c \
|
||||
ephyrdriext.h \
|
||||
ephyrdri.c \
|
||||
ephyrdri.h \
|
||||
XF86dri.c \
|
||||
|
|
|
|||
|
|
@ -385,9 +385,8 @@ Bool XF86DRICreateContext(dpy, screen, visual, context, hHWContext)
|
|||
context, hHWContext );
|
||||
}
|
||||
|
||||
GLboolean XF86DRIDestroyContext( __DRInativeDisplay * ndpy, int screen, __DRIid context)
|
||||
GLboolean XF86DRIDestroyContext( Display *dpy, int screen, XID context)
|
||||
{
|
||||
Display * const dpy = (Display *) ndpy;
|
||||
XExtDisplayInfo *info = find_display (dpy);
|
||||
xXF86DRIDestroyContextReq *req;
|
||||
|
||||
|
|
@ -407,10 +406,9 @@ GLboolean XF86DRIDestroyContext( __DRInativeDisplay * ndpy, int screen, __DRIid
|
|||
}
|
||||
|
||||
GLboolean
|
||||
XF86DRICreateDrawable (__DRInativeDisplay * ndpy, int screen,
|
||||
__DRIid drawable, drm_drawable_t * hHWDrawable)
|
||||
XF86DRICreateDrawable (Display *dpy, int screen,
|
||||
XID drawable, drm_drawable_t * hHWDrawable)
|
||||
{
|
||||
Display * const dpy = (Display *) ndpy;
|
||||
XExtDisplayInfo *info = find_display (dpy);
|
||||
xXF86DRICreateDrawableReply rep;
|
||||
xXF86DRICreateDrawableReq *req;
|
||||
|
|
@ -437,16 +435,36 @@ XF86DRICreateDrawable (__DRInativeDisplay * ndpy, int screen,
|
|||
return True;
|
||||
}
|
||||
|
||||
GLboolean XF86DRIDestroyDrawable( __DRInativeDisplay * ndpy, int screen,
|
||||
__DRIid drawable )
|
||||
static int noopErrorHandler(Display *dpy, XErrorEvent *xerr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
GLboolean XF86DRIDestroyDrawable( Display *dpy, int screen,
|
||||
XID drawable )
|
||||
{
|
||||
Display * const dpy = (Display *) ndpy;
|
||||
XExtDisplayInfo *info = find_display (dpy);
|
||||
xXF86DRIDestroyDrawableReq *req;
|
||||
int (*oldXErrorHandler)(Display *, XErrorEvent *);
|
||||
|
||||
TRACE("DestroyDrawable...");
|
||||
XF86DRICheckExtension (dpy, info, False);
|
||||
|
||||
/* This is called from the DRI driver, which used call it like this
|
||||
*
|
||||
* if (windowExists(drawable))
|
||||
* destroyDrawable(drawable);
|
||||
*
|
||||
* which is a textbook race condition - the window may disappear
|
||||
* from the server between checking for its existance and
|
||||
* destroying it. Instead we change the semantics of
|
||||
* __DRIinterfaceMethodsRec::destroyDrawable() to succeed even if
|
||||
* the windows is gone, by wrapping the destroy call in an error
|
||||
* handler. */
|
||||
|
||||
XSync(dpy, GL_FALSE);
|
||||
oldXErrorHandler = XSetErrorHandler(noopErrorHandler);
|
||||
|
||||
LockDisplay(dpy);
|
||||
GetReq(XF86DRIDestroyDrawable, req);
|
||||
req->reqType = info->codes->major_opcode;
|
||||
|
|
@ -455,6 +473,9 @@ GLboolean XF86DRIDestroyDrawable( __DRInativeDisplay * ndpy, int screen,
|
|||
req->drawable = drawable;
|
||||
UnlockDisplay(dpy);
|
||||
SyncHandle();
|
||||
|
||||
XSetErrorHandler(oldXErrorHandler);
|
||||
|
||||
TRACE("DestroyDrawable... return True");
|
||||
return True;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -891,9 +891,12 @@ ephyrPoll(void)
|
|||
continue;
|
||||
}
|
||||
{
|
||||
if (ephyrCurScreen != ev.data.mouse_motion.screen)
|
||||
if (ev.data.mouse_motion.screen >=0
|
||||
&& (ephyrCurScreen != ev.data.mouse_motion.screen))
|
||||
{
|
||||
EPHYR_LOG ("warping mouse cursor:%d\n", ephyrCurScreen) ;
|
||||
EPHYR_LOG ("warping mouse cursor. "
|
||||
"cur_screen%d, motion_screen:%d\n",
|
||||
ephyrCurScreen, ev.data.mouse_motion.screen) ;
|
||||
if (ev.data.mouse_motion.screen >= 0)
|
||||
{
|
||||
ephyrWarpCursor
|
||||
|
|
@ -904,11 +907,30 @@ ephyrPoll(void)
|
|||
}
|
||||
else
|
||||
{
|
||||
int x=0, y=0;
|
||||
#ifdef XEPHYR_DRI
|
||||
EphyrWindowPair *pair = NULL;
|
||||
#endif
|
||||
EPHYR_LOG ("enqueuing mouse motion:%d\n", ephyrCurScreen) ;
|
||||
KdEnqueuePointerEvent(ephyrMouse, mouseState,
|
||||
ev.data.mouse_motion.x,
|
||||
ev.data.mouse_motion.y,
|
||||
0);
|
||||
x = ev.data.mouse_motion.x;
|
||||
y = ev.data.mouse_motion.y;
|
||||
EPHYR_LOG ("initial (x,y):(%d,%d)\n", x, y) ;
|
||||
#ifdef XEPHYR_DRI
|
||||
EPHYR_LOG ("is this window peered by a gl drawable ?\n") ;
|
||||
if (findWindowPairFromRemote (ev.data.mouse_motion.window,
|
||||
&pair))
|
||||
{
|
||||
EPHYR_LOG ("yes, it is peered\n") ;
|
||||
x += pair->local->drawable.x;
|
||||
y += pair->local->drawable.y;
|
||||
}
|
||||
else
|
||||
{
|
||||
EPHYR_LOG ("no, it is not peered\n") ;
|
||||
}
|
||||
EPHYR_LOG ("final (x,y):(%d,%d)\n", x, y) ;
|
||||
#endif
|
||||
KdEnqueuePointerEvent(ephyrMouse, mouseState, x, y, 0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -914,8 +914,9 @@ hostx_get_event(EphyrHostXEvent *ev)
|
|||
host_screen_from_window (xev.xmotion.window);
|
||||
|
||||
ev->type = EPHYR_EV_MOUSE_MOTION;
|
||||
ev->data.mouse_motion.x = xev.xmotion.x;
|
||||
ev->data.mouse_motion.x = xev.xmotion.x;
|
||||
ev->data.mouse_motion.y = xev.xmotion.y;
|
||||
ev->data.mouse_motion.window = xev.xmotion.window;
|
||||
ev->data.mouse_motion.screen = (host_screen ? host_screen->mynum : -1);
|
||||
}
|
||||
return 1;
|
||||
|
|
|
|||
|
|
@ -70,6 +70,7 @@ struct EphyrHostXEvent
|
|||
int x;
|
||||
int y;
|
||||
int screen;
|
||||
int window;
|
||||
} mouse_motion;
|
||||
|
||||
struct mouse_down {
|
||||
|
|
|
|||
|
|
@ -342,6 +342,17 @@ DRI2Connect(ScreenPtr pScreen, int *fd, const char **driverName,
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
Bool
|
||||
DRI2AuthConnection(ScreenPtr pScreen, drm_magic_t magic)
|
||||
{
|
||||
DRI2ScreenPtr ds = DRI2GetScreen(pScreen);
|
||||
|
||||
if (ds == NULL || drmAuthMagic(ds->fd, magic))
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
unsigned int
|
||||
DRI2GetPixmapHandle(PixmapPtr pPixmap, unsigned int *flags)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -58,6 +58,8 @@ Bool DRI2Connect(ScreenPtr pScreen,
|
|||
const char **driverName,
|
||||
unsigned int *sareaHandle);
|
||||
|
||||
Bool DRI2AuthConnection(ScreenPtr pScreen, drm_magic_t magic);
|
||||
|
||||
unsigned int DRI2GetPixmapHandle(PixmapPtr pPixmap,
|
||||
unsigned int *flags);
|
||||
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@
|
|||
#ifdef _X86EMU
|
||||
#include "x86emu/x86emui.h"
|
||||
#endif
|
||||
#include <pciaccess.h>
|
||||
|
||||
static int pciCfg1in(CARD16 addr, CARD32 *val);
|
||||
static int pciCfg1out(CARD16 addr, CARD32 val);
|
||||
|
|
@ -459,7 +460,43 @@ Mem_wl(CARD32 addr, CARD32 val)
|
|||
|
||||
static CARD32 PciCfg1Addr = 0;
|
||||
|
||||
#define OFFSET(Cfg1Addr) (Cfg1Addr & 0xff)
|
||||
#define PCI_OFFSET(x) ((x) & 0x000000ff)
|
||||
#define PCI_TAG(x) ((x) & 0xffffff00)
|
||||
|
||||
static struct pci_device*
|
||||
pci_device_for_cfg_address (CARD32 addr)
|
||||
{
|
||||
struct pci_device *dev = NULL;
|
||||
PCITAG tag = PCI_TAG(addr);
|
||||
struct pci_slot_match slot_match = {
|
||||
.domain = PCI_DOM_FROM_TAG(tag),
|
||||
.bus = PCI_BUS_NO_DOMAIN(PCI_BUS_FROM_TAG(tag)),
|
||||
.dev = PCI_DEV_FROM_TAG(tag),
|
||||
.func = PCI_FUNC_FROM_TAG(tag),
|
||||
.match_data = 0
|
||||
};
|
||||
|
||||
struct pci_device_iterator *iter =
|
||||
pci_slot_match_iterator_create (&slot_match);
|
||||
if (iter)
|
||||
dev = pci_device_next(iter);
|
||||
if (!dev) {
|
||||
char buf[128]; /* enough to store "%u@%u" */
|
||||
xf86FormatPciBusNumber(tag >> 16, buf);
|
||||
ErrorF("Failed to find device matching %s:%u:%u\n",
|
||||
buf, slot_match.dev, slot_match.func);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (pci_device_next(iter)) {
|
||||
char buf[128]; /* enough to store "%u@%u" */
|
||||
xf86FormatPciBusNumber(tag >> 16, buf);
|
||||
ErrorF("Multiple devices matching %s:%u:%u\n",
|
||||
buf, slot_match.dev, slot_match.func);
|
||||
}
|
||||
|
||||
return dev;
|
||||
}
|
||||
|
||||
static int
|
||||
pciCfg1in(CARD16 addr, CARD32 *val)
|
||||
|
|
@ -469,7 +506,8 @@ pciCfg1in(CARD16 addr, CARD32 *val)
|
|||
return 1;
|
||||
}
|
||||
if (addr == 0xCFC) {
|
||||
pci_device_cfg_read_u32(Int10Current->dev, val, OFFSET(PciCfg1Addr));
|
||||
pci_device_cfg_read_u32(pci_device_for_cfg_address(PciCfg1Addr),
|
||||
val, PCI_OFFSET(PciCfg1Addr));
|
||||
if (PRINT_PORT && DEBUG_IO_TRACE())
|
||||
ErrorF(" cfg_inl(%#x) = %8.8x\n", PciCfg1Addr, *val);
|
||||
return 1;
|
||||
|
|
@ -487,7 +525,8 @@ pciCfg1out(CARD16 addr, CARD32 val)
|
|||
if (addr == 0xCFC) {
|
||||
if (PRINT_PORT && DEBUG_IO_TRACE())
|
||||
ErrorF(" cfg_outl(%#x, %8.8x)\n", PciCfg1Addr, val);
|
||||
pci_device_cfg_write_u32(Int10Current->dev, val, OFFSET(PciCfg1Addr));
|
||||
pci_device_cfg_write_u32(pci_device_for_cfg_address(PciCfg1Addr),
|
||||
val, PCI_OFFSET(PciCfg1Addr));
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
|
|
@ -506,7 +545,8 @@ pciCfg1inw(CARD16 addr, CARD16 *val)
|
|||
if ((addr >= 0xCFC) && (addr <= 0xCFF)) {
|
||||
const unsigned offset = addr - 0xCFC;
|
||||
|
||||
pci_device_cfg_read_u16(Int10Current->dev, val, OFFSET(PciCfg1Addr) + offset);
|
||||
pci_device_cfg_read_u16(pci_device_for_cfg_address(PciCfg1Addr),
|
||||
val, PCI_OFFSET(PciCfg1Addr) + offset);
|
||||
if (PRINT_PORT && DEBUG_IO_TRACE())
|
||||
ErrorF(" cfg_inw(%#x) = %4.4x\n", PciCfg1Addr + offset, *val);
|
||||
return 1;
|
||||
|
|
@ -530,7 +570,8 @@ pciCfg1outw(CARD16 addr, CARD16 val)
|
|||
|
||||
if (PRINT_PORT && DEBUG_IO_TRACE())
|
||||
ErrorF(" cfg_outw(%#x, %4.4x)\n", PciCfg1Addr + offset, val);
|
||||
pci_device_cfg_write_u16(Int10Current->dev, val, OFFSET(PciCfg1Addr) + offset);
|
||||
pci_device_cfg_write_u16(pci_device_for_cfg_address(PciCfg1Addr),
|
||||
val, PCI_OFFSET(PciCfg1Addr) + offset);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
|
|
@ -549,7 +590,8 @@ pciCfg1inb(CARD16 addr, CARD8 *val)
|
|||
if ((addr >= 0xCFC) && (addr <= 0xCFF)) {
|
||||
const unsigned offset = addr - 0xCFC;
|
||||
|
||||
pci_device_cfg_read_u8(Int10Current->dev, val, OFFSET(PciCfg1Addr) + offset);
|
||||
pci_device_cfg_read_u8(pci_device_for_cfg_address(PciCfg1Addr),
|
||||
val, PCI_OFFSET(PciCfg1Addr) + offset);
|
||||
if (PRINT_PORT && DEBUG_IO_TRACE())
|
||||
ErrorF(" cfg_inb(%#x) = %2.2x\n", PciCfg1Addr + offset, *val);
|
||||
return 1;
|
||||
|
|
@ -573,7 +615,8 @@ pciCfg1outb(CARD16 addr, CARD8 val)
|
|||
|
||||
if (PRINT_PORT && DEBUG_IO_TRACE())
|
||||
ErrorF(" cfg_outb(%#x, %2.2x)\n", PciCfg1Addr + offset, val);
|
||||
pci_device_cfg_write_u8(Int10Current->dev, val, OFFSET(PciCfg1Addr) + offset);
|
||||
pci_device_cfg_write_u8(pci_device_for_cfg_address(PciCfg1Addr),
|
||||
val, PCI_OFFSET(PciCfg1Addr) + offset);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -727,7 +727,12 @@ xf86CrtcCloseScreen (int index, ScreenPtr screen)
|
|||
/*
|
||||
* Called at ScreenInit time to set up
|
||||
*/
|
||||
_X_EXPORT Bool
|
||||
_X_EXPORT
|
||||
#ifdef RANDR_13_INTERFACE
|
||||
int
|
||||
#else
|
||||
Bool
|
||||
#endif
|
||||
xf86CrtcScreenInit (ScreenPtr screen)
|
||||
{
|
||||
ScrnInfoPtr scrn = xf86Screens[screen->myNum];
|
||||
|
|
@ -766,7 +771,11 @@ xf86CrtcScreenInit (ScreenPtr screen)
|
|||
config->CloseScreen = screen->CloseScreen;
|
||||
screen->CloseScreen = xf86CrtcCloseScreen;
|
||||
|
||||
#ifdef RANDR_13_INTERFACE
|
||||
return RANDR_INTERFACE_VERSION;
|
||||
#else
|
||||
return TRUE;
|
||||
#endif
|
||||
}
|
||||
|
||||
static DisplayModePtr
|
||||
|
|
@ -1713,14 +1722,19 @@ aspectMatch(float a, float b)
|
|||
}
|
||||
|
||||
static DisplayModePtr
|
||||
nextAspectMode(DisplayModePtr start, float aspect)
|
||||
nextAspectMode(xf86OutputPtr o, DisplayModePtr last, float aspect)
|
||||
{
|
||||
DisplayModePtr m = start;
|
||||
DisplayModePtr m = NULL;
|
||||
|
||||
if (!m)
|
||||
if (!o)
|
||||
return NULL;
|
||||
|
||||
for (m = m->next; m; m = m->next)
|
||||
if (!last)
|
||||
m = o->probed_modes;
|
||||
else
|
||||
m = last->next;
|
||||
|
||||
for (; m; m = m->next)
|
||||
if (aspectMatch(aspect, (float)m->HDisplay / (float)m->VDisplay))
|
||||
return m;
|
||||
|
||||
|
|
@ -1730,31 +1744,29 @@ nextAspectMode(DisplayModePtr start, float aspect)
|
|||
static DisplayModePtr
|
||||
bestModeForAspect(xf86CrtcConfigPtr config, Bool *enabled, float aspect)
|
||||
{
|
||||
int o, p;
|
||||
DisplayModePtr mode, test = NULL, match = NULL;
|
||||
int o = -1, p;
|
||||
DisplayModePtr mode = NULL, test = NULL, match = NULL;
|
||||
|
||||
for (o = -1; nextEnabledOutput(config, enabled, &o); ) {
|
||||
mode = config->output[o]->probed_modes;
|
||||
while ((mode = nextAspectMode(mode, aspect))) {
|
||||
for (p = o; nextEnabledOutput(config, enabled, &p); ) {
|
||||
test = xf86OutputFindClosestMode(config->output[p], mode);
|
||||
if (!test)
|
||||
break;
|
||||
if (test->HDisplay != mode->HDisplay ||
|
||||
test->VDisplay != mode->VDisplay) {
|
||||
test = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* if we didn't match it on all outputs, try the next one */
|
||||
nextEnabledOutput(config, enabled, &o);
|
||||
while ((mode = nextAspectMode(config->output[o], mode, aspect))) {
|
||||
for (p = o; nextEnabledOutput(config, enabled, &p); ) {
|
||||
test = xf86OutputFindClosestMode(config->output[p], mode);
|
||||
if (!test)
|
||||
continue;
|
||||
|
||||
/* if it's bigger than the last one, save it */
|
||||
if (!match || (test->HDisplay > match->HDisplay))
|
||||
match = test;
|
||||
break;
|
||||
if (test->HDisplay != mode->HDisplay ||
|
||||
test->VDisplay != mode->VDisplay) {
|
||||
test = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* if we didn't match it on all outputs, try the next one */
|
||||
if (!test)
|
||||
continue;
|
||||
|
||||
/* if it's bigger than the last one, save it */
|
||||
if (!match || (test->HDisplay > match->HDisplay))
|
||||
match = test;
|
||||
}
|
||||
|
||||
/* return the biggest one found */
|
||||
|
|
@ -2061,6 +2073,68 @@ xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check the CRTC we're going to map each output to vs. it's current
|
||||
* CRTC. If they don't match, we have to disable the output and the CRTC
|
||||
* since the driver will have to re-route things.
|
||||
*/
|
||||
static void
|
||||
xf86PrepareOutputs (ScrnInfoPtr scrn)
|
||||
{
|
||||
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn);
|
||||
int o;
|
||||
|
||||
for (o = 0; o < config->num_output; o++) {
|
||||
xf86OutputPtr output = config->output[o];
|
||||
#if RANDR_GET_CRTC_INTERFACE
|
||||
/* Disable outputs that are unused or will be re-routed */
|
||||
if (!output->funcs->get_crtc ||
|
||||
output->crtc != (*output->funcs->get_crtc)(output) ||
|
||||
output->crtc == NULL)
|
||||
#endif
|
||||
(*output->funcs->dpms)(output, DPMSModeOff);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
xf86PrepareCrtcs (ScrnInfoPtr scrn)
|
||||
{
|
||||
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn);
|
||||
int c;
|
||||
|
||||
for (c = 0; c < config->num_crtc; c++) {
|
||||
#if RANDR_GET_CRTC_INTERFACE
|
||||
xf86CrtcPtr crtc = config->crtc[c];
|
||||
xf86OutputPtr output = NULL;
|
||||
uint32_t desired_outputs = 0, current_outputs = 0;
|
||||
int o;
|
||||
|
||||
for (o = 0; o < config->num_output; o++) {
|
||||
output = config->output[o];
|
||||
if (output->crtc == crtc)
|
||||
desired_outputs |= (1<<o);
|
||||
/* If we can't tell where it's mapped, force it off */
|
||||
if (!output->funcs->get_crtc) {
|
||||
desired_outputs = 0;
|
||||
break;
|
||||
}
|
||||
if ((*output->funcs->get_crtc)(output) == crtc)
|
||||
current_outputs |= (1<<o);
|
||||
}
|
||||
|
||||
/*
|
||||
* If mappings are different or the CRTC is unused,
|
||||
* we need to disable it
|
||||
*/
|
||||
if (desired_outputs != current_outputs ||
|
||||
!desired_outputs)
|
||||
(*crtc->funcs->dpms)(crtc, DPMSModeOff);
|
||||
#else
|
||||
(*crtc->funcs->dpms)(crtc, DPMSModeOff);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Using the desired mode information in each crtc, set
|
||||
* modes (used in EnterVT functions, or at server startup)
|
||||
|
|
@ -2070,26 +2144,11 @@ _X_EXPORT Bool
|
|||
xf86SetDesiredModes (ScrnInfoPtr scrn)
|
||||
{
|
||||
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn);
|
||||
int c, o;
|
||||
int c;
|
||||
|
||||
/*
|
||||
* Turn off everything so mode setting is done
|
||||
* with hardware in a consistent state
|
||||
*/
|
||||
for (o = 0; o < config->num_output; o++)
|
||||
{
|
||||
xf86OutputPtr output = config->output[o];
|
||||
(*output->funcs->dpms)(output, DPMSModeOff);
|
||||
}
|
||||
xf86PrepareOutputs(scrn);
|
||||
xf86PrepareCrtcs(scrn);
|
||||
|
||||
for (c = 0; c < config->num_crtc; c++)
|
||||
{
|
||||
xf86CrtcPtr crtc = config->crtc[c];
|
||||
|
||||
crtc->funcs->dpms(crtc, DPMSModeOff);
|
||||
memset(&crtc->mode, 0, sizeof(crtc->mode));
|
||||
}
|
||||
|
||||
for (c = 0; c < config->num_crtc; c++)
|
||||
{
|
||||
xf86CrtcPtr crtc = config->crtc[c];
|
||||
|
|
@ -2275,7 +2334,7 @@ xf86SetSingleMode (ScrnInfoPtr pScrn, DisplayModePtr desired, Rotation rotation)
|
|||
}
|
||||
}
|
||||
xf86DisableUnusedFunctions(pScrn);
|
||||
#if RANDR_12_INTERFACE
|
||||
#ifdef RANDR_12_INTERFACE
|
||||
xf86RandR12TellChanged (pScrn->pScreen);
|
||||
#endif
|
||||
return ok;
|
||||
|
|
|
|||
|
|
@ -434,6 +434,13 @@ typedef struct _xf86OutputFuncs {
|
|||
Bool
|
||||
(*get_property)(xf86OutputPtr output,
|
||||
Atom property);
|
||||
#endif
|
||||
#ifdef RANDR_GET_CRTC_INTERFACE
|
||||
/**
|
||||
* Callback to get current CRTC for a given output
|
||||
*/
|
||||
xf86CrtcPtr
|
||||
(*get_crtc)(xf86OutputPtr output);
|
||||
#endif
|
||||
/**
|
||||
* Clean up driver-specific bits of the output
|
||||
|
|
@ -707,7 +714,11 @@ xf86ProbeOutputModes (ScrnInfoPtr pScrn, int maxX, int maxY);
|
|||
void
|
||||
xf86SetScrnInfoModes (ScrnInfoPtr pScrn);
|
||||
|
||||
#ifdef RANDR_13_INTERFACE
|
||||
int
|
||||
#else
|
||||
Bool
|
||||
#endif
|
||||
xf86CrtcScreenInit (ScreenPtr pScreen);
|
||||
|
||||
Bool
|
||||
|
|
|
|||
|
|
@ -145,23 +145,6 @@ xf86RandR12GetInfo (ScreenPtr pScreen, Rotation *rotations)
|
|||
randrp->maxY = maxY;
|
||||
}
|
||||
|
||||
if (scrp->currentMode->HDisplay != randrp->virtualX ||
|
||||
scrp->currentMode->VDisplay != randrp->virtualY)
|
||||
{
|
||||
pSize = RRRegisterSize (pScreen,
|
||||
randrp->virtualX, randrp->virtualY,
|
||||
randrp->mmWidth,
|
||||
randrp->mmHeight);
|
||||
if (!pSize)
|
||||
return FALSE;
|
||||
RRRegisterRate (pScreen, pSize, refresh0);
|
||||
if (scrp->virtualX == randrp->virtualX &&
|
||||
scrp->virtualY == randrp->virtualY)
|
||||
{
|
||||
RRSetCurrentConfig (pScreen, randrp->rotation, refresh0, pSize);
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -372,8 +355,8 @@ xf86RandR12ScreenSetSize (ScreenPtr pScreen,
|
|||
|
||||
pScreen->width = pScrnPix->drawable.width = width;
|
||||
pScreen->height = pScrnPix->drawable.height = height;
|
||||
pScreen->mmWidth = mmWidth;
|
||||
pScreen->mmHeight = mmHeight;
|
||||
randrp->mmWidth = pScreen->mmWidth = mmWidth;
|
||||
randrp->mmHeight = pScreen->mmHeight = mmHeight;
|
||||
|
||||
xf86SetViewport (pScreen, pScreen->width-1, pScreen->height-1);
|
||||
xf86SetViewport (pScreen, 0, 0);
|
||||
|
|
@ -788,6 +771,9 @@ xf86RandR12CrtcSet (ScreenPtr pScreen,
|
|||
xf86CrtcPtr *save_crtcs;
|
||||
Bool save_enabled = crtc->enabled;
|
||||
|
||||
if (!crtc->scrn->vtSema)
|
||||
return FALSE;
|
||||
|
||||
save_crtcs = xalloc(config->num_output * sizeof (xf86CrtcPtr));
|
||||
if ((randr_mode != NULL) != crtc->enabled)
|
||||
changed = TRUE;
|
||||
|
|
|
|||
|
|
@ -212,6 +212,11 @@ xf86OSInitVidMem(VidMemInfoPtr pVidMem)
|
|||
pVidMem->mapMem = mapVidMem;
|
||||
pVidMem->unmapMem = unmapVidMem;
|
||||
|
||||
#if HAVE_PCI_SYSTEM_INIT_DEV_MEM
|
||||
if (useDevMem)
|
||||
pci_system_init_dev_mem(devMemFd);
|
||||
#endif
|
||||
|
||||
#ifdef HAS_MTRR_SUPPORT
|
||||
if (useDevMem) {
|
||||
if (cleanMTRR()) {
|
||||
|
|
|
|||
|
|
@ -27,18 +27,6 @@ if LINUX_ALPHA
|
|||
PCI_SOURCES += axpPci.c
|
||||
endif
|
||||
|
||||
if LINUX_IA64
|
||||
PLATFORM_PCI_SOURCES = \
|
||||
460gxPCI.c \
|
||||
460gxPCI.h \
|
||||
altixPCI.c \
|
||||
altixPCI.h \
|
||||
e8870PCI.c \
|
||||
e8870PCI.h \
|
||||
zx1PCI.c \
|
||||
zx1PCI.h
|
||||
endif
|
||||
|
||||
if XORG_BUS_SPARC
|
||||
PLATFORM_SOURCES = Sbus.c
|
||||
sdk_HEADERS += xf86Sbus.h
|
||||
|
|
|
|||
|
|
@ -207,9 +207,8 @@
|
|||
# endif
|
||||
#elif defined(__ia64__)
|
||||
# if defined(linux)
|
||||
# define ARCH_PCI_INIT ia64linuxPciInit
|
||||
# define ARCH_PCI_INIT linuxPciInit
|
||||
# endif
|
||||
# define XF86SCANPCI_WRAPPER ia64ScanPCIWrapper
|
||||
#elif defined(__i386__) || defined(__i386)
|
||||
# if defined(linux)
|
||||
# define ARCH_PCI_INIT linuxPciInit
|
||||
|
|
|
|||
|
|
@ -81,4 +81,6 @@ bsdPciInit(void)
|
|||
{
|
||||
pciNumBuses = 1;
|
||||
pciBusInfo[0] = &bsd_pci;
|
||||
|
||||
xf86InitVidMem();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
noinst_LTLIBRARIES = liblinux.la
|
||||
|
||||
if LINUX_IA64
|
||||
PLATFORM_PCI_SUPPORT = $(srcdir)/lnx_ia64.c $(srcdir)/../shared/ia64Pci.c
|
||||
PLATFORM_PCI_SUPPORT = $(srcdir)/../shared/ia64Pci.c
|
||||
PLATFORM_DEFINES = -DOS_PROBE_PCI_CHIPSET=lnxProbePciChipset
|
||||
PLATFORM_INCLUDES = -I$(srcdir)/../shared
|
||||
endif
|
||||
|
|
|
|||
|
|
@ -42,12 +42,7 @@
|
|||
#include <linux/pci.h>
|
||||
|
||||
#include "compiler.h"
|
||||
#include "460gxPCI.h"
|
||||
#include "e8870PCI.h"
|
||||
#include "zx1PCI.h"
|
||||
#include "altixPCI.h"
|
||||
#include "Pci.h"
|
||||
#include "ia64Pci.h"
|
||||
|
||||
/*
|
||||
* We use special in/out routines here since Altix platforms require the
|
||||
|
|
@ -191,53 +186,3 @@ _X_EXPORT unsigned int inl(unsigned long port)
|
|||
return val;
|
||||
}
|
||||
|
||||
void
|
||||
ia64ScanPCIWrapper(scanpciWrapperOpt flags)
|
||||
{
|
||||
static IA64Chipset chipset = NONE_CHIPSET;
|
||||
|
||||
if (flags == SCANPCI_INIT) {
|
||||
|
||||
/* PCI configuration space probes should be done first */
|
||||
if (xorgProbe460GX(flags)) {
|
||||
chipset = I460GX_CHIPSET;
|
||||
xf86PreScan460GX();
|
||||
return;
|
||||
} else if (xorgProbeE8870(flags)) {
|
||||
chipset = E8870_CHIPSET;
|
||||
xf86PreScanE8870();
|
||||
return;
|
||||
}
|
||||
#ifdef OS_PROBE_PCI_CHIPSET
|
||||
chipset = OS_PROBE_PCI_CHIPSET(flags);
|
||||
switch (chipset) {
|
||||
case ZX1_CHIPSET:
|
||||
xf86PreScanZX1();
|
||||
return;
|
||||
case ALTIX_CHIPSET:
|
||||
xf86PreScanAltix();
|
||||
return;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
} else /* if (flags == SCANPCI_TERM) */ {
|
||||
|
||||
switch (chipset) {
|
||||
case I460GX_CHIPSET:
|
||||
xf86PostScan460GX();
|
||||
return;
|
||||
case E8870_CHIPSET:
|
||||
xf86PostScanE8870();
|
||||
return;
|
||||
case ZX1_CHIPSET:
|
||||
xf86PostScanZX1();
|
||||
return;
|
||||
case ALTIX_CHIPSET:
|
||||
xf86PostScanAltix();
|
||||
return;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ ioport_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS)
|
|||
ioport_LDADD = \
|
||||
../../os-support/libxorgos.la \
|
||||
../../dummylib/libdummy-nonserver.a \
|
||||
${UTILS_SYS_LIBS}
|
||||
${UTILS_SYS_LIBS} ${PCIACCESS_LIBS}
|
||||
|
||||
|
||||
ioport_SOURCES = \
|
||||
|
|
|
|||
|
|
@ -28,11 +28,11 @@
|
|||
#define SETSPANPTRS(IN,N,IPW,PW,IPPT,PPT,FPW,FPPT,FSORT) \
|
||||
{ \
|
||||
N = IN * miFindMaxBand(pGC->pCompositeClip); \
|
||||
if(!(PW = (int *)ALLOCATE_LOCAL(N * sizeof(int)))) \
|
||||
if(!(PW = (int *)xalloc(N * sizeof(int)))) \
|
||||
return; \
|
||||
if(!(PPT = (DDXPointRec *)ALLOCATE_LOCAL(N * sizeof(DDXPointRec)))) \
|
||||
if(!(PPT = (DDXPointRec *)xalloc(N * sizeof(DDXPointRec)))) \
|
||||
{ \
|
||||
DEALLOCATE_LOCAL(PW); \
|
||||
free(PW); \
|
||||
return; \
|
||||
} \
|
||||
FPW = PW; \
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ extern void FlushIfCriticalOutputPending(void);
|
|||
|
||||
extern void SetCriticalOutputPending(void);
|
||||
|
||||
extern int WriteToClient(ClientPtr /*who*/, int /*count*/, char* /*buf*/);
|
||||
extern int WriteToClient(ClientPtr /*who*/, int /*count*/, const void* /*buf*/);
|
||||
|
||||
extern void ResetOsBuffers(void);
|
||||
|
||||
|
|
@ -448,7 +448,7 @@ typedef struct {
|
|||
extern CallbackListPtr ReplyCallback;
|
||||
typedef struct {
|
||||
ClientPtr client;
|
||||
pointer replyData;
|
||||
const void *replyData;
|
||||
unsigned long dataLenBytes;
|
||||
unsigned long bytesRemaining;
|
||||
Bool startOfReply;
|
||||
|
|
|
|||
|
|
@ -158,7 +158,7 @@ extern RegDataRec miBrokenData;
|
|||
|
||||
#define REGION_INIT(_pScreen, _pReg, _rect, _size) \
|
||||
{ \
|
||||
if (_rect) \
|
||||
if ((_rect) != NULL) \
|
||||
{ \
|
||||
(_pReg)->extents = *(_rect); \
|
||||
(_pReg)->data = (RegDataPtr)NULL; \
|
||||
|
|
|
|||
|
|
@ -115,6 +115,9 @@
|
|||
/* Have execinfo.h */
|
||||
#undef HAVE_EXECINFO_H
|
||||
|
||||
/* Have pci_system_init_dev_mem() */
|
||||
#undef HAVE_PCI_SYSTEM_INIT_DEV_MEM
|
||||
|
||||
/* Path to text files containing PCI IDs */
|
||||
#undef PCI_TXT_IDS_PATH
|
||||
|
||||
|
|
|
|||
|
|
@ -89,9 +89,14 @@ Equipment Corporation.
|
|||
|
||||
#undef assert
|
||||
#ifdef DEBUG
|
||||
#define assert(expr) {if (!(expr)) \
|
||||
FatalError("Assertion failed file %s, line %d: expr\n", \
|
||||
__FILE__, __LINE__); }
|
||||
#define assert(expr) { \
|
||||
CARD32 *foo = NULL; \
|
||||
if (!(expr)) { \
|
||||
ErrorF("Assertion failed file %s, line %d: %s\n", \
|
||||
__FILE__, __LINE__, #expr); \
|
||||
*foo = 0xdeadbeef; /* to get a backtrace */ \
|
||||
} \
|
||||
}
|
||||
#else
|
||||
#define assert(expr)
|
||||
#endif
|
||||
|
|
|
|||
10
os/io.c
10
os/io.c
|
|
@ -730,11 +730,12 @@ SetCriticalOutputPending(void)
|
|||
*****************/
|
||||
|
||||
_X_EXPORT int
|
||||
WriteToClient (ClientPtr who, int count, char *buf)
|
||||
WriteToClient (ClientPtr who, int count, const void *__buf)
|
||||
{
|
||||
OsCommPtr oc = (OsCommPtr)who->osPrivate;
|
||||
ConnectionOutputPtr oco = oc->output;
|
||||
int padBytes;
|
||||
const char *buf = __buf;
|
||||
#ifdef DEBUG_COMMUNICATION
|
||||
Bool multicount = FALSE;
|
||||
#endif
|
||||
|
|
@ -871,13 +872,14 @@ WriteToClient (ClientPtr who, int count, char *buf)
|
|||
**********************/
|
||||
|
||||
int
|
||||
FlushClient(ClientPtr who, OsCommPtr oc, char *extraBuf, int extraCount)
|
||||
FlushClient(ClientPtr who, OsCommPtr oc, const void *__extraBuf, int extraCount)
|
||||
{
|
||||
ConnectionOutputPtr oco = oc->output;
|
||||
int connection = oc->fd;
|
||||
XtransConnInfo trans_conn = oc->trans_conn;
|
||||
struct iovec iov[3];
|
||||
static char padBuffer[3];
|
||||
const char *extraBuf = __extraBuf;
|
||||
long written;
|
||||
long padsize;
|
||||
long notWritten;
|
||||
|
|
@ -916,14 +918,14 @@ FlushClient(ClientPtr who, OsCommPtr oc, char *extraBuf, int extraCount)
|
|||
before = (-len); \
|
||||
} else { \
|
||||
iov[i].iov_len = len; \
|
||||
iov[i].iov_base = (pointer) + before; \
|
||||
iov[i].iov_base = (pointer) + before; \
|
||||
i++; \
|
||||
remain -= len; \
|
||||
before = 0; \
|
||||
}
|
||||
|
||||
InsertIOV ((char *)oco->buf, oco->count)
|
||||
InsertIOV (extraBuf, extraCount)
|
||||
InsertIOV ((char *)extraBuf, extraCount)
|
||||
InsertIOV (padBuffer, padsize)
|
||||
|
||||
errno = 0;
|
||||
|
|
|
|||
|
|
@ -184,7 +184,7 @@ typedef struct _osComm {
|
|||
extern int FlushClient(
|
||||
ClientPtr /*who*/,
|
||||
OsCommPtr /*oc*/,
|
||||
char* /*extraBuf*/,
|
||||
const void * /*extraBuf*/,
|
||||
int /*extraCount*/
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -56,6 +56,9 @@
|
|||
#define RANDR_10_INTERFACE 1
|
||||
#define RANDR_12_INTERFACE 1
|
||||
#define RANDR_13_INTERFACE 1 /* requires RANDR_12_INTERFACE */
|
||||
#define RANDR_GET_CRTC_INTERFACE 1
|
||||
|
||||
#define RANDR_INTERFACE_VERSION 0x0103
|
||||
|
||||
typedef XID RRMode;
|
||||
typedef XID RROutput;
|
||||
|
|
|
|||
|
|
@ -1796,7 +1796,7 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
|||
dsection = dst->geom->sections;
|
||||
i < src->geom->num_sections;
|
||||
i++, ssection++, dsection++) {
|
||||
*dsection = *ssection;
|
||||
*dsection = *ssection;
|
||||
if (ssection->num_rows) {
|
||||
tmp = xcalloc(ssection->num_rows, sizeof(XkbRowRec));
|
||||
if (!tmp)
|
||||
|
|
@ -1852,9 +1852,9 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
|||
}
|
||||
ddoodad->any.type = sdoodad->any.type;
|
||||
}
|
||||
dsection->overlays = NULL;
|
||||
dsection->sz_overlays = 0;
|
||||
dsection->num_overlays = 0;
|
||||
dsection->overlays = NULL;
|
||||
dsection->sz_overlays = 0;
|
||||
dsection->num_overlays = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue