summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Levy <alevy@redhat.com>2012-05-29 12:25:12 +0300
committerAlon Levy <alevy@redhat.com>2012-05-31 20:13:47 +0300
commitb4352b1dcd18c410fd61e65b7629f52959fd0f33 (patch)
treebbe09efeb1f1ccb22c666b699c962af9bcb5aeef
parent5c566c8fcd56d650ca4c3f96d0f0de18df26fbc1 (diff)
io: add qxl_io_destroy_primary
-rw-r--r--src/qxl.h1
-rw-r--r--src/qxl_driver.c15
2 files changed, 16 insertions, 0 deletions
diff --git a/src/qxl.h b/src/qxl.h
index 1d6c79e..de19ede 100644
--- a/src/qxl.h
+++ b/src/qxl.h
@@ -435,6 +435,7 @@ static inline void qxl_mem_unverifiable(struct qxl_mem *mem) {}
void qxl_update_area(qxl_screen_t *qxl);
void qxl_io_memslot_add(qxl_screen_t *qxl, uint8_t id);
void qxl_io_create_primary(qxl_screen_t *qxl);
+void qxl_io_destroy_primary(qxl_screen_t *qxl);
void qxl_io_notify_oom(qxl_screen_t *qxl);
void qxl_io_flush_surfaces(qxl_screen_t *qxl);
void qxl_io_destroy_all_surfaces (qxl_screen_t *qxl);
diff --git a/src/qxl_driver.c b/src/qxl_driver.c
index 852cae2..809be5e 100644
--- a/src/qxl_driver.c
+++ b/src/qxl_driver.c
@@ -182,6 +182,21 @@ void qxl_io_create_primary(qxl_screen_t *qxl)
qxl->device_primary = QXL_DEVICE_PRIMARY_CREATED;
}
+void qxl_io_destroy_primary(qxl_screen_t *qxl)
+{
+#ifndef XSPICE
+ if (qxl->pci->revision >= 3) {
+ ioport_write(qxl, QXL_IO_DESTROY_PRIMARY_ASYNC, 0);
+ qxl_wait_for_io_command(qxl);
+ } else {
+ ioport_write(qxl, QXL_IO_DESTROY_PRIMARY, 0);
+ }
+#else
+ ioport_write(qxl, QXL_IO_DESTROY_PRIMARY, 0);
+#endif
+ qxl->device_primary = QXL_DEVICE_PRIMARY_NONE;
+}
+
void qxl_io_notify_oom(qxl_screen_t *qxl)
{
ioport_write(qxl, QXL_IO_NOTIFY_OOM, 0);