linux/drivers/gpu/drm/vmwgfx/device_include/svga_reg.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 OR MIT */
   2/**********************************************************
   3 * Copyright 1998-2015 VMware, Inc.
   4 *
   5 * Permission is hereby granted, free of charge, to any person
   6 * obtaining a copy of this software and associated documentation
   7 * files (the "Software"), to deal in the Software without
   8 * restriction, including without limitation the rights to use, copy,
   9 * modify, merge, publish, distribute, sublicense, and/or sell copies
  10 * of the Software, and to permit persons to whom the Software is
  11 * furnished to do so, subject to the following conditions:
  12 *
  13 * The above copyright notice and this permission notice shall be
  14 * included in all copies or substantial portions of the Software.
  15 *
  16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  19 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  20 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  21 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  23 * SOFTWARE.
  24 *
  25 **********************************************************/
  26
  27/*
  28 * svga_reg.h --
  29 *
  30 *    Virtual hardware definitions for the VMware SVGA II device.
  31 */
  32
  33#ifndef _SVGA_REG_H_
  34#define _SVGA_REG_H_
  35#include <linux/pci_ids.h>
  36
  37#define INCLUDE_ALLOW_MODULE
  38#define INCLUDE_ALLOW_USERLEVEL
  39
  40#define INCLUDE_ALLOW_VMCORE
  41#include "includeCheck.h"
  42
  43#include "svga_types.h"
  44
  45/*
  46 * SVGA_REG_ENABLE bit definitions.
  47 */
  48typedef enum {
  49   SVGA_REG_ENABLE_DISABLE = 0,
  50   SVGA_REG_ENABLE_ENABLE = (1 << 0),
  51   SVGA_REG_ENABLE_HIDE = (1 << 1),
  52} SvgaRegEnable;
  53
  54typedef uint32 SVGAMobId;
  55
  56/*
  57 * Arbitrary and meaningless limits. Please ignore these when writing
  58 * new drivers.
  59 */
  60#define SVGA_MAX_WIDTH                  2560
  61#define SVGA_MAX_HEIGHT                 1600
  62
  63
  64#define SVGA_MAX_BITS_PER_PIXEL         32
  65#define SVGA_MAX_DEPTH                  24
  66#define SVGA_MAX_DISPLAYS               10
  67#define SVGA_MAX_SCREEN_SIZE            8192
  68#define SVGA_SCREEN_ROOT_LIMIT (SVGA_MAX_SCREEN_SIZE * SVGA_MAX_DISPLAYS)
  69
  70
  71/*
  72 * Legal values for the SVGA_REG_CURSOR_ON register in old-fashioned
  73 * cursor bypass mode.
  74 */
  75#define SVGA_CURSOR_ON_HIDE            0x0
  76#define SVGA_CURSOR_ON_SHOW            0x1
  77
  78/*
  79 * Remove the cursor from the framebuffer
  80 * because we need to see what's under it
  81 */
  82#define SVGA_CURSOR_ON_REMOVE_FROM_FB  0x2
  83
  84/* Put the cursor back in the framebuffer so the user can see it */
  85#define SVGA_CURSOR_ON_RESTORE_TO_FB   0x3
  86
  87/*
  88 * The maximum framebuffer size that can traced for guests unless the
  89 * SVGA_CAP_GBOBJECTS is set in SVGA_REG_CAPABILITIES.  In that case
  90 * the full framebuffer can be traced independent of this limit.
  91 */
  92#define SVGA_FB_MAX_TRACEABLE_SIZE      0x1000000
  93
  94#define SVGA_MAX_PSEUDOCOLOR_DEPTH      8
  95#define SVGA_MAX_PSEUDOCOLORS           (1 << SVGA_MAX_PSEUDOCOLOR_DEPTH)
  96#define SVGA_NUM_PALETTE_REGS           (3 * SVGA_MAX_PSEUDOCOLORS)
  97
  98#define SVGA_MAGIC         0x900000UL
  99#define SVGA_MAKE_ID(ver)  (SVGA_MAGIC << 8 | (ver))
 100
 101/* Version 2 let the address of the frame buffer be unsigned on Win32 */
 102#define SVGA_VERSION_2     2
 103#define SVGA_ID_2          SVGA_MAKE_ID(SVGA_VERSION_2)
 104
 105/* Version 1 has new registers starting with SVGA_REG_CAPABILITIES so
 106   PALETTE_BASE has moved */
 107#define SVGA_VERSION_1     1
 108#define SVGA_ID_1          SVGA_MAKE_ID(SVGA_VERSION_1)
 109
 110/* Version 0 is the initial version */
 111#define SVGA_VERSION_0     0
 112#define SVGA_ID_0          SVGA_MAKE_ID(SVGA_VERSION_0)
 113
 114/*
 115 * "Invalid" value for all SVGA IDs.
 116 * (Version ID, screen object ID, surface ID...)
 117 */
 118#define SVGA_ID_INVALID    0xFFFFFFFF
 119
 120/* Port offsets, relative to BAR0 */
 121#define SVGA_INDEX_PORT         0x0
 122#define SVGA_VALUE_PORT         0x1
 123#define SVGA_BIOS_PORT          0x2
 124#define SVGA_IRQSTATUS_PORT     0x8
 125
 126/*
 127 * Interrupt source flags for IRQSTATUS_PORT and IRQMASK.
 128 *
 129 * Interrupts are only supported when the
 130 * SVGA_CAP_IRQMASK capability is present.
 131 */
 132#define SVGA_IRQFLAG_ANY_FENCE            0x1    /* Any fence was passed */
 133#define SVGA_IRQFLAG_FIFO_PROGRESS        0x2    /* Made forward progress in the FIFO */
 134#define SVGA_IRQFLAG_FENCE_GOAL           0x4    /* SVGA_FIFO_FENCE_GOAL reached */
 135#define SVGA_IRQFLAG_COMMAND_BUFFER       0x8    /* Command buffer completed */
 136#define SVGA_IRQFLAG_ERROR                0x10   /* Error while processing commands */
 137
 138/*
 139 * The byte-size is the size of the actual cursor data,
 140 * possibly after expanding it to the current bit depth.
 141 *
 142 * 40K is sufficient memory for two 32-bit planes for a 64 x 64 cursor.
 143 *
 144 * The dimension limit is a bound on the maximum width or height.
 145 */
 146#define SVGA_MAX_CURSOR_CMD_BYTES  (40 * 1024)
 147#define SVGA_MAX_CURSOR_CMD_DIMENSION 1024
 148
 149/*
 150 * Registers
 151 */
 152
 153enum {
 154   SVGA_REG_ID = 0,
 155   SVGA_REG_ENABLE = 1,
 156   SVGA_REG_WIDTH = 2,
 157   SVGA_REG_HEIGHT = 3,
 158   SVGA_REG_MAX_WIDTH = 4,
 159   SVGA_REG_MAX_HEIGHT = 5,
 160   SVGA_REG_DEPTH = 6,
 161   SVGA_REG_BITS_PER_PIXEL = 7,       /* Current bpp in the guest */
 162   SVGA_REG_PSEUDOCOLOR = 8,
 163   SVGA_REG_RED_MASK = 9,
 164   SVGA_REG_GREEN_MASK = 10,
 165   SVGA_REG_BLUE_MASK = 11,
 166   SVGA_REG_BYTES_PER_LINE = 12,
 167   SVGA_REG_FB_START = 13,            /* (Deprecated) */
 168   SVGA_REG_FB_OFFSET = 14,
 169   SVGA_REG_VRAM_SIZE = 15,
 170   SVGA_REG_FB_SIZE = 16,
 171
 172   /* ID 0 implementation only had the above registers, then the palette */
 173   SVGA_REG_ID_0_TOP = 17,
 174
 175   SVGA_REG_CAPABILITIES = 17,
 176   SVGA_REG_MEM_START = 18,           /* (Deprecated) */
 177   SVGA_REG_MEM_SIZE = 19,
 178   SVGA_REG_CONFIG_DONE = 20,         /* Set when memory area configured */
 179   SVGA_REG_SYNC = 21,                /* See "FIFO Synchronization Registers" */
 180   SVGA_REG_BUSY = 22,                /* See "FIFO Synchronization Registers" */
 181   SVGA_REG_GUEST_ID = 23,            /* (Deprecated) */
 182   SVGA_REG_DEAD = 24,                /* Drivers should never write this. */
 183   SVGA_REG_CURSOR_X = 25,            /* (Deprecated) */
 184   SVGA_REG_CURSOR_Y = 26,            /* (Deprecated) */
 185   SVGA_REG_CURSOR_ON = 27,           /* (Deprecated) */
 186   SVGA_REG_HOST_BITS_PER_PIXEL = 28, /* (Deprecated) */
 187   SVGA_REG_SCRATCH_SIZE = 29,        /* Number of scratch registers */
 188   SVGA_REG_MEM_REGS = 30,            /* Number of FIFO registers */
 189   SVGA_REG_NUM_DISPLAYS = 31,        /* (Deprecated) */
 190   SVGA_REG_PITCHLOCK = 32,           /* Fixed pitch for all modes */
 191   SVGA_REG_IRQMASK = 33,             /* Interrupt mask */
 192
 193   /* Legacy multi-monitor support */
 194   SVGA_REG_NUM_GUEST_DISPLAYS = 34,/* Number of guest displays in X/Y direction */
 195   SVGA_REG_DISPLAY_ID = 35,        /* Display ID for the following display attributes */
 196   SVGA_REG_DISPLAY_IS_PRIMARY = 36,/* Whether this is a primary display */
 197   SVGA_REG_DISPLAY_POSITION_X = 37,/* The display position x */
 198   SVGA_REG_DISPLAY_POSITION_Y = 38,/* The display position y */
 199   SVGA_REG_DISPLAY_WIDTH = 39,     /* The display's width */
 200   SVGA_REG_DISPLAY_HEIGHT = 40,    /* The display's height */
 201
 202   /* See "Guest memory regions" below. */
 203   SVGA_REG_GMR_ID = 41,
 204   SVGA_REG_GMR_DESCRIPTOR = 42,
 205   SVGA_REG_GMR_MAX_IDS = 43,
 206   SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH = 44,
 207
 208   SVGA_REG_TRACES = 45,            /* Enable trace-based updates even when FIFO is on */
 209   SVGA_REG_GMRS_MAX_PAGES = 46,    /* Maximum number of 4KB pages for all GMRs */
 210   SVGA_REG_MEMORY_SIZE = 47,       /* Total dedicated device memory excluding FIFO */
 211   SVGA_REG_COMMAND_LOW = 48,       /* Lower 32 bits and submits commands */
 212   SVGA_REG_COMMAND_HIGH = 49,      /* Upper 32 bits of command buffer PA */
 213
 214   /*
 215    * Max primary memory.
 216    * See SVGA_CAP_NO_BB_RESTRICTION.
 217    */
 218   SVGA_REG_MAX_PRIMARY_MEM = 50,
 219   SVGA_REG_MAX_PRIMARY_BOUNDING_BOX_MEM = 50,
 220
 221   /*
 222    * Legacy version of SVGA_REG_GBOBJECT_MEM_SIZE_KB for drivers that
 223    * don't know how to convert to a 64-bit byte value without overflowing.
 224    * (See SVGA_REG_GBOBJECT_MEM_SIZE_KB).
 225    */
 226   SVGA_REG_SUGGESTED_GBOBJECT_MEM_SIZE_KB = 51,
 227
 228   SVGA_REG_DEV_CAP = 52,           /* Write dev cap index, read value */
 229   SVGA_REG_CMD_PREPEND_LOW = 53,
 230   SVGA_REG_CMD_PREPEND_HIGH = 54,
 231   SVGA_REG_SCREENTARGET_MAX_WIDTH = 55,
 232   SVGA_REG_SCREENTARGET_MAX_HEIGHT = 56,
 233   SVGA_REG_MOB_MAX_SIZE = 57,
 234   SVGA_REG_BLANK_SCREEN_TARGETS = 58,
 235   SVGA_REG_CAP2 = 59,
 236   SVGA_REG_DEVEL_CAP = 60,
 237
 238   /*
 239    * Allow the guest to hint to the device which driver is running.
 240    *
 241    * This should not generally change device behavior, but might be
 242    * convenient to work-around specific bugs in guest drivers.
 243    *
 244    * Drivers should first write their id value into SVGA_REG_GUEST_DRIVER_ID,
 245    * and then fill out all of the version registers that they have defined.
 246    *
 247    * After the driver has written all of the registers, they should
 248    * then write the value SVGA_REG_GUEST_DRIVER_ID_SUBMIT to the
 249    * SVGA_REG_GUEST_DRIVER_ID register, to signal that they have finished.
 250    *
 251    * The SVGA_REG_GUEST_DRIVER_ID values are defined below by the
 252    * SVGARegGuestDriverId enum.
 253    *
 254    * The SVGA_REG_GUEST_DRIVER_VERSION fields are driver-specific,
 255    * but ideally should encode a monotonically increasing number that allows
 256    * the device to perform inequality checks against ranges of driver versions.
 257    */
 258   SVGA_REG_GUEST_DRIVER_ID = 61,
 259   SVGA_REG_GUEST_DRIVER_VERSION1 = 62,
 260   SVGA_REG_GUEST_DRIVER_VERSION2 = 63,
 261   SVGA_REG_GUEST_DRIVER_VERSION3 = 64,
 262   SVGA_REG_CURSOR_MOBID = 65,
 263   SVGA_REG_CURSOR_MAX_BYTE_SIZE = 66,
 264   SVGA_REG_CURSOR_MAX_DIMENSION = 67,
 265
 266   SVGA_REG_FIFO_CAPS = 68,
 267   SVGA_REG_FENCE = 69,
 268
 269   SVGA_REG_RESERVED1 = 70,
 270   SVGA_REG_RESERVED2 = 71,
 271   SVGA_REG_RESERVED3 = 72,
 272   SVGA_REG_RESERVED4 = 73,
 273   SVGA_REG_RESERVED5 = 74,
 274   SVGA_REG_SCREENDMA = 75,
 275
 276   /*
 277    * The maximum amount of guest-backed objects that the device can have
 278    * resident at a time. Guest-drivers should keep their working set size
 279    * below this limit for best performance.
 280    *
 281    * Note that this value is in kilobytes, and not bytes, because the actual
 282    * number of bytes might be larger than can fit in a 32-bit register.
 283    *
 284    * PLEASE USE A 64-BIT VALUE WHEN CONVERTING THIS INTO BYTES.
 285    * (See SVGA_REG_SUGGESTED_GBOBJECT_MEM_SIZE_KB).
 286    */
 287   SVGA_REG_GBOBJECT_MEM_SIZE_KB = 76,
 288
 289   SVGA_REG_TOP = 77,               /* Must be 1 more than the last register */
 290
 291   SVGA_PALETTE_BASE = 1024,        /* Base of SVGA color map */
 292   /* Next 768 (== 256*3) registers exist for colormap */
 293   SVGA_SCRATCH_BASE = SVGA_PALETTE_BASE + SVGA_NUM_PALETTE_REGS
 294                                    /* Base of scratch registers */
 295   /* Next reg[SVGA_REG_SCRATCH_SIZE] registers exist for scratch usage:
 296      First 4 are reserved for VESA BIOS Extension; any remaining are for
 297      the use of the current SVGA driver. */
 298};
 299
 300
 301/*
 302 * Values for SVGA_REG_GUEST_DRIVER_ID.
 303 */
 304typedef enum SVGARegGuestDriverId {
 305   SVGA_REG_GUEST_DRIVER_ID_UNKNOWN = 0,
 306   SVGA_REG_GUEST_DRIVER_ID_WDDM    = 1,
 307   SVGA_REG_GUEST_DRIVER_ID_LINUX   = 2,
 308   SVGA_REG_GUEST_DRIVER_ID_MAX,
 309
 310   SVGA_REG_GUEST_DRIVER_ID_SUBMIT  = MAX_UINT32,
 311} SVGARegGuestDriverId;
 312
 313
 314/*
 315 * Guest memory regions (GMRs):
 316 *
 317 * This is a new memory mapping feature available in SVGA devices
 318 * which have the SVGA_CAP_GMR bit set. Previously, there were two
 319 * fixed memory regions available with which to share data between the
 320 * device and the driver: the FIFO ('MEM') and the framebuffer. GMRs
 321 * are our name for an extensible way of providing arbitrary DMA
 322 * buffers for use between the driver and the SVGA device. They are a
 323 * new alternative to framebuffer memory, usable for both 2D and 3D
 324 * graphics operations.
 325 *
 326 * Since GMR mapping must be done synchronously with guest CPU
 327 * execution, we use a new pair of SVGA registers:
 328 *
 329 *   SVGA_REG_GMR_ID --
 330 *
 331 *     Read/write.
 332 *     This register holds the 32-bit ID (a small positive integer)
 333 *     of a GMR to create, delete, or redefine. Writing this register
 334 *     has no side-effects.
 335 *
 336 *   SVGA_REG_GMR_DESCRIPTOR --
 337 *
 338 *     Write-only.
 339 *     Writing this register will create, delete, or redefine the GMR
 340 *     specified by the above ID register. If this register is zero,
 341 *     the GMR is deleted. Any pointers into this GMR (including those
 342 *     currently being processed by FIFO commands) will be
 343 *     synchronously invalidated.
 344 *
 345 *     If this register is nonzero, it must be the physical page
 346 *     number (PPN) of a data structure which describes the physical
 347 *     layout of the memory region this GMR should describe. The
 348 *     descriptor structure will be read synchronously by the SVGA
 349 *     device when this register is written. The descriptor need not
 350 *     remain allocated for the lifetime of the GMR.
 351 *
 352 *     The guest driver should write SVGA_REG_GMR_ID first, then
 353 *     SVGA_REG_GMR_DESCRIPTOR.
 354 *
 355 *   SVGA_REG_GMR_MAX_IDS --
 356 *
 357 *     Read-only.
 358 *     The SVGA device may choose to support a maximum number of
 359 *     user-defined GMR IDs. This register holds the number of supported
 360 *     IDs. (The maximum supported ID plus 1)
 361 *
 362 *   SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH --
 363 *
 364 *     Read-only.
 365 *     The SVGA device may choose to put a limit on the total number
 366 *     of SVGAGuestMemDescriptor structures it will read when defining
 367 *     a single GMR.
 368 *
 369 * The descriptor structure is an array of SVGAGuestMemDescriptor
 370 * structures. Each structure may do one of three things:
 371 *
 372 *   - Terminate the GMR descriptor list.
 373 *     (ppn==0, numPages==0)
 374 *
 375 *   - Add a PPN or range of PPNs to the GMR's virtual address space.
 376 *     (ppn != 0, numPages != 0)
 377 *
 378 *   - Provide the PPN of the next SVGAGuestMemDescriptor, in order to
 379 *     support multi-page GMR descriptor tables without forcing the
 380 *     driver to allocate physically contiguous memory.
 381 *     (ppn != 0, numPages == 0)
 382 *
 383 * Note that each physical page of SVGAGuestMemDescriptor structures
 384 * can describe at least 2MB of guest memory. If the driver needs to
 385 * use more than one page of descriptor structures, it must use one of
 386 * its SVGAGuestMemDescriptors to point to an additional page.  The
 387 * device will never automatically cross a page boundary.
 388 *
 389 * Once the driver has described a GMR, it is immediately available
 390 * for use via any FIFO command that uses an SVGAGuestPtr structure.
 391 * These pointers include a GMR identifier plus an offset into that
 392 * GMR.
 393 *
 394 * The driver must check the SVGA_CAP_GMR bit before using the GMR
 395 * registers.
 396 */
 397
 398/*
 399 * Special GMR IDs, allowing SVGAGuestPtrs to point to framebuffer
 400 * memory as well.  In the future, these IDs could even be used to
 401 * allow legacy memory regions to be redefined by the guest as GMRs.
 402 *
 403 * Using the guest framebuffer (GFB) at BAR1 for general purpose DMA
 404 * is being phased out. Please try to use user-defined GMRs whenever
 405 * possible.
 406 */
 407#define SVGA_GMR_NULL         ((uint32) -1)
 408#define SVGA_GMR_FRAMEBUFFER  ((uint32) -2)  /* Guest Framebuffer (GFB) */
 409
 410typedef
 411#include "vmware_pack_begin.h"
 412struct SVGAGuestMemDescriptor {
 413   uint32 ppn;
 414   uint32 numPages;
 415}
 416#include "vmware_pack_end.h"
 417SVGAGuestMemDescriptor;
 418
 419typedef
 420#include "vmware_pack_begin.h"
 421struct SVGAGuestPtr {
 422   uint32 gmrId;
 423   uint32 offset;
 424}
 425#include "vmware_pack_end.h"
 426SVGAGuestPtr;
 427
 428/*
 429 * Register based command buffers --
 430 *
 431 * Provide an SVGA device interface that allows the guest to submit
 432 * command buffers to the SVGA device through an SVGA device register.
 433 * The metadata for each command buffer is contained in the
 434 * SVGACBHeader structure along with the return status codes.
 435 *
 436 * The SVGA device supports command buffers if
 437 * SVGA_CAP_COMMAND_BUFFERS is set in the device caps register.  The
 438 * fifo must be enabled for command buffers to be submitted.
 439 *
 440 * Command buffers are submitted when the guest writing the 64 byte
 441 * aligned physical address into the SVGA_REG_COMMAND_LOW and
 442 * SVGA_REG_COMMAND_HIGH.  SVGA_REG_COMMAND_HIGH contains the upper 32
 443 * bits of the physical address.  SVGA_REG_COMMAND_LOW contains the
 444 * lower 32 bits of the physical address, since the command buffer
 445 * headers are required to be 64 byte aligned the lower 6 bits are
 446 * used for the SVGACBContext value.  Writing to SVGA_REG_COMMAND_LOW
 447 * submits the command buffer to the device and queues it for
 448 * execution.  The SVGA device supports at least
 449 * SVGA_CB_MAX_QUEUED_PER_CONTEXT command buffers that can be queued
 450 * per context and if that limit is reached the device will write the
 451 * status SVGA_CB_STATUS_QUEUE_FULL to the status value of the command
 452 * buffer header synchronously and not raise any IRQs.
 453 *
 454 * It is invalid to submit a command buffer without a valid physical
 455 * address and results are undefined.
 456 *
 457 * The device guarantees that command buffers of size SVGA_CB_MAX_SIZE
 458 * will be supported.  If a larger command buffer is submitted results
 459 * are unspecified and the device will either complete the command
 460 * buffer or return an error.
 461 *
 462 * The device guarantees that any individual command in a command
 463 * buffer can be up to SVGA_CB_MAX_COMMAND_SIZE in size which is
 464 * enough to fit a 64x64 color-cursor definition.  If the command is
 465 * too large the device is allowed to process the command or return an
 466 * error.
 467 *
 468 * The device context is a special SVGACBContext that allows for
 469 * synchronous register like accesses with the flexibility of
 470 * commands.  There is a different command set defined by
 471 * SVGADeviceContextCmdId.  The commands in each command buffer is not
 472 * allowed to straddle physical pages.
 473 *
 474 * The offset field which is available starting with the
 475 * SVGA_CAP_CMD_BUFFERS_2 cap bit can be set by the guest to bias the
 476 * start of command processing into the buffer.  If an error is
 477 * encountered the errorOffset will still be relative to the specific
 478 * PA, not biased by the offset.  When the command buffer is finished
 479 * the guest should not read the offset field as there is no guarantee
 480 * what it will set to.
 481 *
 482 * When the SVGA_CAP_HP_CMD_QUEUE cap bit is set a new command queue
 483 * SVGA_CB_CONTEXT_1 is available.  Commands submitted to this queue
 484 * will be executed as quickly as possible by the SVGA device
 485 * potentially before already queued commands on SVGA_CB_CONTEXT_0.
 486 * The SVGA device guarantees that any command buffers submitted to
 487 * SVGA_CB_CONTEXT_0 will be executed after any _already_ submitted
 488 * command buffers to SVGA_CB_CONTEXT_1.
 489 */
 490
 491#define SVGA_CB_MAX_SIZE (512 * 1024)  /* 512 KB */
 492#define SVGA_CB_MAX_QUEUED_PER_CONTEXT 32
 493#define SVGA_CB_MAX_COMMAND_SIZE (32 * 1024) /* 32 KB */
 494
 495#define SVGA_CB_CONTEXT_MASK 0x3f
 496typedef enum {
 497   SVGA_CB_CONTEXT_DEVICE = 0x3f,
 498   SVGA_CB_CONTEXT_0      = 0x0,
 499   SVGA_CB_CONTEXT_1      = 0x1, /* Supported with SVGA_CAP_HP_CMD_QUEUE */
 500   SVGA_CB_CONTEXT_MAX    = 0x2,
 501} SVGACBContext;
 502
 503
 504typedef enum {
 505   /*
 506    * The guest is supposed to write SVGA_CB_STATUS_NONE to the status
 507    * field before submitting the command buffer header, the host will
 508    * change the value when it is done with the command buffer.
 509    */
 510   SVGA_CB_STATUS_NONE             = 0,
 511
 512   /*
 513    * Written by the host when a command buffer completes successfully.
 514    * The device raises an IRQ with SVGA_IRQFLAG_COMMAND_BUFFER unless
 515    * the SVGA_CB_FLAG_NO_IRQ flag is set.
 516    */
 517   SVGA_CB_STATUS_COMPLETED        = 1,
 518
 519   /*
 520    * Written by the host synchronously with the command buffer
 521    * submission to indicate the command buffer was not submitted.  No
 522    * IRQ is raised.
 523    */
 524   SVGA_CB_STATUS_QUEUE_FULL       = 2,
 525
 526   /*
 527    * Written by the host when an error was detected parsing a command
 528    * in the command buffer, errorOffset is written to contain the
 529    * offset to the first byte of the failing command.  The device
 530    * raises the IRQ with both SVGA_IRQFLAG_ERROR and
 531    * SVGA_IRQFLAG_COMMAND_BUFFER.  Some of the commands may have been
 532    * processed.
 533    */
 534   SVGA_CB_STATUS_COMMAND_ERROR    = 3,
 535
 536   /*
 537    * Written by the host if there is an error parsing the command
 538    * buffer header.  The device raises the IRQ with both
 539    * SVGA_IRQFLAG_ERROR and SVGA_IRQFLAG_COMMAND_BUFFER.  The device
 540    * did not processes any of the command buffer.
 541    */
 542   SVGA_CB_STATUS_CB_HEADER_ERROR  = 4,
 543
 544   /*
 545    * Written by the host if the guest requested the host to preempt
 546    * the command buffer.  The device will not raise any IRQs and the
 547    * command buffer was not processed.
 548    */
 549   SVGA_CB_STATUS_PREEMPTED        = 5,
 550
 551   /*
 552    * Written by the host synchronously with the command buffer
 553    * submission to indicate the the command buffer was not submitted
 554    * due to an error.  No IRQ is raised.
 555    */
 556   SVGA_CB_STATUS_SUBMISSION_ERROR = 6,
 557
 558   /*
 559    * Written by the host when the host finished a
 560    * SVGA_DC_CMD_ASYNC_STOP_QUEUE request for this command buffer
 561    * queue.  The offset of the first byte not processed is stored in
 562    * the errorOffset field of the command buffer header.  All guest
 563    * visible side effects of commands till that point are guaranteed
 564    * to be finished before this is written.  The
 565    * SVGA_IRQFLAG_COMMAND_BUFFER IRQ is raised as long as the
 566    * SVGA_CB_FLAG_NO_IRQ is not set.
 567    */
 568   SVGA_CB_STATUS_PARTIAL_COMPLETE = 7,
 569} SVGACBStatus;
 570
 571typedef enum {
 572   SVGA_CB_FLAG_NONE       = 0,
 573   SVGA_CB_FLAG_NO_IRQ     = 1 << 0,
 574   SVGA_CB_FLAG_DX_CONTEXT = 1 << 1,
 575   SVGA_CB_FLAG_MOB        = 1 << 2,
 576} SVGACBFlags;
 577
 578typedef
 579#include "vmware_pack_begin.h"
 580struct {
 581   volatile SVGACBStatus status; /* Modified by device. */
 582   volatile uint32 errorOffset;  /* Modified by device. */
 583   uint64 id;
 584   SVGACBFlags flags;
 585   uint32 length;
 586   union {
 587      PA pa;
 588      struct {
 589         SVGAMobId mobid;
 590         uint32 mobOffset;
 591      } mob;
 592   } ptr;
 593   uint32 offset; /* Valid if CMD_BUFFERS_2 cap set, must be zero otherwise,
 594                   * modified by device.
 595                   */
 596   uint32 dxContext; /* Valid if DX_CONTEXT flag set, must be zero otherwise */
 597   uint32 mustBeZero[6];
 598}
 599#include "vmware_pack_end.h"
 600SVGACBHeader;
 601
 602typedef enum {
 603   SVGA_DC_CMD_NOP                   = 0,
 604   SVGA_DC_CMD_START_STOP_CONTEXT    = 1,
 605   SVGA_DC_CMD_PREEMPT               = 2,
 606   SVGA_DC_CMD_START_QUEUE           = 3, /* Requires SVGA_CAP_HP_CMD_QUEUE */
 607   SVGA_DC_CMD_ASYNC_STOP_QUEUE      = 4, /* Requires SVGA_CAP_HP_CMD_QUEUE */
 608   SVGA_DC_CMD_EMPTY_CONTEXT_QUEUE   = 5, /* Requires SVGA_CAP_HP_CMD_QUEUE */
 609   SVGA_DC_CMD_MAX                   = 6,
 610} SVGADeviceContextCmdId;
 611
 612/*
 613 * Starts or stops both SVGA_CB_CONTEXT_0 and SVGA_CB_CONTEXT_1.
 614 */
 615
 616typedef struct SVGADCCmdStartStop {
 617   uint32 enable;
 618   SVGACBContext context; /* Must be zero */
 619} SVGADCCmdStartStop;
 620
 621/*
 622 * SVGADCCmdPreempt --
 623 *
 624 * This command allows the guest to request that all command buffers
 625 * on SVGA_CB_CONTEXT_0 be preempted that can be.  After execution
 626 * of this command all command buffers that were preempted will
 627 * already have SVGA_CB_STATUS_PREEMPTED written into the status
 628 * field.  The device might still be processing a command buffer,
 629 * assuming execution of it started before the preemption request was
 630 * received.  Specifying the ignoreIDZero flag to TRUE will cause the
 631 * device to not preempt command buffers with the id field in the
 632 * command buffer header set to zero.
 633 */
 634
 635typedef struct SVGADCCmdPreempt {
 636   SVGACBContext context; /* Must be zero */
 637   uint32 ignoreIDZero;
 638} SVGADCCmdPreempt;
 639
 640/*
 641 * Starts the requested command buffer processing queue.  Valid only
 642 * if the SVGA_CAP_HP_CMD_QUEUE cap is set.
 643 *
 644 * For a command queue to be considered runnable it must be enabled
 645 * and any corresponding higher priority queues must also be enabled.
 646 * For example in order for command buffers to be processed on
 647 * SVGA_CB_CONTEXT_0 both SVGA_CB_CONTEXT_0 and SVGA_CB_CONTEXT_1 must
 648 * be enabled.  But for commands to be runnable on SVGA_CB_CONTEXT_1
 649 * only that queue must be enabled.
 650 */
 651
 652typedef struct SVGADCCmdStartQueue {
 653   SVGACBContext context;
 654} SVGADCCmdStartQueue;
 655
 656/*
 657 * Requests the SVGA device to stop processing the requested command
 658 * buffer queue as soon as possible.  The guest knows the stop has
 659 * completed when one of the following happens.
 660 *
 661 * 1) A command buffer status of SVGA_CB_STATUS_PARTIAL_COMPLETE is returned
 662 * 2) A command buffer error is encountered with would stop the queue
 663 *    regardless of the async stop request.
 664 * 3) All command buffers that have been submitted complete successfully.
 665 * 4) The stop completes synchronously if no command buffers are
 666 *    active on the queue when it is issued.
 667 *
 668 * If the command queue is not in a runnable state there is no
 669 * guarentee this async stop will finish.  For instance if the high
 670 * priority queue is not enabled and a stop is requested on the low
 671 * priority queue, the high priority queue must be reenabled to
 672 * guarantee that the async stop will finish.
 673 *
 674 * This command along with SVGA_DC_CMD_EMPTY_CONTEXT_QUEUE can be used
 675 * to implement mid command buffer preemption.
 676 *
 677 * Valid only if the SVGA_CAP_HP_CMD_QUEUE cap is set.
 678 */
 679
 680typedef struct SVGADCCmdAsyncStopQueue {
 681   SVGACBContext context;
 682} SVGADCCmdAsyncStopQueue;
 683
 684/*
 685 * Requests the SVGA device to throw away any full command buffers on
 686 * the requested command queue that have not been started.  For a
 687 * driver to know which command buffers were thrown away a driver
 688 * should only issue this command when the queue is stopped, for
 689 * whatever reason.
 690 */
 691
 692typedef struct SVGADCCmdEmptyQueue {
 693   SVGACBContext context;
 694} SVGADCCmdEmptyQueue;
 695
 696
 697/*
 698 * SVGAGMRImageFormat --
 699 *
 700 *    This is a packed representation of the source 2D image format
 701 *    for a GMR-to-screen blit. Currently it is defined as an encoding
 702 *    of the screen's color depth and bits-per-pixel, however, 16 bits
 703 *    are reserved for future use to identify other encodings (such as
 704 *    RGBA or higher-precision images).
 705 *
 706 *    Currently supported formats:
 707 *
 708 *       bpp depth  Format Name
 709 *       --- -----  -----------
 710 *        32    24  32-bit BGRX
 711 *        24    24  24-bit BGR
 712 *        16    16  RGB 5-6-5
 713 *        16    15  RGB 5-5-5
 714 *
 715 */
 716
 717typedef struct SVGAGMRImageFormat {
 718   union {
 719      struct {
 720         uint32 bitsPerPixel : 8;
 721         uint32 colorDepth   : 8;
 722         uint32 reserved     : 16;  /* Must be zero */
 723      };
 724
 725      uint32 value;
 726   };
 727} SVGAGMRImageFormat;
 728
 729typedef
 730#include "vmware_pack_begin.h"
 731struct SVGAGuestImage {
 732   SVGAGuestPtr         ptr;
 733
 734   /*
 735    * A note on interpretation of pitch: This value of pitch is the
 736    * number of bytes between vertically adjacent image
 737    * blocks. Normally this is the number of bytes between the first
 738    * pixel of two adjacent scanlines. With compressed textures,
 739    * however, this may represent the number of bytes between
 740    * compression blocks rather than between rows of pixels.
 741    *
 742    * XXX: Compressed textures currently must be tightly packed in guest memory.
 743    *
 744    * If the image is 1-dimensional, pitch is ignored.
 745    *
 746    * If 'pitch' is zero, the SVGA3D device calculates a pitch value
 747    * assuming each row of blocks is tightly packed.
 748    */
 749   uint32 pitch;
 750}
 751#include "vmware_pack_end.h"
 752SVGAGuestImage;
 753
 754/*
 755 * SVGAColorBGRX --
 756 *
 757 *    A 24-bit color format (BGRX), which does not depend on the
 758 *    format of the legacy guest framebuffer (GFB) or the current
 759 *    GMRFB state.
 760 */
 761
 762typedef struct SVGAColorBGRX {
 763   union {
 764      struct {
 765         uint32 b : 8;
 766         uint32 g : 8;
 767         uint32 r : 8;
 768         uint32 x : 8;  /* Unused */
 769      };
 770
 771      uint32 value;
 772   };
 773} SVGAColorBGRX;
 774
 775
 776/*
 777 * SVGASignedRect --
 778 * SVGASignedPoint --
 779 *
 780 *    Signed rectangle and point primitives. These are used by the new
 781 *    2D primitives for drawing to Screen Objects, which can occupy a
 782 *    signed virtual coordinate space.
 783 *
 784 *    SVGASignedRect specifies a half-open interval: the (left, top)
 785 *    pixel is part of the rectangle, but the (right, bottom) pixel is
 786 *    not.
 787 */
 788
 789typedef
 790#include "vmware_pack_begin.h"
 791struct {
 792   int32  left;
 793   int32  top;
 794   int32  right;
 795   int32  bottom;
 796}
 797#include "vmware_pack_end.h"
 798SVGASignedRect;
 799
 800typedef
 801#include "vmware_pack_begin.h"
 802struct {
 803   int32  x;
 804   int32  y;
 805}
 806#include "vmware_pack_end.h"
 807SVGASignedPoint;
 808
 809
 810/*
 811 * SVGA Device Capabilities
 812 *
 813 * Note the holes in the bitfield. Missing bits have been deprecated,
 814 * and must not be reused. Those capabilities will never be reported
 815 * by new versions of the SVGA device.
 816 *
 817 * SVGA_CAP_IRQMASK --
 818 *    Provides device interrupts.  Adds device register SVGA_REG_IRQMASK
 819 *    to set interrupt mask and direct I/O port SVGA_IRQSTATUS_PORT to
 820 *    set/clear pending interrupts.
 821 *
 822 * SVGA_CAP_GMR --
 823 *    Provides synchronous mapping of guest memory regions (GMR).
 824 *    Adds device registers SVGA_REG_GMR_ID, SVGA_REG_GMR_DESCRIPTOR,
 825 *    SVGA_REG_GMR_MAX_IDS, and SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH.
 826 *
 827 * SVGA_CAP_TRACES --
 828 *    Allows framebuffer trace-based updates even when FIFO is enabled.
 829 *    Adds device register SVGA_REG_TRACES.
 830 *
 831 * SVGA_CAP_GMR2 --
 832 *    Provides asynchronous commands to define and remap guest memory
 833 *    regions.  Adds device registers SVGA_REG_GMRS_MAX_PAGES and
 834 *    SVGA_REG_MEMORY_SIZE.
 835 *
 836 * SVGA_CAP_SCREEN_OBJECT_2 --
 837 *    Allow screen object support, and require backing stores from the
 838 *    guest for each screen object.
 839 *
 840 * SVGA_CAP_COMMAND_BUFFERS --
 841 *    Enable register based command buffer submission.
 842 *
 843 * SVGA_CAP_DEAD1 --
 844 *    This cap was incorrectly used by old drivers and should not be
 845 *    reused.
 846 *
 847 * SVGA_CAP_CMD_BUFFERS_2 --
 848 *    Enable support for the prepend command buffer submision
 849 *    registers.  SVGA_REG_CMD_PREPEND_LOW and
 850 *    SVGA_REG_CMD_PREPEND_HIGH.
 851 *
 852 * SVGA_CAP_GBOBJECTS --
 853 *    Enable guest-backed objects and surfaces.
 854 *
 855 * SVGA_CAP_DX --
 856 *    Enable support for DX commands, and command buffers in a mob.
 857 *
 858 * SVGA_CAP_HP_CMD_QUEUE --
 859 *    Enable support for the high priority command queue, and the
 860 *    ScreenCopy command.
 861 *
 862 * SVGA_CAP_NO_BB_RESTRICTION --
 863 *    Allow ScreenTargets to be defined without regard to the 32-bpp
 864 *    bounding-box memory restrictions. ie:
 865 *
 866 *    The summed memory usage of all screens (assuming they were defined as
 867 *    32-bpp) must always be less than the value of the
 868 *    SVGA_REG_MAX_PRIMARY_MEM register.
 869 *
 870 *    If this cap is not present, the 32-bpp bounding box around all screens
 871 *    must additionally be under the value of the SVGA_REG_MAX_PRIMARY_MEM
 872 *    register.
 873 *
 874 *    If the cap is present, the bounding box restriction is lifted (and only
 875 *    the screen-sum limit applies).
 876 *
 877 *    (Note that this is a slight lie... there is still a sanity limit on any
 878 *     dimension of the topology to be less than SVGA_SCREEN_ROOT_LIMIT, even
 879 *     when SVGA_CAP_NO_BB_RESTRICTION is present, but that should be
 880 *     large enough to express any possible topology without holes between
 881 *     monitors.)
 882 *
 883 * SVGA_CAP_CAP2_REGISTER --
 884 *    If this cap is present, the SVGA_REG_CAP2 register is supported.
 885 */
 886
 887#define SVGA_CAP_NONE               0x00000000
 888#define SVGA_CAP_RECT_COPY          0x00000002
 889#define SVGA_CAP_CURSOR             0x00000020
 890#define SVGA_CAP_CURSOR_BYPASS      0x00000040
 891#define SVGA_CAP_CURSOR_BYPASS_2    0x00000080
 892#define SVGA_CAP_8BIT_EMULATION     0x00000100
 893#define SVGA_CAP_ALPHA_CURSOR       0x00000200
 894#define SVGA_CAP_3D                 0x00004000
 895#define SVGA_CAP_EXTENDED_FIFO      0x00008000
 896#define SVGA_CAP_MULTIMON           0x00010000
 897#define SVGA_CAP_PITCHLOCK          0x00020000
 898#define SVGA_CAP_IRQMASK            0x00040000
 899#define SVGA_CAP_DISPLAY_TOPOLOGY   0x00080000
 900#define SVGA_CAP_GMR                0x00100000
 901#define SVGA_CAP_TRACES             0x00200000
 902#define SVGA_CAP_GMR2               0x00400000
 903#define SVGA_CAP_SCREEN_OBJECT_2    0x00800000
 904#define SVGA_CAP_COMMAND_BUFFERS    0x01000000
 905#define SVGA_CAP_DEAD1              0x02000000
 906#define SVGA_CAP_CMD_BUFFERS_2      0x04000000
 907#define SVGA_CAP_GBOBJECTS          0x08000000
 908#define SVGA_CAP_DX                 0x10000000
 909#define SVGA_CAP_HP_CMD_QUEUE       0x20000000
 910#define SVGA_CAP_NO_BB_RESTRICTION  0x40000000
 911#define SVGA_CAP_CAP2_REGISTER      0x80000000
 912
 913/*
 914 * The SVGA_REG_CAP2 register is an additional set of SVGA capability bits.
 915 *
 916 * SVGA_CAP2_GROW_OTABLE --
 917 *      Allow the GrowOTable/DXGrowCOTable commands.
 918 *
 919 * SVGA_CAP2_INTRA_SURFACE_COPY --
 920 *      Allow the IntraSurfaceCopy command.
 921 *
 922 * SVGA_CAP2_DX2 --
 923 *      Allow the DefineGBSurface_v3, WholeSurfaceCopy, WriteZeroSurface, and
 924 *      HintZeroSurface commands, and the SVGA_REG_GUEST_DRIVER_ID register.
 925 *
 926 * SVGA_CAP2_GB_MEMSIZE_2 --
 927 *      Allow the SVGA_REG_GBOBJECT_MEM_SIZE_KB register.
 928 *
 929 * SVGA_CAP2_SCREENDMA_REG --
 930 *      Allow the SVGA_REG_SCREENDMA register.
 931 *
 932 * SVGA_CAP2_OTABLE_PTDEPTH_2 --
 933 *      Allow 2 level page tables for OTable commands.
 934 *
 935 * SVGA_CAP2_NON_MS_TO_MS_STRETCHBLT --
 936 *      Allow a stretch blt from a non-multisampled surface to a multisampled
 937 *      surface.
 938 *
 939 * SVGA_CAP2_CURSOR_MOB --
 940 *      Allow the SVGA_REG_CURSOR_MOBID register.
 941 *
 942 * SVGA_CAP2_MSHINT --
 943 *      Allow the SVGA_REG_MSHINT register.
 944 *
 945 * SVGA_CAP2_DX3 --
 946 *      Allows the DefineGBSurface_v4 command.
 947 *      Allows the DXDefineDepthStencilView_v2, DXDefineStreamOutputWithMob,
 948 *      and DXBindStreamOutput commands if 3D is also available.
 949 *      Allows the DXPredStagingCopy and DXStagingCopy commands if SM41
 950 *      is also available.
 951 *
 952 * SVGA_CAP2_RESERVED --
 953 *      Reserve the last bit for extending the SVGA capabilities to some
 954 *      future mechanisms.
 955 */
 956#define SVGA_CAP2_NONE                    0x00000000
 957#define SVGA_CAP2_GROW_OTABLE             0x00000001
 958#define SVGA_CAP2_INTRA_SURFACE_COPY      0x00000002
 959#define SVGA_CAP2_DX2                     0x00000004
 960#define SVGA_CAP2_GB_MEMSIZE_2            0x00000008
 961#define SVGA_CAP2_SCREENDMA_REG           0x00000010
 962#define SVGA_CAP2_OTABLE_PTDEPTH_2        0x00000020
 963#define SVGA_CAP2_NON_MS_TO_MS_STRETCHBLT 0x00000040
 964#define SVGA_CAP2_CURSOR_MOB              0x00000080
 965#define SVGA_CAP2_MSHINT                  0x00000100
 966#define SVGA_CAP2_DX3                     0x00000400
 967#define SVGA_CAP2_RESERVED                0x80000000
 968
 969
 970/*
 971 * The Guest can optionally read some SVGA device capabilities through
 972 * the backdoor with command BDOOR_CMD_GET_SVGA_CAPABILITIES before
 973 * the SVGA device is initialized.  The type of capability the guest
 974 * is requesting from the SVGABackdoorCapType enum should be placed in
 975 * the upper 16 bits of the backdoor command id (ECX).  On success the
 976 * the value of EBX will be set to BDOOR_MAGIC and EAX will be set to
 977 * the requested capability.  If the command is not supported then EBX
 978 * will be left unchanged and EAX will be set to -1.  Because it is
 979 * possible that -1 is the value of the requested cap the correct way
 980 * to check if the command was successful is to check if EBX was changed
 981 * to BDOOR_MAGIC making sure to initialize the register to something
 982 * else first.
 983 */
 984
 985typedef enum {
 986   SVGABackdoorCapDeviceCaps = 0,
 987   SVGABackdoorCapFifoCaps = 1,
 988   SVGABackdoorCap3dHWVersion = 2,
 989   SVGABackdoorCapDeviceCaps2 = 3,
 990   SVGABackdoorCapDevelCaps = 4,
 991   SVGABackdoorDevelRenderer = 5,
 992   SVGABackdoorCapMax = 6,
 993} SVGABackdoorCapType;
 994
 995
 996/*
 997 * FIFO register indices.
 998 *
 999 * The FIFO is a chunk of device memory mapped into guest physmem.  It
1000 * is always treated as 32-bit words.
1001 *
1002 * The guest driver gets to decide how to partition it between
1003 * - FIFO registers (there are always at least 4, specifying where the
1004 *   following data area is and how much data it contains; there may be
1005 *   more registers following these, depending on the FIFO protocol
1006 *   version in use)
1007 * - FIFO data, written by the guest and slurped out by the VMX.
1008 * These indices are 32-bit word offsets into the FIFO.
1009 */
1010
1011enum {
1012   /*
1013    * Block 1 (basic registers): The originally defined FIFO registers.
1014    * These exist and are valid for all versions of the FIFO protocol.
1015    */
1016
1017   SVGA_FIFO_MIN = 0,
1018   SVGA_FIFO_MAX,       /* The distance from MIN to MAX must be at least 10K */
1019   SVGA_FIFO_NEXT_CMD,
1020   SVGA_FIFO_STOP,
1021
1022   /*
1023    * Block 2 (extended registers): Mandatory registers for the extended
1024    * FIFO.  These exist if the SVGA caps register includes
1025    * SVGA_CAP_EXTENDED_FIFO; some of them are valid only if their
1026    * associated capability bit is enabled.
1027    *
1028    * Note that when originally defined, SVGA_CAP_EXTENDED_FIFO implied
1029    * support only for (FIFO registers) CAPABILITIES, FLAGS, and FENCE.
1030    * This means that the guest has to test individually (in most cases
1031    * using FIFO caps) for the presence of registers after this; the VMX
1032    * can define "extended FIFO" to mean whatever it wants, and currently
1033    * won't enable it unless there's room for that set and much more.
1034    */
1035
1036   SVGA_FIFO_CAPABILITIES = 4,
1037   SVGA_FIFO_FLAGS,
1038   /* Valid with SVGA_FIFO_CAP_FENCE: */
1039   SVGA_FIFO_FENCE,
1040
1041   /*
1042    * Block 3a (optional extended registers): Additional registers for the
1043    * extended FIFO, whose presence isn't actually implied by
1044    * SVGA_CAP_EXTENDED_FIFO; these exist if SVGA_FIFO_MIN is high enough to
1045    * leave room for them.
1046    *
1047    * These in block 3a, the VMX currently considers mandatory for the
1048    * extended FIFO.
1049    */
1050
1051   /* Valid if exists (i.e. if extended FIFO enabled): */
1052   SVGA_FIFO_3D_HWVERSION,       /* See SVGA3dHardwareVersion in svga3d_reg.h */
1053   /* Valid with SVGA_FIFO_CAP_PITCHLOCK: */
1054   SVGA_FIFO_PITCHLOCK,
1055
1056   /* Valid with SVGA_FIFO_CAP_CURSOR_BYPASS_3: */
1057   SVGA_FIFO_CURSOR_ON,          /* Cursor bypass 3 show/hide register */
1058   SVGA_FIFO_CURSOR_X,           /* Cursor bypass 3 x register */
1059   SVGA_FIFO_CURSOR_Y,           /* Cursor bypass 3 y register */
1060   SVGA_FIFO_CURSOR_COUNT,       /* Incremented when any of the other 3 change */
1061   SVGA_FIFO_CURSOR_LAST_UPDATED,/* Last time the host updated the cursor */
1062
1063   /* Valid with SVGA_FIFO_CAP_RESERVE: */
1064   SVGA_FIFO_RESERVED,           /* Bytes past NEXT_CMD with real contents */
1065
1066   /*
1067    * Valid with SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2:
1068    *
1069    * By default this is SVGA_ID_INVALID, to indicate that the cursor
1070    * coordinates are specified relative to the virtual root. If this
1071    * is set to a specific screen ID, cursor position is reinterpreted
1072    * as a signed offset relative to that screen's origin.
1073    */
1074   SVGA_FIFO_CURSOR_SCREEN_ID,
1075
1076   /*
1077    * Valid with SVGA_FIFO_CAP_DEAD
1078    *
1079    * An arbitrary value written by the host, drivers should not use it.
1080    */
1081   SVGA_FIFO_DEAD,
1082
1083   /*
1084    * Valid with SVGA_FIFO_CAP_3D_HWVERSION_REVISED:
1085    *
1086    * Contains 3D HWVERSION (see SVGA3dHardwareVersion in svga3d_reg.h)
1087    * on platforms that can enforce graphics resource limits.
1088    */
1089   SVGA_FIFO_3D_HWVERSION_REVISED,
1090
1091   /*
1092    * XXX: The gap here, up until SVGA_FIFO_3D_CAPS, can be used for new
1093    * registers, but this must be done carefully and with judicious use of
1094    * capability bits, since comparisons based on SVGA_FIFO_MIN aren't
1095    * enough to tell you whether the register exists: we've shipped drivers
1096    * and products that used SVGA_FIFO_3D_CAPS but didn't know about some of
1097    * the earlier ones.  The actual order of introduction was:
1098    * - PITCHLOCK
1099    * - 3D_CAPS
1100    * - CURSOR_* (cursor bypass 3)
1101    * - RESERVED
1102    * So, code that wants to know whether it can use any of the
1103    * aforementioned registers, or anything else added after PITCHLOCK and
1104    * before 3D_CAPS, needs to reason about something other than
1105    * SVGA_FIFO_MIN.
1106    */
1107
1108   /*
1109    * 3D caps block space; valid with 3D hardware version >=
1110    * SVGA3D_HWVERSION_WS6_B1.
1111    */
1112   SVGA_FIFO_3D_CAPS      = 32,
1113   SVGA_FIFO_3D_CAPS_LAST = 32 + 255,
1114
1115   /*
1116    * End of VMX's current definition of "extended-FIFO registers".
1117    * Registers before here are always enabled/disabled as a block; either
1118    * the extended FIFO is enabled and includes all preceding registers, or
1119    * it's disabled entirely.
1120    *
1121    * Block 3b (truly optional extended registers): Additional registers for
1122    * the extended FIFO, which the VMX already knows how to enable and
1123    * disable with correct granularity.
1124    *
1125    * Registers after here exist if and only if the guest SVGA driver
1126    * sets SVGA_FIFO_MIN high enough to leave room for them.
1127    */
1128
1129   /* Valid if register exists: */
1130   SVGA_FIFO_GUEST_3D_HWVERSION, /* Guest driver's 3D version */
1131   SVGA_FIFO_FENCE_GOAL,         /* Matching target for SVGA_IRQFLAG_FENCE_GOAL */
1132   SVGA_FIFO_BUSY,               /* See "FIFO Synchronization Registers" */
1133
1134   /*
1135    * Always keep this last.  This defines the maximum number of
1136    * registers we know about.  At power-on, this value is placed in
1137    * the SVGA_REG_MEM_REGS register, and we expect the guest driver
1138    * to allocate this much space in FIFO memory for registers.
1139    */
1140    SVGA_FIFO_NUM_REGS
1141};
1142
1143
1144/*
1145 * Definition of registers included in extended FIFO support.
1146 *
1147 * The guest SVGA driver gets to allocate the FIFO between registers
1148 * and data.  It must always allocate at least 4 registers, but old
1149 * drivers stopped there.
1150 *
1151 * The VMX will enable extended FIFO support if and only if the guest
1152 * left enough room for all registers defined as part of the mandatory
1153 * set for the extended FIFO.
1154 *
1155 * Note that the guest drivers typically allocate the FIFO only at
1156 * initialization time, not at mode switches, so it's likely that the
1157 * number of FIFO registers won't change without a reboot.
1158 *
1159 * All registers less than this value are guaranteed to be present if
1160 * svgaUser->fifo.extended is set. Any later registers must be tested
1161 * individually for compatibility at each use (in the VMX).
1162 *
1163 * This value is used only by the VMX, so it can change without
1164 * affecting driver compatibility; keep it that way?
1165 */
1166#define SVGA_FIFO_EXTENDED_MANDATORY_REGS  (SVGA_FIFO_3D_CAPS_LAST + 1)
1167
1168
1169/*
1170 * FIFO Synchronization Registers
1171 *
1172 *  SVGA_REG_SYNC --
1173 *
1174 *       The SYNC register can be used by the guest driver to signal to the
1175 *       device that the guest driver is waiting for previously submitted
1176 *       commands to complete.
1177 *
1178 *       When the guest driver writes to the SYNC register, the device sets
1179 *       the BUSY register to TRUE, and starts processing the submitted commands
1180 *       (if it was not already doing so).  When all previously submitted
1181 *       commands are finished and the device is idle again, it sets the BUSY
1182 *       register back to FALSE.  (If the guest driver submits new commands
1183 *       after writing the SYNC register, the new commands are not guaranteed
1184 *       to have been procesesd.)
1185 *
1186 *       When guest drivers are submitting commands using the FIFO, the device
1187 *       periodically polls to check for new FIFO commands when idle, which may
1188 *       introduce a delay in command processing.  If the guest-driver wants
1189 *       the commands to be processed quickly (which it typically does), it
1190 *       should write SYNC after each batch of commands is committed to the
1191 *       FIFO to immediately wake up the device.  For even better performance,
1192 *       the guest can use the SVGA_FIFO_BUSY register to avoid these extra
1193 *       SYNC writes if the device is already active, using the technique known
1194 *       as "Ringing the Doorbell" (described below).  (Note that command
1195 *       buffer submission implicitly wakes up the device, and so doesn't
1196 *       suffer from this problem.)
1197 *
1198 *       The SYNC register can also be used in combination with BUSY to
1199 *       synchronously ensure that all SVGA commands are processed (with both
1200 *       the FIFO and command-buffers).  To do this, the guest driver should
1201 *       write to SYNC, and then loop reading BUSY until BUSY returns FALSE.
1202 *       This technique is known as a "Legacy Sync".
1203 *
1204 *  SVGA_REG_BUSY --
1205 *
1206 *       This register is set to TRUE when SVGA_REG_SYNC is written,
1207 *       and is set back to FALSE when the device has finished processing
1208 *       all commands and is idle again.
1209 *
1210 *       Every read from the BUSY reigster will block for an undefined
1211 *       amount of time (normally until the device finishes some interesting
1212 *       work unit), or the device is idle.
1213 *
1214 *       Guest drivers can also do a partial Legacy Sync to check for some
1215 *       particular condition, for instance by stopping early when a fence
1216 *       passes before BUSY has been set back to FALSE.  This is particularly
1217 *       useful if the guest-driver knows that it is blocked waiting on the
1218 *       device, because it will yield CPU time back to the host.
1219 *
1220 *  SVGA_FIFO_BUSY --
1221 *
1222 *       The SVGA_FIFO_BUSY register is a fast way for the guest driver to check
1223 *       whether the device is actively processing FIFO commands before writing
1224 *       the more expensive SYNC register.
1225 *
1226 *       If this register reads as TRUE, the device is actively processing
1227 *       FIFO commands.
1228 *
1229 *       If this register reads as FALSE, the device may not be actively
1230 *       processing commands, and the guest driver should try
1231 *       "Ringing the Doorbell".
1232 *
1233 *       To Ring the Doorbell, the guest should:
1234 *
1235 *       1. Have already written their batch of commands into the FIFO.
1236 *       2. Check if the SVGA_FIFO_BUSY register is available by reading
1237 *          SVGA_FIFO_MIN.
1238 *       3. Read SVGA_FIFO_BUSY.  If it reads as TRUE, the device is actively
1239 *          processing FIFO commands, and no further action is necessary.
1240 *       4. If SVGA_FIFO_BUSY was FALSE, write TRUE to SVGA_REG_SYNC.
1241 *
1242 *       For maximum performance, this procedure should be followed after
1243 *       every meaningful batch of commands has been written into the FIFO.
1244 *       (Normally when the underlying application signals it's finished a
1245 *       meaningful work unit by calling Flush.)
1246 */
1247
1248
1249/*
1250 * FIFO Capabilities
1251 *
1252 *      Fence -- Fence register and command are supported
1253 *      Accel Front -- Front buffer only commands are supported
1254 *      Pitch Lock -- Pitch lock register is supported
1255 *      Video -- SVGA Video overlay units are supported
1256 *      Escape -- Escape command is supported
1257 *
1258 * SVGA_FIFO_CAP_SCREEN_OBJECT --
1259 *
1260 *    Provides dynamic multi-screen rendering, for improved Unity and
1261 *    multi-monitor modes. With Screen Object, the guest can
1262 *    dynamically create and destroy 'screens', which can represent
1263 *    Unity windows or virtual monitors. Screen Object also provides
1264 *    strong guarantees that DMA operations happen only when
1265 *    guest-initiated. Screen Object deprecates the BAR1 guest
1266 *    framebuffer (GFB) and all commands that work only with the GFB.
1267 *
1268 *    New registers:
1269 *       FIFO_CURSOR_SCREEN_ID, VIDEO_DATA_GMRID, VIDEO_DST_SCREEN_ID
1270 *
1271 *    New 2D commands:
1272 *       DEFINE_SCREEN, DESTROY_SCREEN, DEFINE_GMRFB, BLIT_GMRFB_TO_SCREEN,
1273 *       BLIT_SCREEN_TO_GMRFB, ANNOTATION_FILL, ANNOTATION_COPY
1274 *
1275 *    New 3D commands:
1276 *       BLIT_SURFACE_TO_SCREEN
1277 *
1278 *    New guarantees:
1279 *
1280 *       - The host will not read or write guest memory, including the GFB,
1281 *         except when explicitly initiated by a DMA command.
1282 *
1283 *       - All DMA, including legacy DMA like UPDATE and PRESENT_READBACK,
1284 *         is guaranteed to complete before any subsequent FENCEs.
1285 *
1286 *       - All legacy commands which affect a Screen (UPDATE, PRESENT,
1287 *         PRESENT_READBACK) as well as new Screen blit commands will
1288 *         all behave consistently as blits, and memory will be read
1289 *         or written in FIFO order.
1290 *
1291 *         For example, if you PRESENT from one SVGA3D surface to multiple
1292 *         places on the screen, the data copied will always be from the
1293 *         SVGA3D surface at the time the PRESENT was issued in the FIFO.
1294 *         This was not necessarily true on devices without Screen Object.
1295 *
1296 *         This means that on devices that support Screen Object, the
1297 *         PRESENT_READBACK command should not be necessary unless you
1298 *         actually want to read back the results of 3D rendering into
1299 *         system memory. (And for that, the BLIT_SCREEN_TO_GMRFB
1300 *         command provides a strict superset of functionality.)
1301 *
1302 *       - When a screen is resized, either using Screen Object commands or
1303 *         legacy multimon registers, its contents are preserved.
1304 *
1305 * SVGA_FIFO_CAP_GMR2 --
1306 *
1307 *    Provides new commands to define and remap guest memory regions (GMR).
1308 *
1309 *    New 2D commands:
1310 *       DEFINE_GMR2, REMAP_GMR2.
1311 *
1312 * SVGA_FIFO_CAP_3D_HWVERSION_REVISED --
1313 *
1314 *    Indicates new register SVGA_FIFO_3D_HWVERSION_REVISED exists.
1315 *    This register may replace SVGA_FIFO_3D_HWVERSION on platforms
1316 *    that enforce graphics resource limits.  This allows the platform
1317 *    to clear SVGA_FIFO_3D_HWVERSION and disable 3D in legacy guest
1318 *    drivers that do not limit their resources.
1319 *
1320 *    Note this is an alias to SVGA_FIFO_CAP_GMR2 because these indicators
1321 *    are codependent (and thus we use a single capability bit).
1322 *
1323 * SVGA_FIFO_CAP_SCREEN_OBJECT_2 --
1324 *
1325 *    Modifies the DEFINE_SCREEN command to include a guest provided
1326 *    backing store in GMR memory and the bytesPerLine for the backing
1327 *    store.  This capability requires the use of a backing store when
1328 *    creating screen objects.  However if SVGA_FIFO_CAP_SCREEN_OBJECT
1329 *    is present then backing stores are optional.
1330 *
1331 * SVGA_FIFO_CAP_DEAD --
1332 *
1333 *    Drivers should not use this cap bit.  This cap bit can not be
1334 *    reused since some hosts already expose it.
1335 */
1336
1337#define SVGA_FIFO_CAP_NONE                  0
1338#define SVGA_FIFO_CAP_FENCE             (1<<0)
1339#define SVGA_FIFO_CAP_ACCELFRONT        (1<<1)
1340#define SVGA_FIFO_CAP_PITCHLOCK         (1<<2)
1341#define SVGA_FIFO_CAP_VIDEO             (1<<3)
1342#define SVGA_FIFO_CAP_CURSOR_BYPASS_3   (1<<4)
1343#define SVGA_FIFO_CAP_ESCAPE            (1<<5)
1344#define SVGA_FIFO_CAP_RESERVE           (1<<6)
1345#define SVGA_FIFO_CAP_SCREEN_OBJECT     (1<<7)
1346#define SVGA_FIFO_CAP_GMR2              (1<<8)
1347#define SVGA_FIFO_CAP_3D_HWVERSION_REVISED  SVGA_FIFO_CAP_GMR2
1348#define SVGA_FIFO_CAP_SCREEN_OBJECT_2   (1<<9)
1349#define SVGA_FIFO_CAP_DEAD              (1<<10)
1350
1351
1352/*
1353 * FIFO Flags
1354 *
1355 *      Accel Front -- Driver should use front buffer only commands
1356 */
1357
1358#define SVGA_FIFO_FLAG_NONE                 0
1359#define SVGA_FIFO_FLAG_ACCELFRONT       (1<<0)
1360#define SVGA_FIFO_FLAG_RESERVED        (1<<31) /* Internal use only */
1361
1362/*
1363 * FIFO reservation sentinel value
1364 */
1365
1366#define SVGA_FIFO_RESERVED_UNKNOWN      0xffffffff
1367
1368
1369/*
1370 * ScreenDMA Register Values
1371 */
1372
1373#define SVGA_SCREENDMA_REG_UNDEFINED    0
1374#define SVGA_SCREENDMA_REG_NOT_PRESENT  1
1375#define SVGA_SCREENDMA_REG_PRESENT      2
1376#define SVGA_SCREENDMA_REG_MAX          3
1377
1378/*
1379 * Video overlay support
1380 */
1381
1382#define SVGA_NUM_OVERLAY_UNITS 32
1383
1384
1385/*
1386 * Video capabilities that the guest is currently using
1387 */
1388
1389#define SVGA_VIDEO_FLAG_COLORKEY        0x0001
1390
1391
1392/*
1393 * Offsets for the video overlay registers
1394 */
1395
1396enum {
1397   SVGA_VIDEO_ENABLED = 0,
1398   SVGA_VIDEO_FLAGS,
1399   SVGA_VIDEO_DATA_OFFSET,
1400   SVGA_VIDEO_FORMAT,
1401   SVGA_VIDEO_COLORKEY,
1402   SVGA_VIDEO_SIZE,          /* Deprecated */
1403   SVGA_VIDEO_WIDTH,
1404   SVGA_VIDEO_HEIGHT,
1405   SVGA_VIDEO_SRC_X,
1406   SVGA_VIDEO_SRC_Y,
1407   SVGA_VIDEO_SRC_WIDTH,
1408   SVGA_VIDEO_SRC_HEIGHT,
1409   SVGA_VIDEO_DST_X,         /* Signed int32 */
1410   SVGA_VIDEO_DST_Y,         /* Signed int32 */
1411   SVGA_VIDEO_DST_WIDTH,
1412   SVGA_VIDEO_DST_HEIGHT,
1413   SVGA_VIDEO_PITCH_1,
1414   SVGA_VIDEO_PITCH_2,
1415   SVGA_VIDEO_PITCH_3,
1416   SVGA_VIDEO_DATA_GMRID,    /* Optional, defaults to SVGA_GMR_FRAMEBUFFER */
1417   SVGA_VIDEO_DST_SCREEN_ID, /* Optional, defaults to virtual coords */
1418                             /* (SVGA_ID_INVALID) */
1419   SVGA_VIDEO_NUM_REGS
1420};
1421
1422
1423/*
1424 * SVGA Overlay Units
1425 *
1426 *      width and height relate to the entire source video frame.
1427 *      srcX, srcY, srcWidth and srcHeight represent subset of the source
1428 *      video frame to be displayed.
1429 */
1430
1431typedef
1432#include "vmware_pack_begin.h"
1433struct SVGAOverlayUnit {
1434   uint32 enabled;
1435   uint32 flags;
1436   uint32 dataOffset;
1437   uint32 format;
1438   uint32 colorKey;
1439   uint32 size;
1440   uint32 width;
1441   uint32 height;
1442   uint32 srcX;
1443   uint32 srcY;
1444   uint32 srcWidth;
1445   uint32 srcHeight;
1446   int32  dstX;
1447   int32  dstY;
1448   uint32 dstWidth;
1449   uint32 dstHeight;
1450   uint32 pitches[3];
1451   uint32 dataGMRId;
1452   uint32 dstScreenId;
1453}
1454#include "vmware_pack_end.h"
1455SVGAOverlayUnit;
1456
1457
1458/*
1459 * Guest display topology
1460 *
1461 * XXX: This structure is not part of the SVGA device's interface, and
1462 * doesn't really belong here.
1463 */
1464#define SVGA_INVALID_DISPLAY_ID ((uint32)-1)
1465
1466typedef struct SVGADisplayTopology {
1467   uint16 displayId;
1468   uint16 isPrimary;
1469   uint32 width;
1470   uint32 height;
1471   uint32 positionX;
1472   uint32 positionY;
1473} SVGADisplayTopology;
1474
1475
1476/*
1477 * SVGAScreenObject --
1478 *
1479 *    This is a new way to represent a guest's multi-monitor screen or
1480 *    Unity window. Screen objects are only supported if the
1481 *    SVGA_FIFO_CAP_SCREEN_OBJECT capability bit is set.
1482 *
1483 *    If Screen Objects are supported, they can be used to fully
1484 *    replace the functionality provided by the framebuffer registers
1485 *    (SVGA_REG_WIDTH, HEIGHT, etc.) and by SVGA_CAP_DISPLAY_TOPOLOGY.
1486 *
1487 *    The screen object is a struct with guaranteed binary
1488 *    compatibility. New flags can be added, and the struct may grow,
1489 *    but existing fields must retain their meaning.
1490 *
1491 *    Added with SVGA_FIFO_CAP_SCREEN_OBJECT_2 are required fields of
1492 *    a SVGAGuestPtr that is used to back the screen contents.  This
1493 *    memory must come from the GFB.  The guest is not allowed to
1494 *    access the memory and doing so will have undefined results.  The
1495 *    backing store is required to be page aligned and the size is
1496 *    padded to the next page boundry.  The number of pages is:
1497 *       (bytesPerLine * size.width * 4 + PAGE_SIZE - 1) / PAGE_SIZE
1498 *
1499 *    The pitch in the backingStore is required to be at least large
1500 *    enough to hold a 32bbp scanline.  It is recommended that the
1501 *    driver pad bytesPerLine for a potential performance win.
1502 *
1503 *    The cloneCount field is treated as a hint from the guest that
1504 *    the user wants this display to be cloned, countCount times.  A
1505 *    value of zero means no cloning should happen.
1506 */
1507
1508#define SVGA_SCREEN_MUST_BE_SET     (1 << 0)
1509#define SVGA_SCREEN_HAS_ROOT SVGA_SCREEN_MUST_BE_SET /* Deprecated */
1510#define SVGA_SCREEN_IS_PRIMARY      (1 << 1)
1511#define SVGA_SCREEN_FULLSCREEN_HINT (1 << 2)
1512
1513/*
1514 * Added with SVGA_FIFO_CAP_SCREEN_OBJECT_2.  When the screen is
1515 * deactivated the base layer is defined to lose all contents and
1516 * become black.  When a screen is deactivated the backing store is
1517 * optional.  When set backingPtr and bytesPerLine will be ignored.
1518 */
1519#define SVGA_SCREEN_DEACTIVATE  (1 << 3)
1520
1521/*
1522 * Added with SVGA_FIFO_CAP_SCREEN_OBJECT_2.  When this flag is set
1523 * the screen contents will be outputted as all black to the user
1524 * though the base layer contents is preserved.  The screen base layer
1525 * can still be read and written to like normal though the no visible
1526 * effect will be seen by the user.  When the flag is changed the
1527 * screen will be blanked or redrawn to the current contents as needed
1528 * without any extra commands from the driver.  This flag only has an
1529 * effect when the screen is not deactivated.
1530 */
1531#define SVGA_SCREEN_BLANKING (1 << 4)
1532
1533typedef
1534#include "vmware_pack_begin.h"
1535struct {
1536   uint32 structSize;   /* sizeof(SVGAScreenObject) */
1537   uint32 id;
1538   uint32 flags;
1539   struct {
1540      uint32 width;
1541      uint32 height;
1542   } size;
1543   struct {
1544      int32 x;
1545      int32 y;
1546   } root;
1547
1548   /*
1549    * Added and required by SVGA_FIFO_CAP_SCREEN_OBJECT_2, optional
1550    * with SVGA_FIFO_CAP_SCREEN_OBJECT.
1551    */
1552   SVGAGuestImage backingStore;
1553
1554   /*
1555    * The cloneCount field is treated as a hint from the guest that
1556    * the user wants this display to be cloned, cloneCount times.
1557    *
1558    * A value of zero means no cloning should happen.
1559    */
1560   uint32 cloneCount;
1561}
1562#include "vmware_pack_end.h"
1563SVGAScreenObject;
1564
1565
1566/*
1567 *  Commands in the command FIFO:
1568 *
1569 *  Command IDs defined below are used for the traditional 2D FIFO
1570 *  communication (not all commands are available for all versions of the
1571 *  SVGA FIFO protocol).
1572 *
1573 *  Note the holes in the command ID numbers: These commands have been
1574 *  deprecated, and the old IDs must not be reused.
1575 *
1576 *  Command IDs from 1000 to 2999 are reserved for use by the SVGA3D
1577 *  protocol.
1578 *
1579 *  Each command's parameters are described by the comments and
1580 *  structs below.
1581 */
1582
1583typedef enum {
1584   SVGA_CMD_INVALID_CMD           = 0,
1585   SVGA_CMD_UPDATE                = 1,
1586   SVGA_CMD_RECT_COPY             = 3,
1587   SVGA_CMD_RECT_ROP_COPY         = 14,
1588   SVGA_CMD_DEFINE_CURSOR         = 19,
1589   SVGA_CMD_DEFINE_ALPHA_CURSOR   = 22,
1590   SVGA_CMD_UPDATE_VERBOSE        = 25,
1591   SVGA_CMD_FRONT_ROP_FILL        = 29,
1592   SVGA_CMD_FENCE                 = 30,
1593   SVGA_CMD_ESCAPE                = 33,
1594   SVGA_CMD_DEFINE_SCREEN         = 34,
1595   SVGA_CMD_DESTROY_SCREEN        = 35,
1596   SVGA_CMD_DEFINE_GMRFB          = 36,
1597   SVGA_CMD_BLIT_GMRFB_TO_SCREEN  = 37,
1598   SVGA_CMD_BLIT_SCREEN_TO_GMRFB  = 38,
1599   SVGA_CMD_ANNOTATION_FILL       = 39,
1600   SVGA_CMD_ANNOTATION_COPY       = 40,
1601   SVGA_CMD_DEFINE_GMR2           = 41,
1602   SVGA_CMD_REMAP_GMR2            = 42,
1603   SVGA_CMD_DEAD                  = 43,
1604   SVGA_CMD_DEAD_2                = 44,
1605   SVGA_CMD_NOP                   = 45,
1606   SVGA_CMD_NOP_ERROR             = 46,
1607   SVGA_CMD_MAX
1608} SVGAFifoCmdId;
1609
1610#define SVGA_CMD_MAX_DATASIZE       (256 * 1024)
1611#define SVGA_CMD_MAX_ARGS           64
1612
1613
1614/*
1615 * SVGA_CMD_UPDATE --
1616 *
1617 *    This is a DMA transfer which copies from the Guest Framebuffer
1618 *    (GFB) at BAR1 + SVGA_REG_FB_OFFSET to any screens which
1619 *    intersect with the provided virtual rectangle.
1620 *
1621 *    This command does not support using arbitrary guest memory as a
1622 *    data source- it only works with the pre-defined GFB memory.
1623 *    This command also does not support signed virtual coordinates.
1624 *    If you have defined screens (using SVGA_CMD_DEFINE_SCREEN) with
1625 *    negative root x/y coordinates, the negative portion of those
1626 *    screens will not be reachable by this command.
1627 *
1628 *    This command is not necessary when using framebuffer
1629 *    traces. Traces are automatically enabled if the SVGA FIFO is
1630 *    disabled, and you may explicitly enable/disable traces using
1631 *    SVGA_REG_TRACES. With traces enabled, any write to the GFB will
1632 *    automatically act as if a subsequent SVGA_CMD_UPDATE was issued.
1633 *
1634 *    Traces and SVGA_CMD_UPDATE are the only supported ways to render
1635 *    pseudocolor screen updates. The newer Screen Object commands
1636 *    only support true color formats.
1637 *
1638 * Availability:
1639 *    Always available.
1640 */
1641
1642typedef
1643#include "vmware_pack_begin.h"
1644struct {
1645   uint32 x;
1646   uint32 y;
1647   uint32 width;
1648   uint32 height;
1649}
1650#include "vmware_pack_end.h"
1651SVGAFifoCmdUpdate;
1652
1653
1654/*
1655 * SVGA_CMD_RECT_COPY --
1656 *
1657 *    Perform a rectangular DMA transfer from one area of the GFB to
1658 *    another, and copy the result to any screens which intersect it.
1659 *
1660 * Availability:
1661 *    SVGA_CAP_RECT_COPY
1662 */
1663
1664typedef
1665#include "vmware_pack_begin.h"
1666struct {
1667   uint32 srcX;
1668   uint32 srcY;
1669   uint32 destX;
1670   uint32 destY;
1671   uint32 width;
1672   uint32 height;
1673}
1674#include "vmware_pack_end.h"
1675SVGAFifoCmdRectCopy;
1676
1677
1678/*
1679 * SVGA_CMD_RECT_ROP_COPY --
1680 *
1681 *    Perform a rectangular DMA transfer from one area of the GFB to
1682 *    another, and copy the result to any screens which intersect it.
1683 *    The value of ROP may only be SVGA_ROP_COPY, and this command is
1684 *    only supported for backwards compatibility reasons.
1685 *
1686 * Availability:
1687 *    SVGA_CAP_RECT_COPY
1688 */
1689
1690typedef
1691#include "vmware_pack_begin.h"
1692struct {
1693   uint32 srcX;
1694   uint32 srcY;
1695   uint32 destX;
1696   uint32 destY;
1697   uint32 width;
1698   uint32 height;
1699   uint32 rop;
1700}
1701#include "vmware_pack_end.h"
1702SVGAFifoCmdRectRopCopy;
1703
1704
1705/*
1706 * SVGA_CMD_DEFINE_CURSOR --
1707 *
1708 *    Provide a new cursor image, as an AND/XOR mask.
1709 *
1710 *    The recommended way to position the cursor overlay is by using
1711 *    the SVGA_FIFO_CURSOR_* registers, supported by the
1712 *    SVGA_FIFO_CAP_CURSOR_BYPASS_3 capability.
1713 *
1714 * Availability:
1715 *    SVGA_CAP_CURSOR
1716 */
1717
1718typedef
1719#include "vmware_pack_begin.h"
1720struct {
1721   uint32 id;             /* Reserved, must be zero. */
1722   uint32 hotspotX;
1723   uint32 hotspotY;
1724   uint32 width;
1725   uint32 height;
1726   uint32 andMaskDepth;   /* Value must be 1 or equal to BITS_PER_PIXEL */
1727   uint32 xorMaskDepth;   /* Value must be 1 or equal to BITS_PER_PIXEL */
1728   /*
1729    * Followed by scanline data for AND mask, then XOR mask.
1730    * Each scanline is padded to a 32-bit boundary.
1731   */
1732}
1733#include "vmware_pack_end.h"
1734SVGAFifoCmdDefineCursor;
1735
1736
1737/*
1738 * SVGA_CMD_DEFINE_ALPHA_CURSOR --
1739 *
1740 *    Provide a new cursor image, in 32-bit BGRA format.
1741 *
1742 *    The recommended way to position the cursor overlay is by using
1743 *    the SVGA_FIFO_CURSOR_* registers, supported by the
1744 *    SVGA_FIFO_CAP_CURSOR_BYPASS_3 capability.
1745 *
1746 * Availability:
1747 *    SVGA_CAP_ALPHA_CURSOR
1748 */
1749
1750typedef
1751#include "vmware_pack_begin.h"
1752struct {
1753   uint32 id;             /* Reserved, must be zero. */
1754   uint32 hotspotX;
1755   uint32 hotspotY;
1756   uint32 width;
1757   uint32 height;
1758   /* Followed by scanline data */
1759}
1760#include "vmware_pack_end.h"
1761SVGAFifoCmdDefineAlphaCursor;
1762
1763
1764/*
1765 *    Provide a new large cursor image, as an AND/XOR mask.
1766 *
1767 *    Should only be used for CursorMob functionality
1768 */
1769
1770typedef
1771#include "vmware_pack_begin.h"
1772struct {
1773   uint32 hotspotX;
1774   uint32 hotspotY;
1775   uint32 width;
1776   uint32 height;
1777   uint32 andMaskDepth;
1778   uint32 xorMaskDepth;
1779   /*
1780    * Followed by scanline data for AND mask, then XOR mask.
1781    * Each scanline is padded to a 32-bit boundary.
1782   */
1783}
1784#include "vmware_pack_end.h"
1785SVGAGBColorCursorHeader;
1786
1787
1788/*
1789 *    Provide a new large cursor image, in 32-bit BGRA format.
1790 *
1791 *    Should only be used for CursorMob functionality
1792 */
1793
1794typedef
1795#include "vmware_pack_begin.h"
1796struct {
1797   uint32 hotspotX;
1798   uint32 hotspotY;
1799   uint32 width;
1800   uint32 height;
1801   /* Followed by scanline data */
1802}
1803#include "vmware_pack_end.h"
1804SVGAGBAlphaCursorHeader;
1805
1806 /*
1807  * Define the SVGA guest backed cursor types
1808  */
1809
1810typedef enum {
1811   SVGA_COLOR_CURSOR       = 0,
1812   SVGA_ALPHA_CURSOR       = 1,
1813} SVGAGBCursorType;
1814
1815/*
1816 *    Provide a new large cursor image.
1817 *
1818 *    Should only be used for CursorMob functionality
1819 */
1820
1821typedef
1822#include "vmware_pack_begin.h"
1823struct {
1824   SVGAGBCursorType type;
1825   union {
1826      SVGAGBColorCursorHeader colorHeader;
1827      SVGAGBAlphaCursorHeader alphaHeader;
1828   } header;
1829   uint32 sizeInBytes;
1830   /*
1831    * Followed by the cursor data
1832    */
1833}
1834#include "vmware_pack_end.h"
1835SVGAGBCursorHeader;
1836
1837
1838/*
1839 * SVGA_CMD_UPDATE_VERBOSE --
1840 *
1841 *    Just like SVGA_CMD_UPDATE, but also provide a per-rectangle
1842 *    'reason' value, an opaque cookie which is used by internal
1843 *    debugging tools. Third party drivers should not use this
1844 *    command.
1845 *
1846 * Availability:
1847 *    SVGA_CAP_EXTENDED_FIFO
1848 */
1849
1850typedef
1851#include "vmware_pack_begin.h"
1852struct {
1853   uint32 x;
1854   uint32 y;
1855   uint32 width;
1856   uint32 height;
1857   uint32 reason;
1858}
1859#include "vmware_pack_end.h"
1860SVGAFifoCmdUpdateVerbose;
1861
1862
1863/*
1864 * SVGA_CMD_FRONT_ROP_FILL --
1865 *
1866 *    This is a hint which tells the SVGA device that the driver has
1867 *    just filled a rectangular region of the GFB with a solid
1868 *    color. Instead of reading these pixels from the GFB, the device
1869 *    can assume that they all equal 'color'. This is primarily used
1870 *    for remote desktop protocols.
1871 *
1872 * Availability:
1873 *    SVGA_FIFO_CAP_ACCELFRONT
1874 */
1875
1876#define  SVGA_ROP_COPY                    0x03
1877
1878typedef
1879#include "vmware_pack_begin.h"
1880struct {
1881   uint32 color;     /* In the same format as the GFB */
1882   uint32 x;
1883   uint32 y;
1884   uint32 width;
1885   uint32 height;
1886   uint32 rop;       /* Must be SVGA_ROP_COPY */
1887}
1888#include "vmware_pack_end.h"
1889SVGAFifoCmdFrontRopFill;
1890
1891
1892/*
1893 * SVGA_CMD_FENCE --
1894 *
1895 *    Insert a synchronization fence.  When the SVGA device reaches
1896 *    this command, it will copy the 'fence' value into the
1897 *    SVGA_FIFO_FENCE register. It will also compare the fence against
1898 *    SVGA_FIFO_FENCE_GOAL. If the fence matches the goal and the
1899 *    SVGA_IRQFLAG_FENCE_GOAL interrupt is enabled, the device will
1900 *    raise this interrupt.
1901 *
1902 * Availability:
1903 *    SVGA_FIFO_FENCE for this command,
1904 *    SVGA_CAP_IRQMASK for SVGA_FIFO_FENCE_GOAL.
1905 */
1906
1907typedef
1908#include "vmware_pack_begin.h"
1909struct {
1910   uint32 fence;
1911}
1912#include "vmware_pack_end.h"
1913SVGAFifoCmdFence;
1914
1915
1916/*
1917 * SVGA_CMD_ESCAPE --
1918 *
1919 *    Send an extended or vendor-specific variable length command.
1920 *    This is used for video overlay, third party plugins, and
1921 *    internal debugging tools. See svga_escape.h
1922 *
1923 * Availability:
1924 *    SVGA_FIFO_CAP_ESCAPE
1925 */
1926
1927typedef
1928#include "vmware_pack_begin.h"
1929struct {
1930   uint32 nsid;
1931   uint32 size;
1932   /* followed by 'size' bytes of data */
1933}
1934#include "vmware_pack_end.h"
1935SVGAFifoCmdEscape;
1936
1937
1938/*
1939 * SVGA_CMD_DEFINE_SCREEN --
1940 *
1941 *    Define or redefine an SVGAScreenObject. See the description of
1942 *    SVGAScreenObject above.  The video driver is responsible for
1943 *    generating new screen IDs. They should be small positive
1944 *    integers. The virtual device will have an implementation
1945 *    specific upper limit on the number of screen IDs
1946 *    supported. Drivers are responsible for recycling IDs. The first
1947 *    valid ID is zero.
1948 *
1949 *    - Interaction with other registers:
1950 *
1951 *    For backwards compatibility, when the GFB mode registers (WIDTH,
1952 *    HEIGHT, PITCHLOCK, BITS_PER_PIXEL) are modified, the SVGA device
1953 *    deletes all screens other than screen #0, and redefines screen
1954 *    #0 according to the specified mode. Drivers that use
1955 *    SVGA_CMD_DEFINE_SCREEN should destroy or redefine screen #0.
1956 *
1957 *    If you use screen objects, do not use the legacy multi-mon
1958 *    registers (SVGA_REG_NUM_GUEST_DISPLAYS, SVGA_REG_DISPLAY_*).
1959 *
1960 * Availability:
1961 *    SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2
1962 */
1963
1964typedef
1965#include "vmware_pack_begin.h"
1966struct {
1967   SVGAScreenObject screen;   /* Variable-length according to version */
1968}
1969#include "vmware_pack_end.h"
1970SVGAFifoCmdDefineScreen;
1971
1972
1973/*
1974 * SVGA_CMD_DESTROY_SCREEN --
1975 *
1976 *    Destroy an SVGAScreenObject. Its ID is immediately available for
1977 *    re-use.
1978 *
1979 * Availability:
1980 *    SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2
1981 */
1982
1983typedef
1984#include "vmware_pack_begin.h"
1985struct {
1986   uint32 screenId;
1987}
1988#include "vmware_pack_end.h"
1989SVGAFifoCmdDestroyScreen;
1990
1991
1992/*
1993 * SVGA_CMD_DEFINE_GMRFB --
1994 *
1995 *    This command sets a piece of SVGA device state called the
1996 *    Guest Memory Region Framebuffer, or GMRFB. The GMRFB is a
1997 *    piece of light-weight state which identifies the location and
1998 *    format of an image in guest memory or in BAR1. The GMRFB has
1999 *    an arbitrary size, and it doesn't need to match the geometry
2000 *    of the GFB or any screen object.
2001 *
2002 *    The GMRFB can be redefined as often as you like. You could
2003 *    always use the same GMRFB, you could redefine it before
2004 *    rendering from a different guest screen, or you could even
2005 *    redefine it before every blit.
2006 *
2007 *    There are multiple ways to use this command. The simplest way is
2008 *    to use it to move the framebuffer either to elsewhere in the GFB
2009 *    (BAR1) memory region, or to a user-defined GMR. This lets a
2010 *    driver use a framebuffer allocated entirely out of normal system
2011 *    memory, which we encourage.
2012 *
2013 *    Another way to use this command is to set up a ring buffer of
2014 *    updates in GFB memory. If a driver wants to ensure that no
2015 *    frames are skipped by the SVGA device, it is important that the
2016 *    driver not modify the source data for a blit until the device is
2017 *    done processing the command. One efficient way to accomplish
2018 *    this is to use a ring of small DMA buffers. Each buffer is used
2019 *    for one blit, then we move on to the next buffer in the
2020 *    ring. The FENCE mechanism is used to protect each buffer from
2021 *    re-use until the device is finished with that buffer's
2022 *    corresponding blit.
2023 *
2024 *    This command does not affect the meaning of SVGA_CMD_UPDATE.
2025 *    UPDATEs always occur from the legacy GFB memory area. This
2026 *    command has no support for pseudocolor GMRFBs. Currently only
2027 *    true-color 15, 16, and 24-bit depths are supported. Future
2028 *    devices may expose capabilities for additional framebuffer
2029 *    formats.
2030 *
2031 *    The default GMRFB value is undefined. Drivers must always send
2032 *    this command at least once before performing any blit from the
2033 *    GMRFB.
2034 *
2035 * Availability:
2036 *    SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2
2037 */
2038
2039typedef
2040#include "vmware_pack_begin.h"
2041struct {
2042   SVGAGuestPtr        ptr;
2043   uint32              bytesPerLine;
2044   SVGAGMRImageFormat  format;
2045}
2046#include "vmware_pack_end.h"
2047SVGAFifoCmdDefineGMRFB;
2048
2049
2050/*
2051 * SVGA_CMD_BLIT_GMRFB_TO_SCREEN --
2052 *
2053 *    This is a guest-to-host blit. It performs a DMA operation to
2054 *    copy a rectangular region of pixels from the current GMRFB to
2055 *    a ScreenObject.
2056 *
2057 *    The destination coordinate may be specified relative to a
2058 *    screen's origin.  The provided screen ID must be valid.
2059 *
2060 *    The SVGA device is guaranteed to finish reading from the GMRFB
2061 *    by the time any subsequent FENCE commands are reached.
2062 *
2063 *    This command consumes an annotation. See the
2064 *    SVGA_CMD_ANNOTATION_* commands for details.
2065 *
2066 * Availability:
2067 *    SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2
2068 */
2069
2070typedef
2071#include "vmware_pack_begin.h"
2072struct {
2073   SVGASignedPoint  srcOrigin;
2074   SVGASignedRect   destRect;
2075   uint32           destScreenId;
2076}
2077#include "vmware_pack_end.h"
2078SVGAFifoCmdBlitGMRFBToScreen;
2079
2080
2081/*
2082 * SVGA_CMD_BLIT_SCREEN_TO_GMRFB --
2083 *
2084 *    This is a host-to-guest blit. It performs a DMA operation to
2085 *    copy a rectangular region of pixels from a single ScreenObject
2086 *    back to the current GMRFB.
2087 *
2088 *    The source coordinate is specified relative to a screen's
2089 *    origin.  The provided screen ID must be valid. If any parameters
2090 *    are invalid, the resulting pixel values are undefined.
2091 *
2092 *    The SVGA device is guaranteed to finish writing to the GMRFB by
2093 *    the time any subsequent FENCE commands are reached.
2094 *
2095 * Availability:
2096 *    SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2
2097 */
2098
2099typedef
2100#include "vmware_pack_begin.h"
2101struct {
2102   SVGASignedPoint  destOrigin;
2103   SVGASignedRect   srcRect;
2104   uint32           srcScreenId;
2105}
2106#include "vmware_pack_end.h"
2107SVGAFifoCmdBlitScreenToGMRFB;
2108
2109
2110/*
2111 * SVGA_CMD_ANNOTATION_FILL --
2112 *
2113 *    The annotation commands have been deprecated, should not be used
2114 *    by new drivers.  They used to provide performance hints to the SVGA
2115 *    device about the content of screen updates, but newer SVGA devices
2116 *    ignore these.
2117 *
2118 * Availability:
2119 *    SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2
2120 */
2121
2122typedef
2123#include "vmware_pack_begin.h"
2124struct {
2125   SVGAColorBGRX  color;
2126}
2127#include "vmware_pack_end.h"
2128SVGAFifoCmdAnnotationFill;
2129
2130
2131/*
2132 * SVGA_CMD_ANNOTATION_COPY --
2133 *
2134 *    The annotation commands have been deprecated, should not be used
2135 *    by new drivers.  They used to provide performance hints to the SVGA
2136 *    device about the content of screen updates, but newer SVGA devices
2137 *    ignore these.
2138 *
2139 * Availability:
2140 *    SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2
2141 */
2142
2143typedef
2144#include "vmware_pack_begin.h"
2145struct {
2146   SVGASignedPoint  srcOrigin;
2147   uint32           srcScreenId;
2148}
2149#include "vmware_pack_end.h"
2150SVGAFifoCmdAnnotationCopy;
2151
2152
2153/*
2154 * SVGA_CMD_DEFINE_GMR2 --
2155 *
2156 *    Define guest memory region v2.  See the description of GMRs above.
2157 *
2158 * Availability:
2159 *    SVGA_CAP_GMR2
2160 */
2161
2162typedef
2163#include "vmware_pack_begin.h"
2164struct {
2165   uint32 gmrId;
2166   uint32 numPages;
2167}
2168#include "vmware_pack_end.h"
2169SVGAFifoCmdDefineGMR2;
2170
2171
2172/*
2173 * SVGA_CMD_REMAP_GMR2 --
2174 *
2175 *    Remap guest memory region v2.  See the description of GMRs above.
2176 *
2177 *    This command allows guest to modify a portion of an existing GMR by
2178 *    invalidating it or reassigning it to different guest physical pages.
2179 *    The pages are identified by physical page number (PPN).  The pages
2180 *    are assumed to be pinned and valid for DMA operations.
2181 *
2182 *    Description of command flags:
2183 *
2184 *    SVGA_REMAP_GMR2_VIA_GMR: If enabled, references a PPN list in a GMR.
2185 *       The PPN list must not overlap with the remap region (this can be
2186 *       handled trivially by referencing a separate GMR).  If flag is
2187 *       disabled, PPN list is appended to SVGARemapGMR command.
2188 *
2189 *    SVGA_REMAP_GMR2_PPN64: If set, PPN list is in PPN64 format, otherwise
2190 *       it is in PPN32 format.
2191 *
2192 *    SVGA_REMAP_GMR2_SINGLE_PPN: If set, PPN list contains a single entry.
2193 *       A single PPN can be used to invalidate a portion of a GMR or
2194 *       map it to to a single guest scratch page.
2195 *
2196 * Availability:
2197 *    SVGA_CAP_GMR2
2198 */
2199
2200typedef enum {
2201   SVGA_REMAP_GMR2_PPN32         = 0,
2202   SVGA_REMAP_GMR2_VIA_GMR       = (1 << 0),
2203   SVGA_REMAP_GMR2_PPN64         = (1 << 1),
2204   SVGA_REMAP_GMR2_SINGLE_PPN    = (1 << 2),
2205} SVGARemapGMR2Flags;
2206
2207typedef
2208#include "vmware_pack_begin.h"
2209struct {
2210   uint32 gmrId;
2211   SVGARemapGMR2Flags flags;
2212   uint32 offsetPages; /* offset in pages to begin remap */
2213   uint32 numPages; /* number of pages to remap */
2214   /*
2215    * Followed by additional data depending on SVGARemapGMR2Flags.
2216    *
2217    * If flag SVGA_REMAP_GMR2_VIA_GMR is set, single SVGAGuestPtr follows.
2218    * Otherwise an array of page descriptors in PPN32 or PPN64 format
2219    * (according to flag SVGA_REMAP_GMR2_PPN64) follows.  If flag
2220    * SVGA_REMAP_GMR2_SINGLE_PPN is set, array contains a single entry.
2221    */
2222}
2223#include "vmware_pack_end.h"
2224SVGAFifoCmdRemapGMR2;
2225
2226
2227/*
2228 * Size of SVGA device memory such as frame buffer and FIFO.
2229 */
2230#define SVGA_VRAM_MIN_SIZE             (4 * 640 * 480) /* bytes */
2231#define SVGA_VRAM_MIN_SIZE_3D       (16 * 1024 * 1024)
2232#define SVGA_VRAM_MAX_SIZE         (128 * 1024 * 1024)
2233#define SVGA_MEMORY_SIZE_MAX      (1024 * 1024 * 1024)
2234#define SVGA_FIFO_SIZE_MAX           (2 * 1024 * 1024)
2235#define SVGA_GRAPHICS_MEMORY_KB_MIN     (32 * 1024)
2236#define SVGA_GRAPHICS_MEMORY_KB_MAX_2GB (2 * 1024 * 1024)
2237#define SVGA_GRAPHICS_MEMORY_KB_MAX_3GB (3 * 1024 * 1024)
2238#define SVGA_GRAPHICS_MEMORY_KB_MAX_4GB (4 * 1024 * 1024)
2239#define SVGA_GRAPHICS_MEMORY_KB_MAX_8GB (8 * 1024 * 1024)
2240#define SVGA_GRAPHICS_MEMORY_KB_DEFAULT (256 * 1024)
2241
2242#define SVGA_VRAM_SIZE_W2K          (64 * 1024 * 1024) /* 64 MB */
2243
2244#if defined(VMX86_SERVER)
2245#define SVGA_VRAM_SIZE               (4 * 1024 * 1024)
2246#define SVGA_VRAM_SIZE_3D           (64 * 1024 * 1024)
2247#define SVGA_FIFO_SIZE                    (256 * 1024)
2248#define SVGA_FIFO_SIZE_3D                 (516 * 1024)
2249#define SVGA_MEMORY_SIZE_DEFAULT   (160 * 1024 * 1024)
2250#define SVGA_AUTODETECT_DEFAULT                  FALSE
2251#else
2252#define SVGA_VRAM_SIZE              (16 * 1024 * 1024)
2253#define SVGA_VRAM_SIZE_3D           SVGA_VRAM_MAX_SIZE
2254#define SVGA_FIFO_SIZE               (2 * 1024 * 1024)
2255#define SVGA_FIFO_SIZE_3D               SVGA_FIFO_SIZE
2256#define SVGA_MEMORY_SIZE_DEFAULT   (768 * 1024 * 1024)
2257#define SVGA_AUTODETECT_DEFAULT                   TRUE
2258#endif
2259
2260#define SVGA_FIFO_SIZE_GBOBJECTS          (256 * 1024)
2261#define SVGA_VRAM_SIZE_GBOBJECTS     (4 * 1024 * 1024)
2262
2263#define SVGA_PCI_REGS_PAGES                        (1)
2264
2265#endif
2266