summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSøren Sandmann <ssp@redhat.com>2010-06-02 11:06:07 -0400
committerSøren Sandmann Pedersen <ssp@redhat.com>2010-09-14 06:32:54 -0400
commitf7244b049674d5907a945ec355c17f33576586d1 (patch)
tree18adf068ad5ceff1c9b9e039e24df065f103e787
parent65d5ac5a0eecbf0ee3abdb6998ce5e615e05bb4e (diff)
Do initial uxa setup
-rw-r--r--src/Makefile.am2
-rw-r--r--src/qxl.h3
-rw-r--r--src/qxl_driver.c117
3 files changed, 76 insertions, 46 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index fd1ba81..eb4e224 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -33,6 +33,8 @@ qxl_drv_la_LTLIBRARIES = qxl_drv.la
qxl_drv_la_LDFLAGS = -module -avoid-version
qxl_drv_ladir = @moduledir@/drivers
+qxl_drv_la_LIBADD = uxa/libuxa.la
+
qxl_drv_la_SOURCES = \
qxl.h \
qxl_driver.c \
diff --git a/src/qxl.h b/src/qxl.h
index 1a5a9a3..100eeb3 100644
--- a/src/qxl.h
+++ b/src/qxl.h
@@ -39,6 +39,7 @@
#include "pciaccess.h"
#endif
#include "fb.h"
+#include "uxa/uxa.h"
#define hidden _X_HIDDEN
@@ -606,6 +607,8 @@ struct _qxl_screen_t
PCITAG pci_tag;
#endif
+ uxa_driver_t * uxa;
+
CreateScreenResourcesProcPtr create_screen_resources;
CloseScreenProcPtr close_screen;
CreateGCProcPtr create_gc;
diff --git a/src/qxl_driver.c b/src/qxl_driver.c
index b121b6a..1bdc6b4 100644
--- a/src/qxl_driver.c
+++ b/src/qxl_driver.c
@@ -106,24 +106,6 @@ qxl_usleep (int useconds)
}
-#if 0
-static void
-push_update_area (qxl_screen_t *qxl, const struct qxl_rect *area)
-{
- struct qxl_update_cmd *update = qxl_allocnf (qxl, sizeof *update);
- struct qxl_command cmd;
-
- update->release_info.id = (uint64_t)update;
- update->area = *area;
- update->update_id = 0;
-
- cmd.type = QXL_CMD_UDPATE;
- cmd.data = physical_address (qxl, update);
-
- qxl_ring_push (qxl->command_ring, &cmd);
-}
-#endif
-
void *
qxl_allocnf (qxl_screen_t *qxl, unsigned long size)
{
@@ -305,7 +287,7 @@ qxl_reset (qxl_screen_t *qxl)
outb (qxl->io_base + QXL_IO_MEMSLOT_ADD, qxl->main_mem_slot);
- ErrorF ("Created memslot from %p to %p\n", slot->start_phys_addr, slot->end_phys_addr);
+ ErrorF ("Created memslot from %lx to %lx\n", slot->start_phys_addr, slot->end_phys_addr);
slot->generation = qxl->rom->slot_generation;
@@ -339,20 +321,6 @@ qxl_switch_mode(int scrnIndex, DisplayModePtr p, int flags)
qxl_reset (qxl);
-#if 0
- struct qxl_surface_create {
- uint32_t width;
- uint32_t height;
- int32_t stride;
- uint32_t depth;
- uint32_t position;
- uint32_t mouse_mode;
- uint32_t flags;
- uint32_t type;
- uint64_t mem;
- };
-#endif
-
create->width = m->x_res;
create->height = m->y_res;
create->stride = - (4 * m->x_res);
@@ -875,15 +843,6 @@ qxl_copy_n_to_n (DrawablePtr pSrcDrawable,
push_drawable (qxl, drawable);
-#if 0
- if (closure)
- qxl_usleep (1000000);
-#endif
-
-#if 0
- submit_fill (qxl, &qrect, rand());
-#endif
-
b++;
}
}
@@ -1025,6 +984,72 @@ qxl_create_gc (GCPtr pGC)
return TRUE;
}
+static int uxa_pixmap_index;
+
+static Bool
+setup_uxa (qxl_screen_t *qxl, ScreenPtr screen)
+{
+ ScrnInfoPtr scrn = xf86Screens[screen->myNum];
+
+ if (!dixRequestPrivate(&uxa_pixmap_index, 0))
+ return FALSE;
+
+ qxl->uxa = uxa_driver_alloc();
+ if (qxl->uxa == NULL)
+ return FALSE;
+
+ memset(qxl->uxa, 0, sizeof(*qxl->uxa));
+
+ qxl->uxa->uxa_major = 1;
+ qxl->uxa->uxa_minor = 0;
+
+#if 0
+ /* Solid fill */
+ qxl->uxa->check_solid = qxl_check_solid;
+ qxl->uxa->prepare_solid = qxl_prepare_solid;
+ qxl->uxa->solid = qxl_solid;
+ qxl->uxa->done_solid = qxl_done_solid;
+
+ /* Copy */
+ qxl->uxa->check_copy = qxl_check_copy;
+ qxl->uxa->prepare_copy = qxl_prepare_copy;
+ qxl->uxa->copy = qxl_copy;
+ qxl->uxa->done_copy = qxl_done_copy;
+
+ /* Composite */
+ qxl->uxa->check_composite = i830_check_composite;
+ qxl->uxa->check_composite_target = i830_check_composite_target;
+ qxl->uxa->check_composite_texture = i830_check_composite_texture;
+ qxl->uxa->prepare_composite = i830_prepare_composite;
+ qxl->uxa->composite = i830_composite;
+ qxl->uxa->done_composite = i830_done_composite;
+
+ /* PutImage */
+ qxl->uxa->put_image = qxl_put_image;
+
+ /* Prepare access */
+ qxl->uxa->prepare_access = qxl_prepare_access;
+ qxl->uxa->finish_access = qxl_finish_access;
+ qxl->uxa->pixmap_is_offscreen = qxl_pixmap_is_offscreen;
+
+ screen->CreatePixmap = qxl_create_pixmap;
+ screen->DestroyPixmap = qxl_destroy_pixmap;
+#endif
+
+ if (!uxa_driver_init(screen, qxl->uxa)) {
+ xf86DrvMsg(scrn->scrnIndex, X_ERROR,
+ "UXA initialization failed\n");
+ xfree(qxl->uxa);
+ return FALSE;
+ }
+
+#if 0
+ uxa_set_fallback_debug(screen, FALSE);
+#endif
+
+ return TRUE;
+}
+
static Bool
qxl_screen_init(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
{
@@ -1087,6 +1112,10 @@ qxl_screen_init(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
fbPictureInit(pScreen, 0, 0);
+ qxl->uxa = uxa_driver_alloc ();
+
+ setup_uxa (qxl, pScreen);
+
qxl->create_screen_resources = pScreen->CreateScreenResources;
pScreen->CreateScreenResources = qxl_create_screen_resources;
@@ -1110,10 +1139,6 @@ qxl_screen_init(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
/* xf86DPMSInit(pScreen, xf86DPMSSet, 0); */
-#if 0 /* XV accel */
- qxlInitVideo(pScreen);
-#endif
-
pScreen->SaveScreen = qxl_blank_screen;
qxl->close_screen = pScreen->CloseScreen;
pScreen->CloseScreen = qxl_close_screen;