[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 19/29] vmsvga: Handle SVGA_CMD_FENCE command
From: |
Liran Alon |
Subject: |
[Qemu-devel] [PATCH 19/29] vmsvga: Handle SVGA_CMD_FENCE command |
Date: |
Thu, 9 Aug 2018 14:46:32 +0300 |
From: Leonid Shatz <address@hidden>
According to Linux kernel
drivers/gpu/drm/vmwgfx/device_include/svga_reg.h:
/*
* SVGA_CMD_FENCE --
*
* Insert a synchronization fence. When the SVGA device reaches
* this command, it will copy the 'fence' value into the
* SVGA_FIFO_FENCE register. It will also compare the fence against
* SVGA_FIFO_FENCE_GOAL. If the fence matches the goal and the
* SVGA_IRQFLAG_FENCE_GOAL interrupt is enabled, the device will
* raise this interrupt.
*
* Availability:
* SVGA_FIFO_FENCE for this command,
* SVGA_CAP_IRQMASK for SVGA_FIFO_FENCE_GOAL.
*/
Signed-off-by: Leonid Shatz <address@hidden>
Reviewed-by: Darren Kenny <address@hidden>
Signed-off-by: Liran Alon <address@hidden>
---
hw/display/vmware_vga.c | 33 +++++++++++++++++++++++++--------
1 file changed, 25 insertions(+), 8 deletions(-)
diff --git a/hw/display/vmware_vga.c b/hw/display/vmware_vga.c
index dc5f4681f0d3..73e373665bdb 100644
--- a/hw/display/vmware_vga.c
+++ b/hw/display/vmware_vga.c
@@ -217,6 +217,7 @@ enum {
SVGA_FIFO_CAPABILITIES = 4,
SVGA_FIFO_FLAGS,
+ /* Valid with SVGA_FIFO_CAP_FENCE */
SVGA_FIFO_FENCE,
/*
@@ -729,6 +730,7 @@ static void vmsvga_fifo_run(struct vmsvga_state_s *s)
int x, y, dx, dy, width, height;
struct vmsvga_cursor_definition_s cursor;
uint32_t cmd_start;
+ uint32_t fence_arg;
bool cmd_ignored;
bool irq_pending = false;
bool fifo_progress = false;
@@ -832,6 +834,28 @@ static void vmsvga_fifo_run(struct vmsvga_state_s *s)
args = 6;
goto ignoredcmd;
+ case SVGA_CMD_FENCE:
+ len -= 2;
+ if (len < 0) {
+ goto rewind;
+ }
+
+ fence_arg = vmsvga_fifo_read(s);
+ s->fifo[SVGA_FIFO_FENCE] = cpu_to_le32(fence_arg);
+
+ if (s->irq_mask & SVGA_IRQFLAG_ANY_FENCE) {
+ s->irq_status |= SVGA_IRQFLAG_ANY_FENCE;
+ irq_pending = true;
+ }
+ if ((s->irq_mask & SVGA_IRQFLAG_FENCE_GOAL)
+ && (s->fifo_min > SVGA_FIFO_FENCE_GOAL)
+ && (s->fifo[SVGA_FIFO_FENCE_GOAL] == fence_arg)) {
+ s->irq_status |= SVGA_IRQFLAG_FENCE_GOAL;
+ irq_pending = true;
+ }
+
+ break;
+
/*
* Deprecated commands are neither documented in VMware SVGA
development kit
* nor in Linux kernel vmware-svga driver source code.
@@ -899,13 +923,6 @@ static void vmsvga_fifo_run(struct vmsvga_state_s *s)
case SVGA_CMD_SURFACE_ALPHA_BLEND: /* deprecated */
args = 12;
goto badcmd;
- case SVGA_CMD_FENCE:
- len -= 1;
- if (len < 0) {
- goto rewind;
- }
- args = 1;
- goto badcmd;
default:
args = 0;
@@ -1463,7 +1480,7 @@ static void vmsvga_init(DeviceState *dev, struct
vmsvga_state_s *s,
&error_fatal);
s->fifo = (uint32_t *)memory_region_get_ram_ptr(&s->fifo_ram);
s->num_fifo_regs = SVGA_FIFO_NUM_REGS;
- s->fifo[SVGA_FIFO_CAPABILITIES] = 0;
+ s->fifo[SVGA_FIFO_CAPABILITIES] = SVGA_FIFO_CAP_FENCE;
s->fifo[SVGA_FIFO_FLAGS] = 0;
vga_common_init(&s->vga, OBJECT(dev));
--
1.9.1
- [Qemu-devel] [PATCH 09/29] vmsvga: Account for length of command word when parsing commands, (continued)
- [Qemu-devel] [PATCH 09/29] vmsvga: Account for length of command word when parsing commands, Liran Alon, 2018/08/09
- [Qemu-devel] [PATCH 10/29] vmsvga: Remove treatment of deprecated commands as Nop, Liran Alon, 2018/08/09
- [Qemu-devel] [PATCH 11/29] vmsvga: Remove handler of SVGA_CMD_INVALID_CMD, Liran Alon, 2018/08/09
- [Qemu-devel] [PATCH 12/29] vmsvga: Add definitions of FIFO registers and report their number, Liran Alon, 2018/08/09
- [Qemu-devel] [PATCH 13/29] vmsvga: Add support for extended FIFO registers, Liran Alon, 2018/08/09
- [Qemu-devel] [PATCH 14/29] vmsvga: Setup interrupt pin, Liran Alon, 2018/08/09
- [Qemu-devel] [PATCH 15/29] vmsvga: Add interrupt mask and status registers, Liran Alon, 2018/08/09
- [Qemu-devel] [PATCH 16/29] vmsvga: Add framework code for SVGA command to raise interrupt, Liran Alon, 2018/08/09
- [Qemu-devel] [PATCH 17/29] vmsvga: Define interrupt source flags for interrupt status and mask registers, Liran Alon, 2018/08/09
- [Qemu-devel] [PATCH 18/29] vmsvga: Add support for SVGA_IRQFLAG_FIFO_PROGRESS, Liran Alon, 2018/08/09
- [Qemu-devel] [PATCH 19/29] vmsvga: Handle SVGA_CMD_FENCE command,
Liran Alon <=
- [Qemu-devel] [PATCH 20/29] vmsvga: Use standard names for params defining hardware cursor image, Liran Alon, 2018/08/09
- [Qemu-devel] [PATCH 21/29] vmsvga: Use AND mask bpp parameter in SVGA_CMD_DEFINE_CURSOR, Liran Alon, 2018/08/09
- [Qemu-devel] [PATCH 22/29] vmsvga: Increase size of cursor AND bitmask, Liran Alon, 2018/08/09
- [Qemu-devel] [PATCH 23/29] vmsvga: Implement initial support for rgb-alpha cursors, Liran Alon, 2018/08/09
- [Qemu-devel] [PATCH 24/29] vmsvga: Add support for SVGA_FIFO_CAP_CURSOR_BYPASS_3, Liran Alon, 2018/08/09
- [Qemu-devel] [PATCH 25/29] vmsvga: Add basic support for GMR registers and FIFO commands, Liran Alon, 2018/08/09
- [Qemu-devel] [PATCH 26/29] vmsvga: Add basic support for display topology, Liran Alon, 2018/08/09