svga_reg.h (20368B)
1/* SPDX-License-Identifier: GPL-2.0 OR MIT */ 2/* 3 * Copyright 1998-2021 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 34 35#ifndef _SVGA_REG_H_ 36#define _SVGA_REG_H_ 37 38#include "vm_basic_types.h" 39 40typedef enum { 41 SVGA_REG_ENABLE_DISABLE = 0, 42 SVGA_REG_ENABLE_ENABLE = (1 << 0), 43 SVGA_REG_ENABLE_HIDE = (1 << 1), 44} SvgaRegEnable; 45 46typedef uint32 SVGAMobId; 47 48#define SVGA_MAX_WIDTH 2560 49#define SVGA_MAX_HEIGHT 1600 50 51#define SVGA_MAX_BITS_PER_PIXEL 32 52#define SVGA_MAX_DEPTH 24 53#define SVGA_MAX_DISPLAYS 10 54#define SVGA_MAX_SCREEN_SIZE 8192 55#define SVGA_SCREEN_ROOT_LIMIT (SVGA_MAX_SCREEN_SIZE * SVGA_MAX_DISPLAYS) 56 57#define SVGA_CURSOR_ON_HIDE 0x0 58#define SVGA_CURSOR_ON_SHOW 0x1 59 60#define SVGA_CURSOR_ON_REMOVE_FROM_FB 0x2 61 62#define SVGA_CURSOR_ON_RESTORE_TO_FB 0x3 63 64#define SVGA_FB_MAX_TRACEABLE_SIZE 0x1000000 65 66#define SVGA_MAX_PSEUDOCOLOR_DEPTH 8 67#define SVGA_MAX_PSEUDOCOLORS (1 << SVGA_MAX_PSEUDOCOLOR_DEPTH) 68#define SVGA_NUM_PALETTE_REGS (3 * SVGA_MAX_PSEUDOCOLORS) 69 70#define SVGA_MAGIC 0x900000UL 71#define SVGA_MAKE_ID(ver) (SVGA_MAGIC << 8 | (ver)) 72 73#define SVGA_VERSION_3 3 74#define SVGA_ID_3 SVGA_MAKE_ID(SVGA_VERSION_3) 75 76#define SVGA_VERSION_2 2 77#define SVGA_ID_2 SVGA_MAKE_ID(SVGA_VERSION_2) 78 79#define SVGA_VERSION_1 1 80#define SVGA_ID_1 SVGA_MAKE_ID(SVGA_VERSION_1) 81 82#define SVGA_VERSION_0 0 83#define SVGA_ID_0 SVGA_MAKE_ID(SVGA_VERSION_0) 84 85#define SVGA_ID_INVALID 0xFFFFFFFF 86 87#define SVGA_INDEX_PORT 0x0 88#define SVGA_VALUE_PORT 0x1 89#define SVGA_BIOS_PORT 0x2 90#define SVGA_IRQSTATUS_PORT 0x8 91 92#define SVGA_IRQFLAG_ANY_FENCE (1 << 0) 93#define SVGA_IRQFLAG_FIFO_PROGRESS (1 << 1) 94#define SVGA_IRQFLAG_FENCE_GOAL (1 << 2) 95#define SVGA_IRQFLAG_COMMAND_BUFFER (1 << 3) 96#define SVGA_IRQFLAG_ERROR (1 << 4) 97#define SVGA_IRQFLAG_REG_FENCE_GOAL (1 << 5) 98#define SVGA_IRQFLAG_MAX (1 << 6) 99 100#define SVGA_MAX_CURSOR_CMD_BYTES (40 * 1024) 101#define SVGA_MAX_CURSOR_CMD_DIMENSION 1024 102 103enum { 104 SVGA_REG_ID = 0, 105 SVGA_REG_ENABLE = 1, 106 SVGA_REG_WIDTH = 2, 107 SVGA_REG_HEIGHT = 3, 108 SVGA_REG_MAX_WIDTH = 4, 109 SVGA_REG_MAX_HEIGHT = 5, 110 SVGA_REG_DEPTH = 6, 111 SVGA_REG_BITS_PER_PIXEL = 7, 112 SVGA_REG_PSEUDOCOLOR = 8, 113 SVGA_REG_RED_MASK = 9, 114 SVGA_REG_GREEN_MASK = 10, 115 SVGA_REG_BLUE_MASK = 11, 116 SVGA_REG_BYTES_PER_LINE = 12, 117 SVGA_REG_FB_START = 13, 118 SVGA_REG_FB_OFFSET = 14, 119 SVGA_REG_VRAM_SIZE = 15, 120 SVGA_REG_FB_SIZE = 16, 121 122 SVGA_REG_ID_0_TOP = 17, 123 124 SVGA_REG_CAPABILITIES = 17, 125 SVGA_REG_MEM_START = 18, 126 SVGA_REG_MEM_SIZE = 19, 127 SVGA_REG_CONFIG_DONE = 20, 128 SVGA_REG_SYNC = 21, 129 SVGA_REG_BUSY = 22, 130 SVGA_REG_GUEST_ID = 23, 131 SVGA_REG_DEAD = 24, 132 SVGA_REG_CURSOR_X = 25, 133 SVGA_REG_CURSOR_Y = 26, 134 SVGA_REG_CURSOR_ON = 27, 135 SVGA_REG_HOST_BITS_PER_PIXEL = 28, 136 SVGA_REG_SCRATCH_SIZE = 29, 137 SVGA_REG_MEM_REGS = 30, 138 SVGA_REG_NUM_DISPLAYS = 31, 139 SVGA_REG_PITCHLOCK = 32, 140 SVGA_REG_IRQMASK = 33, 141 142 SVGA_REG_NUM_GUEST_DISPLAYS = 34, 143 SVGA_REG_DISPLAY_ID = 35, 144 SVGA_REG_DISPLAY_IS_PRIMARY = 36, 145 SVGA_REG_DISPLAY_POSITION_X = 37, 146 SVGA_REG_DISPLAY_POSITION_Y = 38, 147 SVGA_REG_DISPLAY_WIDTH = 39, 148 SVGA_REG_DISPLAY_HEIGHT = 40, 149 150 SVGA_REG_GMR_ID = 41, 151 SVGA_REG_GMR_DESCRIPTOR = 42, 152 SVGA_REG_GMR_MAX_IDS = 43, 153 SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH = 44, 154 155 SVGA_REG_TRACES = 45, 156 SVGA_REG_GMRS_MAX_PAGES = 46, 157 SVGA_REG_MEMORY_SIZE = 47, 158 SVGA_REG_COMMAND_LOW = 48, 159 SVGA_REG_COMMAND_HIGH = 49, 160 161 SVGA_REG_MAX_PRIMARY_MEM = 50, 162 163 SVGA_REG_SUGGESTED_GBOBJECT_MEM_SIZE_KB = 51, 164 165 SVGA_REG_DEV_CAP = 52, 166 SVGA_REG_CMD_PREPEND_LOW = 53, 167 SVGA_REG_CMD_PREPEND_HIGH = 54, 168 SVGA_REG_SCREENTARGET_MAX_WIDTH = 55, 169 SVGA_REG_SCREENTARGET_MAX_HEIGHT = 56, 170 SVGA_REG_MOB_MAX_SIZE = 57, 171 SVGA_REG_BLANK_SCREEN_TARGETS = 58, 172 SVGA_REG_CAP2 = 59, 173 SVGA_REG_DEVEL_CAP = 60, 174 175 SVGA_REG_GUEST_DRIVER_ID = 61, 176 SVGA_REG_GUEST_DRIVER_VERSION1 = 62, 177 SVGA_REG_GUEST_DRIVER_VERSION2 = 63, 178 SVGA_REG_GUEST_DRIVER_VERSION3 = 64, 179 180 SVGA_REG_CURSOR_MOBID = 65, 181 SVGA_REG_CURSOR_MAX_BYTE_SIZE = 66, 182 SVGA_REG_CURSOR_MAX_DIMENSION = 67, 183 184 SVGA_REG_FIFO_CAPS = 68, 185 SVGA_REG_FENCE = 69, 186 187 SVGA_REG_CURSOR4_ON = 70, 188 SVGA_REG_CURSOR4_X = 71, 189 SVGA_REG_CURSOR4_Y = 72, 190 SVGA_REG_CURSOR4_SCREEN_ID = 73, 191 SVGA_REG_CURSOR4_SUBMIT = 74, 192 193 SVGA_REG_SCREENDMA = 75, 194 195 SVGA_REG_GBOBJECT_MEM_SIZE_KB = 76, 196 197 SVGA_REG_REGS_START_HIGH32 = 77, 198 SVGA_REG_REGS_START_LOW32 = 78, 199 SVGA_REG_FB_START_HIGH32 = 79, 200 SVGA_REG_FB_START_LOW32 = 80, 201 202 SVGA_REG_MSHINT = 81, 203 204 SVGA_REG_IRQ_STATUS = 82, 205 206 SVGA_REG_DIRTY_TRACKING = 83, 207 SVGA_REG_FENCE_GOAL = 84, 208 209 SVGA_REG_TOP = 85, 210 211 SVGA_PALETTE_BASE = 1024, 212 213 SVGA_SCRATCH_BASE = SVGA_PALETTE_BASE + SVGA_NUM_PALETTE_REGS 214 215}; 216 217typedef enum SVGARegGuestDriverId { 218 SVGA_REG_GUEST_DRIVER_ID_UNKNOWN = 0, 219 SVGA_REG_GUEST_DRIVER_ID_WDDM = 1, 220 SVGA_REG_GUEST_DRIVER_ID_LINUX = 2, 221 SVGA_REG_GUEST_DRIVER_ID_MAX, 222 223 SVGA_REG_GUEST_DRIVER_ID_SUBMIT = MAX_UINT32, 224} SVGARegGuestDriverId; 225 226typedef enum SVGARegMSHint { 227 SVGA_REG_MSHINT_DISABLED = 0, 228 SVGA_REG_MSHINT_FULL = 1, 229 SVGA_REG_MSHINT_RESOLVED = 2, 230} SVGARegMSHint; 231 232typedef enum SVGARegDirtyTracking { 233 SVGA_REG_DIRTY_TRACKING_PER_IMAGE = 0, 234 SVGA_REG_DIRTY_TRACKING_PER_SURFACE = 1, 235} SVGARegDirtyTracking; 236 237#define SVGA_GMR_NULL ((uint32)-1) 238#define SVGA_GMR_FRAMEBUFFER ((uint32)-2) 239 240#pragma pack(push, 1) 241typedef struct SVGAGuestMemDescriptor { 242 uint32 ppn; 243 uint32 numPages; 244} SVGAGuestMemDescriptor; 245#pragma pack(pop) 246 247#pragma pack(push, 1) 248typedef struct SVGAGuestPtr { 249 uint32 gmrId; 250 uint32 offset; 251} SVGAGuestPtr; 252#pragma pack(pop) 253 254#define SVGA_CB_MAX_SIZE_DEFAULT (KBYTES_2_BYTES(512)) 255#define SVGA_CB_MAX_SIZE_4MB (MBYTES_2_BYTES(4)) 256#define SVGA_CB_MAX_SIZE SVGA_CB_MAX_SIZE_4MB 257#define SVGA_CB_MAX_QUEUED_PER_CONTEXT 32 258#define SVGA_CB_MAX_COMMAND_SIZE (32 * 1024) 259 260#define SVGA_CB_CONTEXT_MASK 0x3f 261typedef enum { 262 SVGA_CB_CONTEXT_DEVICE = 0x3f, 263 SVGA_CB_CONTEXT_0 = 0x0, 264 SVGA_CB_CONTEXT_1 = 0x1, 265 SVGA_CB_CONTEXT_MAX = 0x2, 266} SVGACBContext; 267 268typedef enum { 269 270 SVGA_CB_STATUS_NONE = 0, 271 272 SVGA_CB_STATUS_COMPLETED = 1, 273 274 SVGA_CB_STATUS_QUEUE_FULL = 2, 275 276 SVGA_CB_STATUS_COMMAND_ERROR = 3, 277 278 SVGA_CB_STATUS_CB_HEADER_ERROR = 4, 279 280 SVGA_CB_STATUS_PREEMPTED = 5, 281 282 SVGA_CB_STATUS_SUBMISSION_ERROR = 6, 283 284 SVGA_CB_STATUS_PARTIAL_COMPLETE = 7, 285} SVGACBStatus; 286 287typedef enum { 288 SVGA_CB_FLAG_NONE = 0, 289 SVGA_CB_FLAG_NO_IRQ = 1 << 0, 290 SVGA_CB_FLAG_DX_CONTEXT = 1 << 1, 291 SVGA_CB_FLAG_MOB = 1 << 2, 292} SVGACBFlags; 293 294#pragma pack(push, 1) 295typedef struct { 296 volatile SVGACBStatus status; 297 volatile uint32 errorOffset; 298 uint64 id; 299 SVGACBFlags flags; 300 uint32 length; 301 union { 302 PA pa; 303 struct { 304 SVGAMobId mobid; 305 uint32 mobOffset; 306 } mob; 307 } ptr; 308 uint32 offset; 309 uint32 dxContext; 310 uint32 mustBeZero[6]; 311} SVGACBHeader; 312#pragma pack(pop) 313 314typedef enum { 315 SVGA_DC_CMD_NOP = 0, 316 SVGA_DC_CMD_START_STOP_CONTEXT = 1, 317 SVGA_DC_CMD_PREEMPT = 2, 318 SVGA_DC_CMD_START_QUEUE = 3, 319 SVGA_DC_CMD_ASYNC_STOP_QUEUE = 4, 320 SVGA_DC_CMD_EMPTY_CONTEXT_QUEUE = 5, 321 SVGA_DC_CMD_MAX = 6 322} SVGADeviceContextCmdId; 323 324typedef struct SVGADCCmdStartStop { 325 uint32 enable; 326 SVGACBContext context; 327} SVGADCCmdStartStop; 328 329typedef struct SVGADCCmdPreempt { 330 SVGACBContext context; 331 uint32 ignoreIDZero; 332} SVGADCCmdPreempt; 333 334typedef struct SVGADCCmdStartQueue { 335 SVGACBContext context; 336} SVGADCCmdStartQueue; 337 338typedef struct SVGADCCmdAsyncStopQueue { 339 SVGACBContext context; 340} SVGADCCmdAsyncStopQueue; 341 342typedef struct SVGADCCmdEmptyQueue { 343 SVGACBContext context; 344} SVGADCCmdEmptyQueue; 345 346typedef struct SVGAGMRImageFormat { 347 union { 348 struct { 349 uint32 bitsPerPixel : 8; 350 uint32 colorDepth : 8; 351 uint32 reserved : 16; 352 }; 353 354 uint32 value; 355 }; 356} SVGAGMRImageFormat; 357 358#pragma pack(push, 1) 359typedef struct SVGAGuestImage { 360 SVGAGuestPtr ptr; 361 362 uint32 pitch; 363} SVGAGuestImage; 364#pragma pack(pop) 365 366typedef struct SVGAColorBGRX { 367 union { 368 struct { 369 uint32 b : 8; 370 uint32 g : 8; 371 uint32 r : 8; 372 uint32 x : 8; 373 }; 374 375 uint32 value; 376 }; 377} SVGAColorBGRX; 378 379#pragma pack(push, 1) 380typedef struct { 381 int32 left; 382 int32 top; 383 int32 right; 384 int32 bottom; 385} SVGASignedRect; 386#pragma pack(pop) 387 388#pragma pack(push, 1) 389typedef struct { 390 int32 x; 391 int32 y; 392} SVGASignedPoint; 393#pragma pack(pop) 394 395#pragma pack(push, 1) 396typedef struct { 397 uint32 x; 398 uint32 y; 399} SVGAUnsignedPoint; 400#pragma pack(pop) 401 402#define SVGA_CAP_NONE 0x00000000 403#define SVGA_CAP_RECT_COPY 0x00000002 404#define SVGA_CAP_CURSOR 0x00000020 405#define SVGA_CAP_CURSOR_BYPASS 0x00000040 406#define SVGA_CAP_CURSOR_BYPASS_2 0x00000080 407#define SVGA_CAP_8BIT_EMULATION 0x00000100 408#define SVGA_CAP_ALPHA_CURSOR 0x00000200 409#define SVGA_CAP_3D 0x00004000 410#define SVGA_CAP_EXTENDED_FIFO 0x00008000 411#define SVGA_CAP_MULTIMON 0x00010000 412#define SVGA_CAP_PITCHLOCK 0x00020000 413#define SVGA_CAP_IRQMASK 0x00040000 414#define SVGA_CAP_DISPLAY_TOPOLOGY 0x00080000 415#define SVGA_CAP_GMR 0x00100000 416#define SVGA_CAP_TRACES 0x00200000 417#define SVGA_CAP_GMR2 0x00400000 418#define SVGA_CAP_SCREEN_OBJECT_2 0x00800000 419#define SVGA_CAP_COMMAND_BUFFERS 0x01000000 420#define SVGA_CAP_DEAD1 0x02000000 421#define SVGA_CAP_CMD_BUFFERS_2 0x04000000 422#define SVGA_CAP_GBOBJECTS 0x08000000 423#define SVGA_CAP_DX 0x10000000 424#define SVGA_CAP_HP_CMD_QUEUE 0x20000000 425#define SVGA_CAP_NO_BB_RESTRICTION 0x40000000 426#define SVGA_CAP_CAP2_REGISTER 0x80000000 427 428#define SVGA_CAP2_NONE 0x00000000 429#define SVGA_CAP2_GROW_OTABLE 0x00000001 430#define SVGA_CAP2_INTRA_SURFACE_COPY 0x00000002 431#define SVGA_CAP2_DX2 0x00000004 432#define SVGA_CAP2_GB_MEMSIZE_2 0x00000008 433#define SVGA_CAP2_SCREENDMA_REG 0x00000010 434#define SVGA_CAP2_OTABLE_PTDEPTH_2 0x00000020 435#define SVGA_CAP2_NON_MS_TO_MS_STRETCHBLT 0x00000040 436#define SVGA_CAP2_CURSOR_MOB 0x00000080 437#define SVGA_CAP2_MSHINT 0x00000100 438#define SVGA_CAP2_CB_MAX_SIZE_4MB 0x00000200 439#define SVGA_CAP2_DX3 0x00000400 440#define SVGA_CAP2_FRAME_TYPE 0x00000800 441#define SVGA_CAP2_COTABLE_COPY 0x00001000 442#define SVGA_CAP2_TRACE_FULL_FB 0x00002000 443#define SVGA_CAP2_EXTRA_REGS 0x00004000 444#define SVGA_CAP2_LO_STAGING 0x00008000 445#define SVGA_CAP2_VIDEO_BLT 0x00010000 446#define SVGA_CAP2_RESERVED 0x80000000 447 448typedef enum { 449 SVGABackdoorCapDeviceCaps = 0, 450 SVGABackdoorCapFifoCaps = 1, 451 SVGABackdoorCap3dHWVersion = 2, 452 SVGABackdoorCapDeviceCaps2 = 3, 453 SVGABackdoorCapDevelCaps = 4, 454 SVGABackdoorCapDevCaps = 5, 455 SVGABackdoorDevelRenderer = 6, 456 SVGABackdoorDevelUsingISB = 7, 457 SVGABackdoorCapMax = 8, 458} SVGABackdoorCapType; 459 460enum { 461 462 SVGA_FIFO_MIN = 0, 463 SVGA_FIFO_MAX, 464 SVGA_FIFO_NEXT_CMD, 465 SVGA_FIFO_STOP, 466 467 SVGA_FIFO_CAPABILITIES = 4, 468 SVGA_FIFO_FLAGS, 469 470 SVGA_FIFO_FENCE, 471 472 SVGA_FIFO_3D_HWVERSION, 473 474 SVGA_FIFO_PITCHLOCK, 475 476 SVGA_FIFO_CURSOR_ON, 477 SVGA_FIFO_CURSOR_X, 478 SVGA_FIFO_CURSOR_Y, 479 SVGA_FIFO_CURSOR_COUNT, 480 SVGA_FIFO_CURSOR_LAST_UPDATED, 481 482 SVGA_FIFO_RESERVED, 483 484 SVGA_FIFO_CURSOR_SCREEN_ID, 485 486 SVGA_FIFO_DEAD, 487 488 SVGA_FIFO_3D_HWVERSION_REVISED, 489 490 SVGA_FIFO_3D_CAPS = 32, 491 SVGA_FIFO_3D_CAPS_LAST = 32 + 255, 492 493 SVGA_FIFO_GUEST_3D_HWVERSION, 494 SVGA_FIFO_FENCE_GOAL, 495 SVGA_FIFO_BUSY, 496 497 SVGA_FIFO_NUM_REGS 498}; 499 500#define SVGA_FIFO_3D_CAPS_SIZE (SVGA_FIFO_3D_CAPS_LAST - SVGA_FIFO_3D_CAPS + 1) 501 502#define SVGA3D_FIFO_CAPS_RECORD_DEVCAPS 0x100 503typedef uint32 SVGA3dFifoCapsRecordType; 504 505typedef uint32 SVGA3dFifoCapPair[2]; 506 507#pragma pack(push, 1) 508typedef struct SVGA3dFifoCapsRecordHeader { 509 uint32 length; 510 SVGA3dFifoCapsRecordType type; 511 512} SVGA3dFifoCapsRecordHeader; 513#pragma pack(pop) 514 515#define SVGA_FIFO_EXTENDED_MANDATORY_REGS (SVGA_FIFO_3D_CAPS_LAST + 1) 516 517#define SVGA_FIFO_CAP_NONE 0 518#define SVGA_FIFO_CAP_FENCE (1 << 0) 519#define SVGA_FIFO_CAP_ACCELFRONT (1 << 1) 520#define SVGA_FIFO_CAP_PITCHLOCK (1 << 2) 521#define SVGA_FIFO_CAP_VIDEO (1 << 3) 522#define SVGA_FIFO_CAP_CURSOR_BYPASS_3 (1 << 4) 523#define SVGA_FIFO_CAP_ESCAPE (1 << 5) 524#define SVGA_FIFO_CAP_RESERVE (1 << 6) 525#define SVGA_FIFO_CAP_SCREEN_OBJECT (1 << 7) 526#define SVGA_FIFO_CAP_GMR2 (1 << 8) 527#define SVGA_FIFO_CAP_3D_HWVERSION_REVISED SVGA_FIFO_CAP_GMR2 528#define SVGA_FIFO_CAP_SCREEN_OBJECT_2 (1 << 9) 529#define SVGA_FIFO_CAP_DEAD (1 << 10) 530 531#define SVGA_FIFO_FLAG_NONE 0 532#define SVGA_FIFO_FLAG_ACCELFRONT (1 << 0) 533#define SVGA_FIFO_FLAG_RESERVED (1 << 31) 534 535#define SVGA_FIFO_RESERVED_UNKNOWN 0xffffffff 536 537#define SVGA_SCREENDMA_REG_UNDEFINED 0 538#define SVGA_SCREENDMA_REG_NOT_PRESENT 1 539#define SVGA_SCREENDMA_REG_PRESENT 2 540#define SVGA_SCREENDMA_REG_MAX 3 541 542#define SVGA_NUM_OVERLAY_UNITS 32 543 544#define SVGA_VIDEO_FLAG_COLORKEY 0x0001 545 546enum { 547 SVGA_VIDEO_ENABLED = 0, 548 SVGA_VIDEO_FLAGS, 549 SVGA_VIDEO_DATA_OFFSET, 550 SVGA_VIDEO_FORMAT, 551 SVGA_VIDEO_COLORKEY, 552 SVGA_VIDEO_SIZE, 553 SVGA_VIDEO_WIDTH, 554 SVGA_VIDEO_HEIGHT, 555 SVGA_VIDEO_SRC_X, 556 SVGA_VIDEO_SRC_Y, 557 SVGA_VIDEO_SRC_WIDTH, 558 SVGA_VIDEO_SRC_HEIGHT, 559 SVGA_VIDEO_DST_X, 560 SVGA_VIDEO_DST_Y, 561 SVGA_VIDEO_DST_WIDTH, 562 SVGA_VIDEO_DST_HEIGHT, 563 SVGA_VIDEO_PITCH_1, 564 SVGA_VIDEO_PITCH_2, 565 SVGA_VIDEO_PITCH_3, 566 SVGA_VIDEO_DATA_GMRID, 567 SVGA_VIDEO_DST_SCREEN_ID, 568 SVGA_VIDEO_NUM_REGS 569}; 570 571#pragma pack(push, 1) 572typedef struct SVGAOverlayUnit { 573 uint32 enabled; 574 uint32 flags; 575 uint32 dataOffset; 576 uint32 format; 577 uint32 colorKey; 578 uint32 size; 579 uint32 width; 580 uint32 height; 581 uint32 srcX; 582 uint32 srcY; 583 uint32 srcWidth; 584 uint32 srcHeight; 585 int32 dstX; 586 int32 dstY; 587 uint32 dstWidth; 588 uint32 dstHeight; 589 uint32 pitches[3]; 590 uint32 dataGMRId; 591 uint32 dstScreenId; 592} SVGAOverlayUnit; 593#pragma pack(pop) 594 595#define SVGA_INVALID_DISPLAY_ID ((uint32)-1) 596 597typedef struct SVGADisplayTopology { 598 uint16 displayId; 599 uint16 isPrimary; 600 uint32 width; 601 uint32 height; 602 uint32 positionX; 603 uint32 positionY; 604} SVGADisplayTopology; 605 606#define SVGA_SCREEN_MUST_BE_SET (1 << 0) 607#define SVGA_SCREEN_HAS_ROOT SVGA_SCREEN_MUST_BE_SET 608#define SVGA_SCREEN_IS_PRIMARY (1 << 1) 609#define SVGA_SCREEN_FULLSCREEN_HINT (1 << 2) 610 611#define SVGA_SCREEN_DEACTIVATE (1 << 3) 612 613#define SVGA_SCREEN_BLANKING (1 << 4) 614 615#pragma pack(push, 1) 616typedef struct { 617 uint32 structSize; 618 uint32 id; 619 uint32 flags; 620 struct { 621 uint32 width; 622 uint32 height; 623 } size; 624 struct { 625 int32 x; 626 int32 y; 627 } root; 628 629 SVGAGuestImage backingStore; 630 631 uint32 cloneCount; 632} SVGAScreenObject; 633#pragma pack(pop) 634 635typedef enum { 636 SVGA_CMD_INVALID_CMD = 0, 637 SVGA_CMD_UPDATE = 1, 638 SVGA_CMD_RECT_COPY = 3, 639 SVGA_CMD_RECT_ROP_COPY = 14, 640 SVGA_CMD_DEFINE_CURSOR = 19, 641 SVGA_CMD_DEFINE_ALPHA_CURSOR = 22, 642 SVGA_CMD_UPDATE_VERBOSE = 25, 643 SVGA_CMD_FRONT_ROP_FILL = 29, 644 SVGA_CMD_FENCE = 30, 645 SVGA_CMD_ESCAPE = 33, 646 SVGA_CMD_DEFINE_SCREEN = 34, 647 SVGA_CMD_DESTROY_SCREEN = 35, 648 SVGA_CMD_DEFINE_GMRFB = 36, 649 SVGA_CMD_BLIT_GMRFB_TO_SCREEN = 37, 650 SVGA_CMD_BLIT_SCREEN_TO_GMRFB = 38, 651 SVGA_CMD_ANNOTATION_FILL = 39, 652 SVGA_CMD_ANNOTATION_COPY = 40, 653 SVGA_CMD_DEFINE_GMR2 = 41, 654 SVGA_CMD_REMAP_GMR2 = 42, 655 SVGA_CMD_DEAD = 43, 656 SVGA_CMD_DEAD_2 = 44, 657 SVGA_CMD_NOP = 45, 658 SVGA_CMD_NOP_ERROR = 46, 659 SVGA_CMD_MAX 660} SVGAFifoCmdId; 661 662#define SVGA_CMD_MAX_DATASIZE (256 * 1024) 663#define SVGA_CMD_MAX_ARGS 64 664 665#pragma pack(push, 1) 666typedef struct { 667 uint32 x; 668 uint32 y; 669 uint32 width; 670 uint32 height; 671} SVGAFifoCmdUpdate; 672#pragma pack(pop) 673 674#pragma pack(push, 1) 675typedef struct { 676 uint32 srcX; 677 uint32 srcY; 678 uint32 destX; 679 uint32 destY; 680 uint32 width; 681 uint32 height; 682} SVGAFifoCmdRectCopy; 683#pragma pack(pop) 684 685#pragma pack(push, 1) 686typedef struct { 687 uint32 srcX; 688 uint32 srcY; 689 uint32 destX; 690 uint32 destY; 691 uint32 width; 692 uint32 height; 693 uint32 rop; 694} SVGAFifoCmdRectRopCopy; 695#pragma pack(pop) 696 697#pragma pack(push, 1) 698typedef struct { 699 uint32 id; 700 uint32 hotspotX; 701 uint32 hotspotY; 702 uint32 width; 703 uint32 height; 704 uint32 andMaskDepth; 705 uint32 xorMaskDepth; 706 707} SVGAFifoCmdDefineCursor; 708#pragma pack(pop) 709 710#pragma pack(push, 1) 711typedef struct { 712 uint32 id; 713 uint32 hotspotX; 714 uint32 hotspotY; 715 uint32 width; 716 uint32 height; 717 718} SVGAFifoCmdDefineAlphaCursor; 719#pragma pack(pop) 720 721#pragma pack(push, 1) 722typedef struct { 723 uint32 hotspotX; 724 uint32 hotspotY; 725 uint32 width; 726 uint32 height; 727 uint32 andMaskDepth; 728 uint32 xorMaskDepth; 729 730} SVGAGBColorCursorHeader; 731#pragma pack(pop) 732 733#pragma pack(push, 1) 734typedef struct { 735 uint32 hotspotX; 736 uint32 hotspotY; 737 uint32 width; 738 uint32 height; 739 740} SVGAGBAlphaCursorHeader; 741#pragma pack(pop) 742 743typedef enum { 744 SVGA_COLOR_CURSOR = 0, 745 SVGA_ALPHA_CURSOR = 1, 746} SVGAGBCursorType; 747 748#pragma pack(push, 1) 749typedef struct { 750 SVGAGBCursorType type; 751 union { 752 SVGAGBColorCursorHeader colorHeader; 753 SVGAGBAlphaCursorHeader alphaHeader; 754 } header; 755 uint32 sizeInBytes; 756 757} SVGAGBCursorHeader; 758#pragma pack(pop) 759 760#pragma pack(push, 1) 761typedef struct { 762 uint32 x; 763 uint32 y; 764 uint32 width; 765 uint32 height; 766 uint32 reason; 767} SVGAFifoCmdUpdateVerbose; 768#pragma pack(pop) 769 770#pragma pack(push, 1) 771typedef struct { 772 uint32 color; 773 uint32 x; 774 uint32 y; 775 uint32 width; 776 uint32 height; 777 uint32 rop; 778} SVGAFifoCmdFrontRopFill; 779#pragma pack(pop) 780 781#pragma pack(push, 1) 782typedef struct { 783 uint32 fence; 784} SVGAFifoCmdFence; 785#pragma pack(pop) 786 787#pragma pack(push, 1) 788typedef struct { 789 uint32 nsid; 790 uint32 size; 791 792} SVGAFifoCmdEscape; 793#pragma pack(pop) 794 795#pragma pack(push, 1) 796typedef struct { 797 SVGAScreenObject screen; 798} SVGAFifoCmdDefineScreen; 799#pragma pack(pop) 800 801#pragma pack(push, 1) 802typedef struct { 803 uint32 screenId; 804} SVGAFifoCmdDestroyScreen; 805#pragma pack(pop) 806 807#pragma pack(push, 1) 808typedef struct { 809 SVGAGuestPtr ptr; 810 uint32 bytesPerLine; 811 SVGAGMRImageFormat format; 812} SVGAFifoCmdDefineGMRFB; 813#pragma pack(pop) 814 815#pragma pack(push, 1) 816typedef struct { 817 SVGASignedPoint srcOrigin; 818 SVGASignedRect destRect; 819 uint32 destScreenId; 820} SVGAFifoCmdBlitGMRFBToScreen; 821#pragma pack(pop) 822 823#pragma pack(push, 1) 824typedef struct { 825 SVGASignedPoint destOrigin; 826 SVGASignedRect srcRect; 827 uint32 srcScreenId; 828} SVGAFifoCmdBlitScreenToGMRFB; 829#pragma pack(pop) 830 831#pragma pack(push, 1) 832typedef struct { 833 SVGAColorBGRX color; 834} SVGAFifoCmdAnnotationFill; 835#pragma pack(pop) 836 837#pragma pack(push, 1) 838typedef struct { 839 SVGASignedPoint srcOrigin; 840 uint32 srcScreenId; 841} SVGAFifoCmdAnnotationCopy; 842#pragma pack(pop) 843 844#pragma pack(push, 1) 845typedef struct { 846 uint32 gmrId; 847 uint32 numPages; 848} SVGAFifoCmdDefineGMR2; 849#pragma pack(pop) 850 851typedef enum { 852 SVGA_REMAP_GMR2_PPN32 = 0, 853 SVGA_REMAP_GMR2_VIA_GMR = (1 << 0), 854 SVGA_REMAP_GMR2_PPN64 = (1 << 1), 855 SVGA_REMAP_GMR2_SINGLE_PPN = (1 << 2), 856} SVGARemapGMR2Flags; 857 858#pragma pack(push, 1) 859typedef struct { 860 uint32 gmrId; 861 SVGARemapGMR2Flags flags; 862 uint32 offsetPages; 863 uint32 numPages; 864 865} SVGAFifoCmdRemapGMR2; 866#pragma pack(pop) 867 868#define SVGA_VRAM_MIN_SIZE (4 * 640 * 480) 869#define SVGA_VRAM_MIN_SIZE_3D (16 * 1024 * 1024) 870#define SVGA_VRAM_MAX_SIZE (128 * 1024 * 1024) 871#define SVGA_MEMORY_SIZE_MAX (1024 * 1024 * 1024) 872#define SVGA_FIFO_SIZE_MAX (2 * 1024 * 1024) 873#define SVGA_GRAPHICS_MEMORY_KB_MIN (32 * 1024) 874#define SVGA_GRAPHICS_MEMORY_KB_MAX_2GB (2 * 1024 * 1024) 875#define SVGA_GRAPHICS_MEMORY_KB_MAX_3GB (3 * 1024 * 1024) 876#define SVGA_GRAPHICS_MEMORY_KB_MAX_4GB (4 * 1024 * 1024) 877#define SVGA_GRAPHICS_MEMORY_KB_MAX_8GB (8 * 1024 * 1024) 878#define SVGA_GRAPHICS_MEMORY_KB_DEFAULT (256 * 1024) 879 880#define SVGA_VRAM_SIZE_W2K (64 * 1024 * 1024) 881 882#if defined(VMX86_SERVER) 883#define SVGA_VRAM_SIZE (4 * 1024 * 1024) 884#define SVGA_VRAM_SIZE_3D (64 * 1024 * 1024) 885#define SVGA_FIFO_SIZE (256 * 1024) 886#define SVGA_FIFO_SIZE_3D (516 * 1024) 887#define SVGA_MEMORY_SIZE_DEFAULT (160 * 1024 * 1024) 888#define SVGA_AUTODETECT_DEFAULT FALSE 889#else 890#define SVGA_VRAM_SIZE (16 * 1024 * 1024) 891#define SVGA_VRAM_SIZE_3D SVGA_VRAM_MAX_SIZE 892#define SVGA_FIFO_SIZE (2 * 1024 * 1024) 893#define SVGA_FIFO_SIZE_3D SVGA_FIFO_SIZE 894#define SVGA_MEMORY_SIZE_DEFAULT (768 * 1024 * 1024) 895#define SVGA_AUTODETECT_DEFAULT TRUE 896#endif 897 898#define SVGA_FIFO_SIZE_GBOBJECTS (256 * 1024) 899#define SVGA_VRAM_SIZE_GBOBJECTS (4 * 1024 * 1024) 900 901#endif