13192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/********************************************************** 23192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Copyright 1998-2009 VMware, Inc. All rights reserved. 33192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 43192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Permission is hereby granted, free of charge, to any person 53192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * obtaining a copy of this software and associated documentation 63192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * files (the "Software"), to deal in the Software without 73192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * restriction, including without limitation the rights to use, copy, 83192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * modify, merge, publish, distribute, sublicense, and/or sell copies 93192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * of the Software, and to permit persons to whom the Software is 103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * furnished to do so, subject to the following conditions: 113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The above copyright notice and this permission notice shall be 133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * included in all copies or substantial portions of the Software. 143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SOFTWARE. 233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz **********************************************************/ 253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * svga_reg.h -- 283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Virtual hardware definitions for the VMware SVGA II device. 303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#ifndef _SVGA_REG_H_ 333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define _SVGA_REG_H_ 343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * PCI device IDs. 373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define PCI_VENDOR_ID_VMWARE 0x15AD 393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define PCI_DEVICE_ID_VMWARE_SVGA2 0x0405 403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Legal values for the SVGA_REG_CURSOR_ON register in old-fashioned 433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * cursor bypass mode. This is still supported, but no new guest 443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * drivers should use it. 453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_CURSOR_ON_HIDE 0x0 /* Must be 0 to maintain backward compatibility */ 473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_CURSOR_ON_SHOW 0x1 /* Must be 1 to maintain backward compatibility */ 483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_CURSOR_ON_REMOVE_FROM_FB 0x2 /* Remove the cursor from the framebuffer because we need to see what's under it */ 493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_CURSOR_ON_RESTORE_TO_FB 0x3 /* Put the cursor back in the framebuffer so the user can see it */ 503192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 513192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 523192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The maximum framebuffer size that can traced for e.g. guests in VESA mode. 533192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The changeMap in the monitor is proportional to this number. Therefore, we'd 543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * like to keep it as small as possible to reduce monitor overhead (using 553192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_VRAM_MAX_SIZE for this increases the size of the shared area by over 563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 4k!). 573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 583192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * NB: For compatibility reasons, this value must be greater than 0xff0000. 593192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * See bug 335072. 603192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 613192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_FB_MAX_TRACEABLE_SIZE 0x1000000 623192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 633192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_MAX_PSEUDOCOLOR_DEPTH 8 643192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_MAX_PSEUDOCOLORS (1 << SVGA_MAX_PSEUDOCOLOR_DEPTH) 653192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_NUM_PALETTE_REGS (3 * SVGA_MAX_PSEUDOCOLORS) 663192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 673192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_MAGIC 0x900000UL 683192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_MAKE_ID(ver) (SVGA_MAGIC << 8 | (ver)) 693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 703192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* Version 2 let the address of the frame buffer be unsigned on Win32 */ 713192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_VERSION_2 2 723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_ID_2 SVGA_MAKE_ID(SVGA_VERSION_2) 733192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 743192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* Version 1 has new registers starting with SVGA_REG_CAPABILITIES so 753192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz PALETTE_BASE has moved */ 763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_VERSION_1 1 773192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_ID_1 SVGA_MAKE_ID(SVGA_VERSION_1) 783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* Version 0 is the initial version */ 803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_VERSION_0 0 813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_ID_0 SVGA_MAKE_ID(SVGA_VERSION_0) 823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 833192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* "Invalid" value for all SVGA IDs. (Version ID, screen object ID, surface ID...) */ 843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_ID_INVALID 0xFFFFFFFF 853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* Port offsets, relative to BAR0 */ 873192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_INDEX_PORT 0x0 883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_VALUE_PORT 0x1 893192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_BIOS_PORT 0x2 903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_IRQSTATUS_PORT 0x8 913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Interrupt source flags for IRQSTATUS_PORT and IRQMASK. 943192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 953192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Interrupts are only supported when the 963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CAP_IRQMASK capability is present. 973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 983192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_IRQFLAG_ANY_FENCE 0x1 /* Any fence was passed */ 993192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_IRQFLAG_FIFO_PROGRESS 0x2 /* Made forward progress in the FIFO */ 1003192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_IRQFLAG_FENCE_GOAL 0x4 /* SVGA_FIFO_FENCE_GOAL reached */ 1013192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1023192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 1033192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Registers 1043192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 1053192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1063192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzenum { 1073192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_ID = 0, 1083192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_ENABLE = 1, 1093192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_WIDTH = 2, 1103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_HEIGHT = 3, 1113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_MAX_WIDTH = 4, 1123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_MAX_HEIGHT = 5, 1133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_DEPTH = 6, 1143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_BITS_PER_PIXEL = 7, /* Current bpp in the guest */ 1153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_PSEUDOCOLOR = 8, 1163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_RED_MASK = 9, 1173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_GREEN_MASK = 10, 1183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_BLUE_MASK = 11, 1193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_BYTES_PER_LINE = 12, 1203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_FB_START = 13, /* (Deprecated) */ 1213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_FB_OFFSET = 14, 1223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_VRAM_SIZE = 15, 1233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_FB_SIZE = 16, 1243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* ID 0 implementation only had the above registers, then the palette */ 1263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_CAPABILITIES = 17, 1283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_MEM_START = 18, /* (Deprecated) */ 1293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_MEM_SIZE = 19, 1303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_CONFIG_DONE = 20, /* Set when memory area configured */ 1313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_SYNC = 21, /* See "FIFO Synchronization Registers" */ 1323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_BUSY = 22, /* See "FIFO Synchronization Registers" */ 1333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_GUEST_ID = 23, /* Set guest OS identifier */ 1343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_CURSOR_ID = 24, /* (Deprecated) */ 1353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_CURSOR_X = 25, /* (Deprecated) */ 1363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_CURSOR_Y = 26, /* (Deprecated) */ 1373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_CURSOR_ON = 27, /* (Deprecated) */ 1383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_HOST_BITS_PER_PIXEL = 28, /* (Deprecated) */ 1393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_SCRATCH_SIZE = 29, /* Number of scratch registers */ 1403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_MEM_REGS = 30, /* Number of FIFO registers */ 1413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_NUM_DISPLAYS = 31, /* (Deprecated) */ 1423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_PITCHLOCK = 32, /* Fixed pitch for all modes */ 1433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_IRQMASK = 33, /* Interrupt mask */ 1443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* Legacy multi-monitor support */ 1463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_NUM_GUEST_DISPLAYS = 34,/* Number of guest displays in X/Y direction */ 1473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_DISPLAY_ID = 35, /* Display ID for the following display attributes */ 1483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_DISPLAY_IS_PRIMARY = 36,/* Whether this is a primary display */ 1493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_DISPLAY_POSITION_X = 37,/* The display position x */ 1503192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_DISPLAY_POSITION_Y = 38,/* The display position y */ 1513192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_DISPLAY_WIDTH = 39, /* The display's width */ 1523192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_DISPLAY_HEIGHT = 40, /* The display's height */ 1533192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* See "Guest memory regions" below. */ 1553192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_GMR_ID = 41, 1563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_GMR_DESCRIPTOR = 42, 1573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_GMR_MAX_IDS = 43, 1583192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH = 44, 1593192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1603192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_TRACES = 45, /* Enable trace-based updates even when FIFO is on */ 1613192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_REG_TOP = 46, /* Must be 1 more than the last register */ 1623192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1633192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_PALETTE_BASE = 1024, /* Base of SVGA color map */ 1643192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* Next 768 (== 256*3) registers exist for colormap */ 1653192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1663192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_SCRATCH_BASE = SVGA_PALETTE_BASE + SVGA_NUM_PALETTE_REGS 1673192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* Base of scratch registers */ 1683192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* Next reg[SVGA_REG_SCRATCH_SIZE] registers exist for scratch usage: 1693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz First 4 are reserved for VESA BIOS Extension; any remaining are for 1703192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz the use of the current SVGA driver. */ 1713192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz}; 1723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1733192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1743192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 1753192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Guest memory regions (GMRs): 1763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 1773192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This is a new memory mapping feature available in SVGA devices 1783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * which have the SVGA_CAP_GMR bit set. Previously, there were two 1793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * fixed memory regions available with which to share data between the 1803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * device and the driver: the FIFO ('MEM') and the framebuffer. GMRs 1813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * are our name for an extensible way of providing arbitrary DMA 1823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * buffers for use between the driver and the SVGA device. They are a 1833192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * new alternative to framebuffer memory, usable for both 2D and 3D 1843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * graphics operations. 1853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 1863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Since GMR mapping must be done synchronously with guest CPU 1873192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * execution, we use a new pair of SVGA registers: 1883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 1893192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_REG_GMR_ID -- 1903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 1913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Read/write. 1923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This register holds the 32-bit ID (a small positive integer) 1933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * of a GMR to create, delete, or redefine. Writing this register 1943192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * has no side-effects. 1953192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 1963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_REG_GMR_DESCRIPTOR -- 1973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 1983192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Write-only. 1993192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Writing this register will create, delete, or redefine the GMR 2003192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * specified by the above ID register. If this register is zero, 2013192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * the GMR is deleted. Any pointers into this GMR (including those 2023192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * currently being processed by FIFO commands) will be 2033192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * synchronously invalidated. 2043192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 2053192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * If this register is nonzero, it must be the physical page 2063192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * number (PPN) of a data structure which describes the physical 2073192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * layout of the memory region this GMR should describe. The 2083192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * descriptor structure will be read synchronously by the SVGA 2093192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * device when this register is written. The descriptor need not 2103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * remain allocated for the lifetime of the GMR. 2113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 2123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The guest driver should write SVGA_REG_GMR_ID first, then 2133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_REG_GMR_DESCRIPTOR. 2143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 2153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_REG_GMR_MAX_IDS -- 2163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 2173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Read-only. 2183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The SVGA device may choose to support a maximum number of 2193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * user-defined GMR IDs. This register holds the number of supported 2203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * IDs. (The maximum supported ID plus 1) 2213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 2223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH -- 2233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 2243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Read-only. 2253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The SVGA device may choose to put a limit on the total number 2263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * of SVGAGuestMemDescriptor structures it will read when defining 2273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * a single GMR. 2283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 2293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The descriptor structure is an array of SVGAGuestMemDescriptor 2303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * structures. Each structure may do one of three things: 2313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 2323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * - Terminate the GMR descriptor list. 2333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * (ppn==0, numPages==0) 2343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 2353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * - Add a PPN or range of PPNs to the GMR's virtual address space. 2363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * (ppn != 0, numPages != 0) 2373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 2383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * - Provide the PPN of the next SVGAGuestMemDescriptor, in order to 2393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * support multi-page GMR descriptor tables without forcing the 2403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * driver to allocate physically contiguous memory. 2413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * (ppn != 0, numPages == 0) 2423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 2433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Note that each physical page of SVGAGuestMemDescriptor structures 2443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * can describe at least 2MB of guest memory. If the driver needs to 2453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * use more than one page of descriptor structures, it must use one of 2463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * its SVGAGuestMemDescriptors to point to an additional page. The 2473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * device will never automatically cross a page boundary. 2483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 2493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Once the driver has described a GMR, it is immediately available 2503192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * for use via any FIFO command that uses an SVGAGuestPtr structure. 2513192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * These pointers include a GMR identifier plus an offset into that 2523192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * GMR. 2533192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 2543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The driver must check the SVGA_CAP_GMR bit before using the GMR 2553192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * registers. 2563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 2573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2583192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 2593192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Special GMR IDs, allowing SVGAGuestPtrs to point to framebuffer 2603192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * memory as well. In the future, these IDs could even be used to 2613192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * allow legacy memory regions to be redefined by the guest as GMRs. 2623192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 2633192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Using the guest framebuffer (GFB) at BAR1 for general purpose DMA 2643192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * is being phased out. Please try to use user-defined GMRs whenever 2653192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * possible. 2663192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 2673192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_GMR_NULL ((uint32) -1) 2683192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_GMR_FRAMEBUFFER ((uint32) -2) // Guest Framebuffer (GFB) 2693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2703192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 2713192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct SVGAGuestMemDescriptor { 2723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 ppn; 2733192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 numPages; 2743192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAGuestMemDescriptor; 2753192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 2773192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct SVGAGuestPtr { 2783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 gmrId; 2793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 offset; 2803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAGuestPtr; 2813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2833192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 2843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGAGMRImageFormat -- 2853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 2863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This is a packed representation of the source 2D image format 2873192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * for a GMR-to-screen blit. Currently it is defined as an encoding 2883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * of the screen's color depth and bits-per-pixel, however, 16 bits 2893192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * are reserved for future use to identify other encodings (such as 2903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * RGBA or higher-precision images). 2913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 2923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Currently supported formats: 2933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 2943192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * bpp depth Format Name 2953192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * --- ----- ----------- 2963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 32 24 32-bit BGRX 2973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 24 24 24-bit BGR 2983192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 16 16 RGB 5-6-5 2993192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 16 15 RGB 5-5-5 3003192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 3013192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 3023192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 3033192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 3043192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct SVGAGMRImageFormat { 3053192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz union { 3063192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct { 3073192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 bitsPerPixel : 8; 3083192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 colorDepth : 8; 3093192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 reserved : 16; // Must be zero 3103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz }; 3113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 3123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 value; 3133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz }; 3143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAGMRImageFormat; 3153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 3163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 3173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGAColorBGRX -- 3183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 3193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * A 24-bit color format (BGRX), which does not depend on the 3203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * format of the legacy guest framebuffer (GFB) or the current 3213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * GMRFB state. 3223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 3233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 3243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 3253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct SVGAColorBGRX { 3263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz union { 3273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct { 3283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 b : 8; 3293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 g : 8; 3303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 r : 8; 3313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 x : 8; // Unused 3323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz }; 3333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 3343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 value; 3353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz }; 3363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAColorBGRX; 3373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 3383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 3393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 3403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGASignedRect -- 3413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGASignedPoint -- 3423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 3433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Signed rectangle and point primitives. These are used by the new 3443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 2D primitives for drawing to Screen Objects, which can occupy a 3453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * signed virtual coordinate space. 3463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 3473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGASignedRect specifies a half-open interval: the (left, top) 3483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * pixel is part of the rectangle, but the (right, bottom) pixel is 3493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * not. 3503192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 3513192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 3523192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 3533192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct SVGASignedRect { 3543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz int32 left; 3553192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz int32 top; 3563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz int32 right; 3573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz int32 bottom; 3583192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGASignedRect; 3593192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 3603192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 3613192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct SVGASignedPoint { 3623192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz int32 x; 3633192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz int32 y; 3643192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGASignedPoint; 3653192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 3663192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 3673192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 3683192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Capabilities 3693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 3703192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Note the holes in the bitfield. Missing bits have been deprecated, 3713192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * and must not be reused. Those capabilities will never be reported 3723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * by new versions of the SVGA device. 3733192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 3743192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 3753192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_CAP_NONE 0x00000000 3763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_CAP_RECT_COPY 0x00000002 3773192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_CAP_CURSOR 0x00000020 3783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_CAP_CURSOR_BYPASS 0x00000040 // Legacy (Use Cursor Bypass 3 instead) 3793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_CAP_CURSOR_BYPASS_2 0x00000080 // Legacy (Use Cursor Bypass 3 instead) 3803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_CAP_8BIT_EMULATION 0x00000100 3813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_CAP_ALPHA_CURSOR 0x00000200 3823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_CAP_3D 0x00004000 3833192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_CAP_EXTENDED_FIFO 0x00008000 3843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_CAP_MULTIMON 0x00010000 // Legacy multi-monitor support 3853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_CAP_PITCHLOCK 0x00020000 3863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_CAP_IRQMASK 0x00040000 3873192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_CAP_DISPLAY_TOPOLOGY 0x00080000 // Legacy multi-monitor support 3883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_CAP_GMR 0x00100000 3893192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_CAP_TRACES 0x00200000 3903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 3913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 3923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 3933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * FIFO register indices. 3943192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 3953192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The FIFO is a chunk of device memory mapped into guest physmem. It 3963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * is always treated as 32-bit words. 3973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 3983192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The guest driver gets to decide how to partition it between 3993192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * - FIFO registers (there are always at least 4, specifying where the 4003192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * following data area is and how much data it contains; there may be 4013192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * more registers following these, depending on the FIFO protocol 4023192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * version in use) 4033192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * - FIFO data, written by the guest and slurped out by the VMX. 4043192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * These indices are 32-bit word offsets into the FIFO. 4053192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 4063192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 4073192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzenum { 4083192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* 4093192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Block 1 (basic registers): The originally defined FIFO registers. 4103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * These exist and are valid for all versions of the FIFO protocol. 4113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 4123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 4133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_MIN = 0, 4143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_MAX, /* The distance from MIN to MAX must be at least 10K */ 4153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_NEXT_CMD, 4163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_STOP, 4173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 4183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* 4193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Block 2 (extended registers): Mandatory registers for the extended 4203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * FIFO. These exist if the SVGA caps register includes 4213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CAP_EXTENDED_FIFO; some of them are valid only if their 4223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * associated capability bit is enabled. 4233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 4243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Note that when originally defined, SVGA_CAP_EXTENDED_FIFO implied 4253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * support only for (FIFO registers) CAPABILITIES, FLAGS, and FENCE. 4263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This means that the guest has to test individually (in most cases 4273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * using FIFO caps) for the presence of registers after this; the VMX 4283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * can define "extended FIFO" to mean whatever it wants, and currently 4293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * won't enable it unless there's room for that set and much more. 4303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 4313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 4323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_CAPABILITIES = 4, 4333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_FLAGS, 4343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz // Valid with SVGA_FIFO_CAP_FENCE: 4353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_FENCE, 4363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 4373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* 4383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Block 3a (optional extended registers): Additional registers for the 4393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * extended FIFO, whose presence isn't actually implied by 4403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CAP_EXTENDED_FIFO; these exist if SVGA_FIFO_MIN is high enough to 4413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * leave room for them. 4423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 4433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * These in block 3a, the VMX currently considers mandatory for the 4443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * extended FIFO. 4453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 4463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 4473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz // Valid if exists (i.e. if extended FIFO enabled): 4483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_3D_HWVERSION, /* See SVGA3dHardwareVersion in svga3d_reg.h */ 4493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz // Valid with SVGA_FIFO_CAP_PITCHLOCK: 4503192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_PITCHLOCK, 4513192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 4523192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz // Valid with SVGA_FIFO_CAP_CURSOR_BYPASS_3: 4533192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_CURSOR_ON, /* Cursor bypass 3 show/hide register */ 4543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_CURSOR_X, /* Cursor bypass 3 x register */ 4553192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_CURSOR_Y, /* Cursor bypass 3 y register */ 4563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_CURSOR_COUNT, /* Incremented when any of the other 3 change */ 4573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_CURSOR_LAST_UPDATED,/* Last time the host updated the cursor */ 4583192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 4593192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz // Valid with SVGA_FIFO_CAP_RESERVE: 4603192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_RESERVED, /* Bytes past NEXT_CMD with real contents */ 4613192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 4623192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* 4633192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Valid with SVGA_FIFO_CAP_SCREEN_OBJECT: 4643192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 4653192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * By default this is SVGA_ID_INVALID, to indicate that the cursor 4663192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * coordinates are specified relative to the virtual root. If this 4673192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * is set to a specific screen ID, cursor position is reinterpreted 4683192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * as a signed offset relative to that screen's origin. This is the 4693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * only way to place the cursor on a non-rooted screen. 4703192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 4713192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_CURSOR_SCREEN_ID, 4723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 4733192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* 4743192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * XXX: The gap here, up until SVGA_FIFO_3D_CAPS, can be used for new 4753192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * registers, but this must be done carefully and with judicious use of 4763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * capability bits, since comparisons based on SVGA_FIFO_MIN aren't 4773192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * enough to tell you whether the register exists: we've shipped drivers 4783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * and products that used SVGA_FIFO_3D_CAPS but didn't know about some of 4793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * the earlier ones. The actual order of introduction was: 4803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * - PITCHLOCK 4813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * - 3D_CAPS 4823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * - CURSOR_* (cursor bypass 3) 4833192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * - RESERVED 4843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * So, code that wants to know whether it can use any of the 4853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * aforementioned registers, or anything else added after PITCHLOCK and 4863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * before 3D_CAPS, needs to reason about something other than 4873192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_FIFO_MIN. 4883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 4893192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 4903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* 4913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 3D caps block space; valid with 3D hardware version >= 4923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA3D_HWVERSION_WS6_B1. 4933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 4943192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_3D_CAPS = 32, 4953192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_3D_CAPS_LAST = 32 + 255, 4963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 4973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* 4983192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * End of VMX's current definition of "extended-FIFO registers". 4993192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Registers before here are always enabled/disabled as a block; either 5003192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * the extended FIFO is enabled and includes all preceding registers, or 5013192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * it's disabled entirely. 5023192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 5033192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Block 3b (truly optional extended registers): Additional registers for 5043192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * the extended FIFO, which the VMX already knows how to enable and 5053192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * disable with correct granularity. 5063192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 5073192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Registers after here exist if and only if the guest SVGA driver 5083192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * sets SVGA_FIFO_MIN high enough to leave room for them. 5093192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 5103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 5113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz // Valid if register exists: 5123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_GUEST_3D_HWVERSION, /* Guest driver's 3D version */ 5133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_FENCE_GOAL, /* Matching target for SVGA_IRQFLAG_FENCE_GOAL */ 5143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_BUSY, /* See "FIFO Synchronization Registers" */ 5153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 5163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* 5173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Always keep this last. This defines the maximum number of 5183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * registers we know about. At power-on, this value is placed in 5193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * the SVGA_REG_MEM_REGS register, and we expect the guest driver 5203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * to allocate this much space in FIFO memory for registers. 5213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 5223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_FIFO_NUM_REGS 5233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz}; 5243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 5253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 5263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 5273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Definition of registers included in extended FIFO support. 5283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 5293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The guest SVGA driver gets to allocate the FIFO between registers 5303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * and data. It must always allocate at least 4 registers, but old 5313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * drivers stopped there. 5323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 5333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The VMX will enable extended FIFO support if and only if the guest 5343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * left enough room for all registers defined as part of the mandatory 5353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * set for the extended FIFO. 5363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 5373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Note that the guest drivers typically allocate the FIFO only at 5383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * initialization time, not at mode switches, so it's likely that the 5393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * number of FIFO registers won't change without a reboot. 5403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 5413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * All registers less than this value are guaranteed to be present if 5423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * svgaUser->fifo.extended is set. Any later registers must be tested 5433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * individually for compatibility at each use (in the VMX). 5443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 5453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This value is used only by the VMX, so it can change without 5463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * affecting driver compatibility; keep it that way? 5473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 5483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_FIFO_EXTENDED_MANDATORY_REGS (SVGA_FIFO_3D_CAPS_LAST + 1) 5493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 5503192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 5513192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 5523192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * FIFO Synchronization Registers 5533192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 5543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This explains the relationship between the various FIFO 5553192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * sync-related registers in IOSpace and in FIFO space. 5563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 5573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_REG_SYNC -- 5583192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 5593192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The SYNC register can be used in two different ways by the guest: 5603192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 5613192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 1. If the guest wishes to fully sync (drain) the FIFO, 5623192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * it will write once to SYNC then poll on the BUSY 5633192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * register. The FIFO is sync'ed once BUSY is zero. 5643192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 5653192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 2. If the guest wants to asynchronously wake up the host, 5663192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * it will write once to SYNC without polling on BUSY. 5673192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Ideally it will do this after some new commands have 5683192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * been placed in the FIFO, and after reading a zero 5693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * from SVGA_FIFO_BUSY. 5703192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 5713192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * (1) is the original behaviour that SYNC was designed to 5723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * support. Originally, a write to SYNC would implicitly 5733192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * trigger a read from BUSY. This causes us to synchronously 5743192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * process the FIFO. 5753192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 5763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This behaviour has since been changed so that writing SYNC 5773192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * will *not* implicitly cause a read from BUSY. Instead, it 5783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * makes a channel call which asynchronously wakes up the MKS 5793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * thread. 5803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 5813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * New guests can use this new behaviour to implement (2) 5823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * efficiently. This lets guests get the host's attention 5833192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * without waiting for the MKS to poll, which gives us much 5843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * better CPU utilization on SMP hosts and on UP hosts while 5853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * we're blocked on the host GPU. 5863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 5873192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Old guests shouldn't notice the behaviour change. SYNC was 5883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * never guaranteed to process the entire FIFO, since it was 5893192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * bounded to a particular number of CPU cycles. Old guests will 5903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * still loop on the BUSY register until the FIFO is empty. 5913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 5923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Writing to SYNC currently has the following side-effects: 5933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 5943192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * - Sets SVGA_REG_BUSY to TRUE (in the monitor) 5953192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * - Asynchronously wakes up the MKS thread for FIFO processing 5963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * - The value written to SYNC is recorded as a "reason", for 5973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * stats purposes. 5983192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 5993192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * If SVGA_FIFO_BUSY is available, drivers are advised to only 6003192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * write to SYNC if SVGA_FIFO_BUSY is FALSE. Drivers should set 6013192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_FIFO_BUSY to TRUE after writing to SYNC. The MKS will 6023192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * eventually set SVGA_FIFO_BUSY on its own, but this approach 6033192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * lets the driver avoid sending multiple asynchronous wakeup 6043192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * messages to the MKS thread. 6053192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6063192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_REG_BUSY -- 6073192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6083192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This register is set to TRUE when SVGA_REG_SYNC is written, 6093192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * and it reads as FALSE when the FIFO has been completely 6103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * drained. 6113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Every read from this register causes us to synchronously 6133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * process FIFO commands. There is no guarantee as to how many 6143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * commands each read will process. 6153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * CPU time spent processing FIFO commands will be billed to 6173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * the guest. 6183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * New drivers should avoid using this register unless they 6203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * need to guarantee that the FIFO is completely drained. It 6213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * is overkill for performing a sync-to-fence. Older drivers 6223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * will use this register for any type of synchronization. 6233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_FIFO_BUSY -- 6253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This register is a fast way for the guest driver to check 6273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * whether the FIFO is already being processed. It reads and 6283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * writes at normal RAM speeds, with no monitor intervention. 6293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * If this register reads as TRUE, the host is guaranteeing that 6313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * any new commands written into the FIFO will be noticed before 6323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * the MKS goes back to sleep. 6333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * If this register reads as FALSE, no such guarantee can be 6353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * made. 6363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The guest should use this register to quickly determine 6383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * whether or not it needs to wake up the host. If the guest 6393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * just wrote a command or group of commands that it would like 6403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * the host to begin processing, it should: 6413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 1. Read SVGA_FIFO_BUSY. If it reads as TRUE, no further 6433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * action is necessary. 6443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 2. Write TRUE to SVGA_FIFO_BUSY. This informs future guest 6463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * code that we've already sent a SYNC to the host and we 6473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * don't need to send a duplicate. 6483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 3. Write a reason to SVGA_REG_SYNC. This will send an 6503192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * asynchronous wakeup to the MKS thread. 6513192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 6523192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 6533192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 6543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 6553192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * FIFO Capabilities 6563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Fence -- Fence register and command are supported 6583192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Accel Front -- Front buffer only commands are supported 6593192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Pitch Lock -- Pitch lock register is supported 6603192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Video -- SVGA Video overlay units are supported 6613192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Escape -- Escape command is supported 6623192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6633192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * XXX: Add longer descriptions for each capability, including a list 6643192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * of the new features that each capability provides. 6653192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6663192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_FIFO_CAP_SCREEN_OBJECT -- 6673192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6683192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Provides dynamic multi-screen rendering, for improved Unity and 6693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * multi-monitor modes. With Screen Object, the guest can 6703192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * dynamically create and destroy 'screens', which can represent 6713192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Unity windows or virtual monitors. Screen Object also provides 6723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * strong guarantees that DMA operations happen only when 6733192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * guest-initiated. Screen Object deprecates the BAR1 guest 6743192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * framebuffer (GFB) and all commands that work only with the GFB. 6753192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * New registers: 6773192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * FIFO_CURSOR_SCREEN_ID, VIDEO_DATA_GMRID, VIDEO_DST_SCREEN_ID 6783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * New 2D commands: 6803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * DEFINE_SCREEN, DESTROY_SCREEN, DEFINE_GMRFB, BLIT_GMRFB_TO_SCREEN, 6813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * BLIT_SCREEN_TO_GMRFB, ANNOTATION_FILL, ANNOTATION_COPY 6823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6833192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * New 3D commands: 6843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * BLIT_SURFACE_TO_SCREEN 6853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * New guarantees: 6873192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * - The host will not read or write guest memory, including the GFB, 6893192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * except when explicitly initiated by a DMA command. 6903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * - All DMA, including legacy DMA like UPDATE and PRESENT_READBACK, 6923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * is guaranteed to complete before any subsequent FENCEs. 6933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6943192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * - All legacy commands which affect a Screen (UPDATE, PRESENT, 6953192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * PRESENT_READBACK) as well as new Screen blit commands will 6963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * all behave consistently as blits, and memory will be read 6973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * or written in FIFO order. 6983192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 6993192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * For example, if you PRESENT from one SVGA3D surface to multiple 7003192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * places on the screen, the data copied will always be from the 7013192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA3D surface at the time the PRESENT was issued in the FIFO. 7023192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This was not necessarily true on devices without Screen Object. 7033192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 7043192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This means that on devices that support Screen Object, the 7053192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * PRESENT_READBACK command should not be necessary unless you 7063192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * actually want to read back the results of 3D rendering into 7073192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * system memory. (And for that, the BLIT_SCREEN_TO_GMRFB 7083192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * command provides a strict superset of functionality.) 7093192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 7103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * - When a screen is resized, either using Screen Object commands or 7113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * legacy multimon registers, its contents are preserved. 7123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 7133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 7143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_FIFO_CAP_NONE 0 7153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_FIFO_CAP_FENCE (1<<0) 7163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_FIFO_CAP_ACCELFRONT (1<<1) 7173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_FIFO_CAP_PITCHLOCK (1<<2) 7183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_FIFO_CAP_VIDEO (1<<3) 7193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_FIFO_CAP_CURSOR_BYPASS_3 (1<<4) 7203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_FIFO_CAP_ESCAPE (1<<5) 7213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_FIFO_CAP_RESERVE (1<<6) 7223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_FIFO_CAP_SCREEN_OBJECT (1<<7) 7233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 7243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 7253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 7263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * FIFO Flags 7273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 7283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Accel Front -- Driver should use front buffer only commands 7293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 7303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 7313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_FIFO_FLAG_NONE 0 7323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_FIFO_FLAG_ACCELFRONT (1<<0) 7333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_FIFO_FLAG_RESERVED (1<<31) // Internal use only 7343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 7353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 7363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * FIFO reservation sentinel value 7373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 7383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 7393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_FIFO_RESERVED_UNKNOWN 0xffffffff 7403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 7413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 7423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 7433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Video overlay support 7443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 7453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 7463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_NUM_OVERLAY_UNITS 32 7473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 7483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 7493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 7503192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Video capabilities that the guest is currently using 7513192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 7523192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 7533192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_VIDEO_FLAG_COLORKEY 0x0001 7543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 7553192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 7563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 7573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Offsets for the video overlay registers 7583192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 7593192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 7603192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzenum { 7613192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_ENABLED = 0, 7623192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_FLAGS, 7633192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_DATA_OFFSET, 7643192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_FORMAT, 7653192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_COLORKEY, 7663192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_SIZE, // Deprecated 7673192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_WIDTH, 7683192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_HEIGHT, 7693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_SRC_X, 7703192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_SRC_Y, 7713192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_SRC_WIDTH, 7723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_SRC_HEIGHT, 7733192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_DST_X, // Signed int32 7743192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_DST_Y, // Signed int32 7753192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_DST_WIDTH, 7763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_DST_HEIGHT, 7773192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_PITCH_1, 7783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_PITCH_2, 7793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_PITCH_3, 7803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_DATA_GMRID, // Optional, defaults to SVGA_GMR_FRAMEBUFFER 7813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_DST_SCREEN_ID, // Optional, defaults to virtual coords (SVGA_ID_INVALID) 7823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_VIDEO_NUM_REGS 7833192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz}; 7843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 7853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 7863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 7873192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA Overlay Units 7883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 7893192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * width and height relate to the entire source video frame. 7903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * srcX, srcY, srcWidth and srcHeight represent subset of the source 7913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * video frame to be displayed. 7923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 7933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 7943192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef struct SVGAOverlayUnit { 7953192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 enabled; 7963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 flags; 7973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 dataOffset; 7983192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 format; 7993192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 colorKey; 8003192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 size; 8013192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 width; 8023192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 height; 8033192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 srcX; 8043192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 srcY; 8053192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 srcWidth; 8063192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 srcHeight; 8073192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz int32 dstX; 8083192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz int32 dstY; 8093192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 dstWidth; 8103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 dstHeight; 8113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 pitches[3]; 8123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 dataGMRId; 8133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 dstScreenId; 8143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAOverlayUnit; 8153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 8163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 8173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 8183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGAScreenObject -- 8193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 8203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This is a new way to represent a guest's multi-monitor screen or 8213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Unity window. Screen objects are only supported if the 8223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_FIFO_CAP_SCREEN_OBJECT capability bit is set. 8233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 8243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * If Screen Objects are supported, they can be used to fully 8253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * replace the functionality provided by the framebuffer registers 8263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * (SVGA_REG_WIDTH, HEIGHT, etc.) and by SVGA_CAP_DISPLAY_TOPOLOGY. 8273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 8283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The screen object is a struct with guaranteed binary 8293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * compatibility. New flags can be added, and the struct may grow, 8303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * but existing fields must retain their meaning. 8313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 8323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 8333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 8343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_SCREEN_HAS_ROOT (1 << 0) // Screen is present in the virtual coord space 8353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_SCREEN_IS_PRIMARY (1 << 1) // Guest considers this screen to be 'primary' 8363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_SCREEN_FULLSCREEN_HINT (1 << 2) // Guest is running a fullscreen app here 8373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 8383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 8393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct SVGAScreenObject { 8403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 structSize; // sizeof(SVGAScreenObject) 8413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 id; 8423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 flags; 8433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct { 8443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 width; 8453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 height; 8463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } size; 8473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct { 8483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz int32 x; 8493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz int32 y; 8503192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } root; // Only used if SVGA_SCREEN_HAS_ROOT is set. 8513192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAScreenObject; 8523192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 8533192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 8543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 8553192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Commands in the command FIFO: 8563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 8573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Command IDs defined below are used for the traditional 2D FIFO 8583192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * communication (not all commands are available for all versions of the 8593192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA FIFO protocol). 8603192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 8613192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Note the holes in the command ID numbers: These commands have been 8623192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * deprecated, and the old IDs must not be reused. 8633192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 8643192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Command IDs from 1000 to 1999 are reserved for use by the SVGA3D 8653192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * protocol. 8663192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 8673192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Each command's parameters are described by the comments and 8683192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * structs below. 8693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 8703192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 8713192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef enum { 8723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_CMD_INVALID_CMD = 0, 8733192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_CMD_UPDATE = 1, 8743192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_CMD_RECT_COPY = 3, 8753192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_CMD_DEFINE_CURSOR = 19, 8763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_CMD_DEFINE_ALPHA_CURSOR = 22, 8773192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_CMD_UPDATE_VERBOSE = 25, 8783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_CMD_FRONT_ROP_FILL = 29, 8793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_CMD_FENCE = 30, 8803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_CMD_ESCAPE = 33, 8813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_CMD_DEFINE_SCREEN = 34, 8823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_CMD_DESTROY_SCREEN = 35, 8833192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_CMD_DEFINE_GMRFB = 36, 8843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_CMD_BLIT_GMRFB_TO_SCREEN = 37, 8853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_CMD_BLIT_SCREEN_TO_GMRFB = 38, 8863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_CMD_ANNOTATION_FILL = 39, 8873192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_CMD_ANNOTATION_COPY = 40, 8883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA_CMD_MAX 8893192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAFifoCmdId; 8903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 8913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_CMD_MAX_ARGS 64 8923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 8933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 8943192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 8953192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CMD_UPDATE -- 8963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 8973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This is a DMA transfer which copies from the Guest Framebuffer 8983192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * (GFB) at BAR1 + SVGA_REG_FB_OFFSET to any screens which 8993192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * intersect with the provided virtual rectangle. 9003192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 9013192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This command does not support using arbitrary guest memory as a 9023192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * data source- it only works with the pre-defined GFB memory. 9033192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This command also does not support signed virtual coordinates. 9043192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * If you have defined screens (using SVGA_CMD_DEFINE_SCREEN) with 9053192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * negative root x/y coordinates, the negative portion of those 9063192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * screens will not be reachable by this command. 9073192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 9083192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This command is not necessary when using framebuffer 9093192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * traces. Traces are automatically enabled if the SVGA FIFO is 9103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * disabled, and you may explicitly enable/disable traces using 9113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_REG_TRACES. With traces enabled, any write to the GFB will 9123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * automatically act as if a subsequent SVGA_CMD_UPDATE was issued. 9133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 9143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Traces and SVGA_CMD_UPDATE are the only supported ways to render 9153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * pseudocolor screen updates. The newer Screen Object commands 9163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * only support true color formats. 9173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 9183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Availability: 9193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Always available. 9203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 9213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 9223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 9233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct { 9243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 x; 9253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 y; 9263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 width; 9273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 height; 9283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAFifoCmdUpdate; 9293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 9303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 9313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 9323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CMD_RECT_COPY -- 9333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 9343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Perform a rectangular DMA transfer from one area of the GFB to 9353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * another, and copy the result to any screens which intersect it. 9363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 9373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Availability: 9383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CAP_RECT_COPY 9393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 9403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 9413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 9423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct { 9433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 srcX; 9443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 srcY; 9453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 destX; 9463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 destY; 9473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 width; 9483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 height; 9493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAFifoCmdRectCopy; 9503192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 9513192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 9523192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 9533192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CMD_DEFINE_CURSOR -- 9543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 9553192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Provide a new cursor image, as an AND/XOR mask. 9563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 9573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The recommended way to position the cursor overlay is by using 9583192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * the SVGA_FIFO_CURSOR_* registers, supported by the 9593192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_FIFO_CAP_CURSOR_BYPASS_3 capability. 9603192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 9613192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Availability: 9623192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CAP_CURSOR 9633192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 9643192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 9653192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 9663192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct { 9673192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 id; // Reserved, must be zero. 9683192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 hotspotX; 9693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 hotspotY; 9703192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 width; 9713192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 height; 9723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 andMaskDepth; // Value must be 1 or equal to BITS_PER_PIXEL 9733192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 xorMaskDepth; // Value must be 1 or equal to BITS_PER_PIXEL 9743192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* 9753192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Followed by scanline data for AND mask, then XOR mask. 9763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Each scanline is padded to a 32-bit boundary. 9773192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 9783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAFifoCmdDefineCursor; 9793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 9803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 9813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 9823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CMD_DEFINE_ALPHA_CURSOR -- 9833192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 9843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Provide a new cursor image, in 32-bit BGRA format. 9853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 9863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The recommended way to position the cursor overlay is by using 9873192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * the SVGA_FIFO_CURSOR_* registers, supported by the 9883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_FIFO_CAP_CURSOR_BYPASS_3 capability. 9893192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 9903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Availability: 9913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CAP_ALPHA_CURSOR 9923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 9933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 9943192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 9953192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct { 9963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 id; // Reserved, must be zero. 9973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 hotspotX; 9983192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 hotspotY; 9993192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 width; 10003192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 height; 10013192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* Followed by scanline data */ 10023192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAFifoCmdDefineAlphaCursor; 10033192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 10043192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 10053192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 10063192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CMD_UPDATE_VERBOSE -- 10073192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 10083192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Just like SVGA_CMD_UPDATE, but also provide a per-rectangle 10093192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 'reason' value, an opaque cookie which is used by internal 10103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * debugging tools. Third party drivers should not use this 10113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * command. 10123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 10133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Availability: 10143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CAP_EXTENDED_FIFO 10153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 10163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 10173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 10183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct { 10193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 x; 10203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 y; 10213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 width; 10223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 height; 10233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 reason; 10243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAFifoCmdUpdateVerbose; 10253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 10263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 10273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 10283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CMD_FRONT_ROP_FILL -- 10293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 10303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This is a hint which tells the SVGA device that the driver has 10313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * just filled a rectangular region of the GFB with a solid 10323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * color. Instead of reading these pixels from the GFB, the device 10333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * can assume that they all equal 'color'. This is primarily used 10343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * for remote desktop protocols. 10353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 10363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Availability: 10373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_FIFO_CAP_ACCELFRONT 10383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 10393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 10403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_ROP_COPY 0x03 10413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 10423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 10433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct { 10443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 color; // In the same format as the GFB 10453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 x; 10463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 y; 10473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 width; 10483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 height; 10493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 rop; // Must be SVGA_ROP_COPY 10503192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAFifoCmdFrontRopFill; 10513192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 10523192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 10533192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 10543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CMD_FENCE -- 10553192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 10563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Insert a synchronization fence. When the SVGA device reaches 10573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * this command, it will copy the 'fence' value into the 10583192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_FIFO_FENCE register. It will also compare the fence against 10593192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_FIFO_FENCE_GOAL. If the fence matches the goal and the 10603192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_IRQFLAG_FENCE_GOAL interrupt is enabled, the device will 10613192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * raise this interrupt. 10623192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 10633192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Availability: 10643192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_FIFO_FENCE for this command, 10653192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CAP_IRQMASK for SVGA_FIFO_FENCE_GOAL. 10663192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 10673192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 10683192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 10693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct { 10703192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 fence; 10713192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAFifoCmdFence; 10723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 10733192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 10743192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 10753192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CMD_ESCAPE -- 10763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 10773192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Send an extended or vendor-specific variable length command. 10783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This is used for video overlay, third party plugins, and 10793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * internal debugging tools. See svga_escape.h 10803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 10813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Availability: 10823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_FIFO_CAP_ESCAPE 10833192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 10843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 10853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 10863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct { 10873192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 nsid; 10883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 size; 10893192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* followed by 'size' bytes of data */ 10903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAFifoCmdEscape; 10913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 10923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 10933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 10943192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CMD_DEFINE_SCREEN -- 10953192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 10963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Define or redefine an SVGAScreenObject. See the description of 10973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGAScreenObject above. The video driver is responsible for 10983192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * generating new screen IDs. They should be small positive 10993192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * integers. The virtual device will have an implementation 11003192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * specific upper limit on the number of screen IDs 11013192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * supported. Drivers are responsible for recycling IDs. The first 11023192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * valid ID is zero. 11033192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 11043192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * - Interaction with other registers: 11053192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 11063192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * For backwards compatibility, when the GFB mode registers (WIDTH, 11073192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * HEIGHT, PITCHLOCK, BITS_PER_PIXEL) are modified, the SVGA device 11083192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * deletes all screens other than screen #0, and redefines screen 11093192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * #0 according to the specified mode. Drivers that use 11103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CMD_DEFINE_SCREEN should destroy or redefine screen #0. 11113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 11123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * If you use screen objects, do not use the legacy multi-mon 11133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * registers (SVGA_REG_NUM_GUEST_DISPLAYS, SVGA_REG_DISPLAY_*). 11143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 11153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Availability: 11163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_FIFO_CAP_SCREEN_OBJECT 11173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 11183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 11193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 11203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct { 11213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGAScreenObject screen; // Variable-length according to version 11223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAFifoCmdDefineScreen; 11233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 11243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 11253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 11263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CMD_DESTROY_SCREEN -- 11273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 11283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Destroy an SVGAScreenObject. Its ID is immediately available for 11293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * re-use. 11303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 11313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Availability: 11323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_FIFO_CAP_SCREEN_OBJECT 11333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 11343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 11353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 11363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct { 11373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 screenId; 11383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAFifoCmdDestroyScreen; 11393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 11403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 11413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 11423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CMD_DEFINE_GMRFB -- 11433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 11443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This command sets a piece of SVGA device state called the 11453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Guest Memory Region Framebuffer, or GMRFB. The GMRFB is a 11463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * piece of light-weight state which identifies the location and 11473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * format of an image in guest memory or in BAR1. The GMRFB has 11483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * an arbitrary size, and it doesn't need to match the geometry 11493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * of the GFB or any screen object. 11503192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 11513192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The GMRFB can be redefined as often as you like. You could 11523192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * always use the same GMRFB, you could redefine it before 11533192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * rendering from a different guest screen, or you could even 11543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * redefine it before every blit. 11553192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 11563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * There are multiple ways to use this command. The simplest way is 11573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * to use it to move the framebuffer either to elsewhere in the GFB 11583192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * (BAR1) memory region, or to a user-defined GMR. This lets a 11593192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * driver use a framebuffer allocated entirely out of normal system 11603192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * memory, which we encourage. 11613192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 11623192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Another way to use this command is to set up a ring buffer of 11633192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * updates in GFB memory. If a driver wants to ensure that no 11643192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * frames are skipped by the SVGA device, it is important that the 11653192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * driver not modify the source data for a blit until the device is 11663192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * done processing the command. One efficient way to accomplish 11673192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * this is to use a ring of small DMA buffers. Each buffer is used 11683192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * for one blit, then we move on to the next buffer in the 11693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * ring. The FENCE mechanism is used to protect each buffer from 11703192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * re-use until the device is finished with that buffer's 11713192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * corresponding blit. 11723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 11733192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This command does not affect the meaning of SVGA_CMD_UPDATE. 11743192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * UPDATEs always occur from the legacy GFB memory area. This 11753192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * command has no support for pseudocolor GMRFBs. Currently only 11763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * true-color 15, 16, and 24-bit depths are supported. Future 11773192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * devices may expose capabilities for additional framebuffer 11783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * formats. 11793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 11803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The default GMRFB value is undefined. Drivers must always send 11813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * this command at least once before performing any blit from the 11823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * GMRFB. 11833192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 11843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Availability: 11853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_FIFO_CAP_SCREEN_OBJECT 11863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 11873192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 11883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 11893192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct { 11903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGAGuestPtr ptr; 11913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 bytesPerLine; 11923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGAGMRImageFormat format; 11933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAFifoCmdDefineGMRFB; 11943192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 11953192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 11963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 11973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CMD_BLIT_GMRFB_TO_SCREEN -- 11983192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 11993192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This is a guest-to-host blit. It performs a DMA operation to 12003192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * copy a rectangular region of pixels from the current GMRFB to 12013192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * one or more Screen Objects. 12023192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 12033192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The destination coordinate may be specified relative to a 12043192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * screen's origin (if a screen ID is specified) or relative to the 12053192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * virtual coordinate system's origin (if the screen ID is 12063192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_ID_INVALID). The actual destination may span zero or more 12073192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * screens, in the case of a virtual destination rect or a rect 12083192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * which extends off the edge of the specified screen. 12093192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 12103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This command writes to the screen's "base layer": the underlying 12113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * framebuffer which exists below any cursor or video overlays. No 12123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * action is necessary to explicitly hide or update any overlays 12133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * which exist on top of the updated region. 12143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 12153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The SVGA device is guaranteed to finish reading from the GMRFB 12163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * by the time any subsequent FENCE commands are reached. 12173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 12183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This command consumes an annotation. See the 12193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CMD_ANNOTATION_* commands for details. 12203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 12213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Availability: 12223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_FIFO_CAP_SCREEN_OBJECT 12233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 12243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 12253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 12263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct { 12273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGASignedPoint srcOrigin; 12283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGASignedRect destRect; 12293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 destScreenId; 12303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAFifoCmdBlitGMRFBToScreen; 12313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 12323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 12333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 12343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CMD_BLIT_SCREEN_TO_GMRFB -- 12353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 12363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This is a host-to-guest blit. It performs a DMA operation to 12373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * copy a rectangular region of pixels from a single Screen Object 12383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * back to the current GMRFB. 12393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 12403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Usage note: This command should be used rarely. It will 12413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * typically be inefficient, but it is necessary for some types of 12423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * synchronization between 3D (GPU) and 2D (CPU) rendering into 12433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * overlapping areas of a screen. 12443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 12453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The source coordinate is specified relative to a screen's 12463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * origin. The provided screen ID must be valid. If any parameters 12473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * are invalid, the resulting pixel values are undefined. 12483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 12493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This command reads the screen's "base layer". Overlays like 12503192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * video and cursor are not included, but any data which was sent 12513192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * using a blit-to-screen primitive will be available, no matter 12523192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * whether the data's original source was the GMRFB or the 3D 12533192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * acceleration hardware. 12543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 12553192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Note that our guest-to-host blits and host-to-guest blits aren't 12563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * symmetric in their current implementation. While the parameters 12573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * are identical, host-to-guest blits are a lot less featureful. 12583192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * They do not support clipping: If the source parameters don't 12593192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * fully fit within a screen, the blit fails. They must originate 12603192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * from exactly one screen. Virtual coordinates are not directly 12613192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * supported. 12623192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 12633192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Host-to-guest blits do support the same set of GMRFB formats 12643192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * offered by guest-to-host blits. 12653192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 12663192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The SVGA device is guaranteed to finish writing to the GMRFB by 12673192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * the time any subsequent FENCE commands are reached. 12683192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 12693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Availability: 12703192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_FIFO_CAP_SCREEN_OBJECT 12713192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 12723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 12733192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 12743192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct { 12753192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGASignedPoint destOrigin; 12763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGASignedRect srcRect; 12773192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 srcScreenId; 12783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAFifoCmdBlitScreenToGMRFB; 12793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 12803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 12813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 12823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CMD_ANNOTATION_FILL -- 12833192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 12843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This is a blit annotation. This command stores a small piece of 12853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * device state which is consumed by the next blit-to-screen 12863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * command. The state is only cleared by commands which are 12873192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * specifically documented as consuming an annotation. Other 12883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * commands (such as ESCAPEs for debugging) may intervene between 12893192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * the annotation and its associated blit. 12903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 12913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This annotation is a promise about the contents of the next 12923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * blit: The video driver is guaranteeing that all pixels in that 12933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * blit will have the same value, specified here as a color in 12943192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGAColorBGRX format. 12953192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 12963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The SVGA device can still render the blit correctly even if it 12973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * ignores this annotation, but the annotation may allow it to 12983192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * perform the blit more efficiently, for example by ignoring the 12993192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * source data and performing a fill in hardware. 13003192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 13013192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This annotation is most important for performance when the 13023192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * user's display is being remoted over a network connection. 13033192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 13043192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Availability: 13053192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_FIFO_CAP_SCREEN_OBJECT 13063192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 13073192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 13083192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 13093192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct { 13103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGAColorBGRX color; 13113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAFifoCmdAnnotationFill; 13123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 13133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 13143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* 13153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_CMD_ANNOTATION_COPY -- 13163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 13173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This is a blit annotation. See SVGA_CMD_ANNOTATION_FILL for more 13183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * information about annotations. 13193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 13203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This annotation is a promise about the contents of the next 13213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * blit: The video driver is guaranteeing that all pixels in that 13223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * blit will have the same value as those which already exist at an 13233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * identically-sized region on the same or a different screen. 13243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 13253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Note that the source pixels for the COPY in this annotation are 13263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * sampled before applying the anqnotation's associated blit. They 13273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * are allowed to overlap with the blit's destination pixels. 13283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 13293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The copy source rectangle is specified the same way as the blit 13303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * destination: it can be a rectangle which spans zero or more 13313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * screens, specified relative to either a screen or to the virtual 13323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * coordinate system's origin. If the source rectangle includes 13333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * pixels which are not from exactly one screen, the results are 13343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * undefined. 13353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 13363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Availability: 13373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA_FIFO_CAP_SCREEN_OBJECT 13383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 13393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 13403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantztypedef 13413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct { 13423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGASignedPoint srcOrigin; 13433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz uint32 srcScreenId; 13443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} SVGAFifoCmdAnnotationCopy; 13453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 13463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#endif 1347