qxl_driver_t will not access io ports and pci resources directly, but through an opaque struct qxlhw which will have two implementations, qxlhw_pci and qxlhw_drm. --- src/Makefile.am | 4 ++++ src/qxl.h | 3 +++ src/qxlhw.c | 19 +++++++++++++++++++ src/qxlhw.h | 16 ++++++++++++++++ src/qxlhw_pci.c | 17 +++++++++++++++++ src/qxlhw_pci.h | 14 ++++++++++++++ 6 files changed, 73 insertions(+) create mode 100644 src/qxlhw.c create mode 100644 src/qxlhw.h create mode 100644 src/qxlhw_pci.c create mode 100644 src/qxlhw_pci.h
diff --git a/src/Makefile.am b/src/Makefile.am index c3ba074..3972b3d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -43,6 +43,8 @@ qxl_drv_la_SOURCES = \ qxl_surface.c \ qxl_ring.c \ qxl_mem.c \ + qxlhw.c \ + qxlhw_pci.c \ mspace.c \ mspace.h \ murmurhash3.c \ @@ -80,6 +82,8 @@ spiceqxl_drv_la_SOURCES = \ qxl_surface.c \ qxl_ring.c \ qxl_mem.c \ + qxlhw.c \ + qxlhw_pci.c \ mspace.c \ mspace.h \ murmurhash3.c \ diff --git a/src/qxl.h b/src/qxl.h index f20a26c..9b3459c 100644 --- a/src/qxl.h +++ b/src/qxl.h @@ -31,8 +31,11 @@ #include <spice.h> #endif +#include <xorg-server.h> + #include "compiler.h" #include "xf86.h" +#include "xf86Pci.h" #if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 6 #include "xf86Resources.h" #endif diff --git a/src/qxlhw.c b/src/qxlhw.c new file mode 100644 index 0000000..5673251 --- /dev/null +++ b/src/qxlhw.c @@ -0,0 +1,19 @@ +#include "qxlhw.h" +#include "qxlhw_pci.h" + +void qxlhw_init(struct qxlhw *base, qxl_screen_t *qxl) +{ + base->qxl = qxl; +} + +struct qxlhw *qxlhw_create(qxl_screen_t *qxl, ScrnInfoPtr pScrn) +{ + struct qxlhw *ret = NULL; + + ret = create_qxlhw_pci(qxl, pScrn); + if (ret == NULL) { + fprintf(stderr, "mayday, cannot find a pci or a drm device!\n"); + return NULL; + } + return ret; +} diff --git a/src/qxlhw.h b/src/qxlhw.h new file mode 100644 index 0000000..8c8925b --- /dev/null +++ b/src/qxlhw.h @@ -0,0 +1,16 @@ +#ifndef QXLHW_H +#define QXLHW_H + +#include "qxl.h" + +struct qxlhw { + qxl_screen_t *qxl; +}; + +void qxlhw_init(struct qxlhw *base, qxl_screen_t *qxl); + +/* initialization function, determines the qxlhw provider + * to use. currently just PCI. */ +struct qxlhw *qxlhw_create(qxl_screen_t *qxl, ScrnInfoPtr pScrn); + +#endif // QXLHW_H diff --git a/src/qxlhw_pci.c b/src/qxlhw_pci.c new file mode 100644 index 0000000..2d7ac94 --- /dev/null +++ b/src/qxlhw_pci.c @@ -0,0 +1,17 @@ +/* vim: set ts=8 : */ + +#include "qxlhw_pci.h" + +struct qxlhw_pci { + struct qxlhw base; +}; + +/* public entry point */ +struct qxlhw *create_qxlhw_pci(qxl_screen_t *qxl, ScrnInfoPtr pScrn) +{ + struct qxlhw_pci *ret = xnfalloc (sizeof(struct qxlhw_pci)); + struct qxlhw *base = &ret->base; + + qxlhw_init(base, qxl); + return base; +} diff --git a/src/qxlhw_pci.h b/src/qxlhw_pci.h new file mode 100644 index 0000000..45c58da --- /dev/null +++ b/src/qxlhw_pci.h @@ -0,0 +1,14 @@ +#ifndef QXLHW_PCI_H +#define QXLHW_PCI_H + +/* + * struct qxlhw implementation for direct pci access + */ + +#include "qxlhw.h" + +struct qxlhw_pci; + +struct qxlhw *create_qxlhw_pci(qxl_screen_t *qxl, ScrnInfoPtr pScrn); + +#endif -- 1.7.9.3 _______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel