1 1.1 riastrad /* $NetBSD: vboxvideo.h,v 1.2 2021/12/18 23:45:44 riastradh Exp $ */ 2 1.1 riastrad 3 1.1 riastrad /* SPDX-License-Identifier: MIT */ 4 1.1 riastrad /* Copyright (C) 2006-2016 Oracle Corporation */ 5 1.1 riastrad 6 1.1 riastrad #ifndef __VBOXVIDEO_H__ 7 1.1 riastrad #define __VBOXVIDEO_H__ 8 1.1 riastrad 9 1.1 riastrad #define VBOX_VIDEO_MAX_SCREENS 64 10 1.1 riastrad 11 1.1 riastrad /* 12 1.1 riastrad * The last 4096 bytes of the guest VRAM contains the generic info for all 13 1.1 riastrad * DualView chunks: sizes and offsets of chunks. This is filled by miniport. 14 1.1 riastrad * 15 1.1 riastrad * Last 4096 bytes of each chunk contain chunk specific data: framebuffer info, 16 1.1 riastrad * etc. This is used exclusively by the corresponding instance of a display 17 1.1 riastrad * driver. 18 1.1 riastrad * 19 1.1 riastrad * The VRAM layout: 20 1.1 riastrad * Last 4096 bytes - Adapter information area. 21 1.1 riastrad * 4096 bytes aligned miniport heap (value specified in the config rouded up). 22 1.1 riastrad * Slack - what left after dividing the VRAM. 23 1.1 riastrad * 4096 bytes aligned framebuffers: 24 1.1 riastrad * last 4096 bytes of each framebuffer is the display information area. 25 1.1 riastrad * 26 1.1 riastrad * The Virtual Graphics Adapter information in the guest VRAM is stored by the 27 1.1 riastrad * guest video driver using structures prepended by VBOXVIDEOINFOHDR. 28 1.1 riastrad * 29 1.1 riastrad * When the guest driver writes dword 0 to the VBE_DISPI_INDEX_VBOX_VIDEO 30 1.1 riastrad * the host starts to process the info. The first element at the start of 31 1.1 riastrad * the 4096 bytes region should be normally be a LINK that points to 32 1.1 riastrad * actual information chain. That way the guest driver can have some 33 1.1 riastrad * fixed layout of the information memory block and just rewrite 34 1.1 riastrad * the link to point to relevant memory chain. 35 1.1 riastrad * 36 1.1 riastrad * The processing stops at the END element. 37 1.1 riastrad * 38 1.1 riastrad * The host can access the memory only when the port IO is processed. 39 1.1 riastrad * All data that will be needed later must be copied from these 4096 bytes. 40 1.1 riastrad * But other VRAM can be used by host until the mode is disabled. 41 1.1 riastrad * 42 1.1 riastrad * The guest driver writes dword 0xffffffff to the VBE_DISPI_INDEX_VBOX_VIDEO 43 1.1 riastrad * to disable the mode. 44 1.1 riastrad * 45 1.1 riastrad * VBE_DISPI_INDEX_VBOX_VIDEO is used to read the configuration information 46 1.1 riastrad * from the host and issue commands to the host. 47 1.1 riastrad * 48 1.1 riastrad * The guest writes the VBE_DISPI_INDEX_VBOX_VIDEO index register, the the 49 1.1 riastrad * following operations with the VBE data register can be performed: 50 1.1 riastrad * 51 1.1 riastrad * Operation Result 52 1.1 riastrad * write 16 bit value NOP 53 1.1 riastrad * read 16 bit value count of monitors 54 1.1 riastrad * write 32 bit value set the vbox cmd value and the cmd processed by the host 55 1.1 riastrad * read 32 bit value result of the last vbox command is returned 56 1.1 riastrad */ 57 1.1 riastrad 58 1.1 riastrad struct vbva_cmd_hdr { 59 1.1 riastrad s16 x; 60 1.1 riastrad s16 y; 61 1.1 riastrad u16 w; 62 1.1 riastrad u16 h; 63 1.1 riastrad } __packed; 64 1.1 riastrad 65 1.1 riastrad /* 66 1.1 riastrad * The VBVA ring buffer is suitable for transferring large (< 2GB) amount of 67 1.1 riastrad * data. For example big bitmaps which do not fit to the buffer. 68 1.1 riastrad * 69 1.1 riastrad * Guest starts writing to the buffer by initializing a record entry in the 70 1.1 riastrad * records queue. VBVA_F_RECORD_PARTIAL indicates that the record is being 71 1.1 riastrad * written. As data is written to the ring buffer, the guest increases 72 1.1 riastrad * free_offset. 73 1.1 riastrad * 74 1.1 riastrad * The host reads the records on flushes and processes all completed records. 75 1.1 riastrad * When host encounters situation when only a partial record presents and 76 1.1 riastrad * len_and_flags & ~VBVA_F_RECORD_PARTIAL >= VBVA_RING_BUFFER_SIZE - 77 1.1 riastrad * VBVA_RING_BUFFER_THRESHOLD, the host fetched all record data and updates 78 1.1 riastrad * data_offset. After that on each flush the host continues fetching the data 79 1.1 riastrad * until the record is completed. 80 1.1 riastrad */ 81 1.1 riastrad 82 1.1 riastrad #define VBVA_RING_BUFFER_SIZE (4194304 - 1024) 83 1.1 riastrad #define VBVA_RING_BUFFER_THRESHOLD (4096) 84 1.1 riastrad 85 1.1 riastrad #define VBVA_MAX_RECORDS (64) 86 1.1 riastrad 87 1.1 riastrad #define VBVA_F_MODE_ENABLED 0x00000001u 88 1.1 riastrad #define VBVA_F_MODE_VRDP 0x00000002u 89 1.1 riastrad #define VBVA_F_MODE_VRDP_RESET 0x00000004u 90 1.1 riastrad #define VBVA_F_MODE_VRDP_ORDER_MASK 0x00000008u 91 1.1 riastrad 92 1.1 riastrad #define VBVA_F_STATE_PROCESSING 0x00010000u 93 1.1 riastrad 94 1.1 riastrad #define VBVA_F_RECORD_PARTIAL 0x80000000u 95 1.1 riastrad 96 1.1 riastrad struct vbva_record { 97 1.1 riastrad u32 len_and_flags; 98 1.1 riastrad } __packed; 99 1.1 riastrad 100 1.1 riastrad /* 101 1.1 riastrad * The minimum HGSMI heap size is PAGE_SIZE (4096 bytes) and is a restriction of 102 1.1 riastrad * the runtime heapsimple API. Use minimum 2 pages here, because the info area 103 1.1 riastrad * also may contain other data (for example hgsmi_host_flags structure). 104 1.1 riastrad */ 105 1.1 riastrad #define VBVA_ADAPTER_INFORMATION_SIZE 65536 106 1.1 riastrad #define VBVA_MIN_BUFFER_SIZE 65536 107 1.1 riastrad 108 1.1 riastrad /* The value for port IO to let the adapter to interpret the adapter memory. */ 109 1.1 riastrad #define VBOX_VIDEO_DISABLE_ADAPTER_MEMORY 0xFFFFFFFF 110 1.1 riastrad 111 1.1 riastrad /* The value for port IO to let the adapter to interpret the adapter memory. */ 112 1.1 riastrad #define VBOX_VIDEO_INTERPRET_ADAPTER_MEMORY 0x00000000 113 1.1 riastrad 114 1.1 riastrad /* 115 1.1 riastrad * The value for port IO to let the adapter to interpret the display memory. 116 1.1 riastrad * The display number is encoded in low 16 bits. 117 1.1 riastrad */ 118 1.1 riastrad #define VBOX_VIDEO_INTERPRET_DISPLAY_MEMORY_BASE 0x00010000 119 1.1 riastrad 120 1.1 riastrad struct vbva_host_flags { 121 1.1 riastrad u32 host_events; 122 1.1 riastrad u32 supported_orders; 123 1.1 riastrad } __packed; 124 1.1 riastrad 125 1.1 riastrad struct vbva_buffer { 126 1.1 riastrad struct vbva_host_flags host_flags; 127 1.1 riastrad 128 1.1 riastrad /* The offset where the data start in the buffer. */ 129 1.1 riastrad u32 data_offset; 130 1.1 riastrad /* The offset where next data must be placed in the buffer. */ 131 1.1 riastrad u32 free_offset; 132 1.1 riastrad 133 1.1 riastrad /* The queue of record descriptions. */ 134 1.1 riastrad struct vbva_record records[VBVA_MAX_RECORDS]; 135 1.1 riastrad u32 record_first_index; 136 1.1 riastrad u32 record_free_index; 137 1.1 riastrad 138 1.1 riastrad /* Space to leave free when large partial records are transferred. */ 139 1.1 riastrad u32 partial_write_tresh; 140 1.1 riastrad 141 1.1 riastrad u32 data_len; 142 1.1 riastrad /* variable size for the rest of the vbva_buffer area in VRAM. */ 143 1.1 riastrad u8 data[0]; 144 1.1 riastrad } __packed; 145 1.1 riastrad 146 1.1 riastrad #define VBVA_MAX_RECORD_SIZE (128 * 1024 * 1024) 147 1.1 riastrad 148 1.1 riastrad /* guest->host commands */ 149 1.1 riastrad #define VBVA_QUERY_CONF32 1 150 1.1 riastrad #define VBVA_SET_CONF32 2 151 1.1 riastrad #define VBVA_INFO_VIEW 3 152 1.1 riastrad #define VBVA_INFO_HEAP 4 153 1.1 riastrad #define VBVA_FLUSH 5 154 1.1 riastrad #define VBVA_INFO_SCREEN 6 155 1.1 riastrad #define VBVA_ENABLE 7 156 1.1 riastrad #define VBVA_MOUSE_POINTER_SHAPE 8 157 1.1 riastrad /* informs host about HGSMI caps. see vbva_caps below */ 158 1.1 riastrad #define VBVA_INFO_CAPS 12 159 1.1 riastrad /* configures scanline, see VBVASCANLINECFG below */ 160 1.1 riastrad #define VBVA_SCANLINE_CFG 13 161 1.1 riastrad /* requests scanline info, see VBVASCANLINEINFO below */ 162 1.1 riastrad #define VBVA_SCANLINE_INFO 14 163 1.1 riastrad /* inform host about VBVA Command submission */ 164 1.1 riastrad #define VBVA_CMDVBVA_SUBMIT 16 165 1.1 riastrad /* inform host about VBVA Command submission */ 166 1.1 riastrad #define VBVA_CMDVBVA_FLUSH 17 167 1.1 riastrad /* G->H DMA command */ 168 1.1 riastrad #define VBVA_CMDVBVA_CTL 18 169 1.1 riastrad /* Query most recent mode hints sent */ 170 1.1 riastrad #define VBVA_QUERY_MODE_HINTS 19 171 1.1 riastrad /* 172 1.1 riastrad * Report the guest virtual desktop position and size for mapping host and 173 1.1 riastrad * guest pointer positions. 174 1.1 riastrad */ 175 1.1 riastrad #define VBVA_REPORT_INPUT_MAPPING 20 176 1.1 riastrad /* Report the guest cursor position and query the host position. */ 177 1.1 riastrad #define VBVA_CURSOR_POSITION 21 178 1.1 riastrad 179 1.1 riastrad /* host->guest commands */ 180 1.1 riastrad #define VBVAHG_EVENT 1 181 1.1 riastrad #define VBVAHG_DISPLAY_CUSTOM 2 182 1.1 riastrad 183 1.1 riastrad /* vbva_conf32::index */ 184 1.1 riastrad #define VBOX_VBVA_CONF32_MONITOR_COUNT 0 185 1.1 riastrad #define VBOX_VBVA_CONF32_HOST_HEAP_SIZE 1 186 1.1 riastrad /* 187 1.1 riastrad * Returns VINF_SUCCESS if the host can report mode hints via VBVA. 188 1.1 riastrad * Set value to VERR_NOT_SUPPORTED before calling. 189 1.1 riastrad */ 190 1.1 riastrad #define VBOX_VBVA_CONF32_MODE_HINT_REPORTING 2 191 1.1 riastrad /* 192 1.1 riastrad * Returns VINF_SUCCESS if the host can report guest cursor enabled status via 193 1.1 riastrad * VBVA. Set value to VERR_NOT_SUPPORTED before calling. 194 1.1 riastrad */ 195 1.1 riastrad #define VBOX_VBVA_CONF32_GUEST_CURSOR_REPORTING 3 196 1.1 riastrad /* 197 1.1 riastrad * Returns the currently available host cursor capabilities. Available if 198 1.1 riastrad * VBOX_VBVA_CONF32_GUEST_CURSOR_REPORTING returns success. 199 1.1 riastrad */ 200 1.1 riastrad #define VBOX_VBVA_CONF32_CURSOR_CAPABILITIES 4 201 1.1 riastrad /* Returns the supported flags in vbva_infoscreen.flags. */ 202 1.1 riastrad #define VBOX_VBVA_CONF32_SCREEN_FLAGS 5 203 1.1 riastrad /* Returns the max size of VBVA record. */ 204 1.1 riastrad #define VBOX_VBVA_CONF32_MAX_RECORD_SIZE 6 205 1.1 riastrad 206 1.1 riastrad struct vbva_conf32 { 207 1.1 riastrad u32 index; 208 1.1 riastrad u32 value; 209 1.1 riastrad } __packed; 210 1.1 riastrad 211 1.1 riastrad /* Reserved for historical reasons. */ 212 1.1 riastrad #define VBOX_VBVA_CURSOR_CAPABILITY_RESERVED0 BIT(0) 213 1.1 riastrad /* 214 1.1 riastrad * Guest cursor capability: can the host show a hardware cursor at the host 215 1.1 riastrad * pointer location? 216 1.1 riastrad */ 217 1.1 riastrad #define VBOX_VBVA_CURSOR_CAPABILITY_HARDWARE BIT(1) 218 1.1 riastrad /* Reserved for historical reasons. */ 219 1.1 riastrad #define VBOX_VBVA_CURSOR_CAPABILITY_RESERVED2 BIT(2) 220 1.1 riastrad /* Reserved for historical reasons. Must always be unset. */ 221 1.1 riastrad #define VBOX_VBVA_CURSOR_CAPABILITY_RESERVED3 BIT(3) 222 1.1 riastrad /* Reserved for historical reasons. */ 223 1.1 riastrad #define VBOX_VBVA_CURSOR_CAPABILITY_RESERVED4 BIT(4) 224 1.1 riastrad /* Reserved for historical reasons. */ 225 1.1 riastrad #define VBOX_VBVA_CURSOR_CAPABILITY_RESERVED5 BIT(5) 226 1.1 riastrad 227 1.1 riastrad struct vbva_infoview { 228 1.1 riastrad /* Index of the screen, assigned by the guest. */ 229 1.1 riastrad u32 view_index; 230 1.1 riastrad 231 1.1 riastrad /* The screen offset in VRAM, the framebuffer starts here. */ 232 1.1 riastrad u32 view_offset; 233 1.1 riastrad 234 1.1 riastrad /* The size of the VRAM memory that can be used for the view. */ 235 1.1 riastrad u32 view_size; 236 1.1 riastrad 237 1.1 riastrad /* The recommended maximum size of the VRAM memory for the screen. */ 238 1.1 riastrad u32 max_screen_size; 239 1.1 riastrad } __packed; 240 1.1 riastrad 241 1.1 riastrad struct vbva_flush { 242 1.1 riastrad u32 reserved; 243 1.1 riastrad } __packed; 244 1.1 riastrad 245 1.1 riastrad /* vbva_infoscreen.flags */ 246 1.1 riastrad #define VBVA_SCREEN_F_NONE 0x0000 247 1.1 riastrad #define VBVA_SCREEN_F_ACTIVE 0x0001 248 1.1 riastrad /* 249 1.1 riastrad * The virtual monitor has been disabled by the guest and should be removed 250 1.1 riastrad * by the host and ignored for purposes of pointer position calculation. 251 1.1 riastrad */ 252 1.1 riastrad #define VBVA_SCREEN_F_DISABLED 0x0002 253 1.1 riastrad /* 254 1.1 riastrad * The virtual monitor has been blanked by the guest and should be blacked 255 1.1 riastrad * out by the host using width, height, etc values from the vbva_infoscreen 256 1.1 riastrad * request. 257 1.1 riastrad */ 258 1.1 riastrad #define VBVA_SCREEN_F_BLANK 0x0004 259 1.1 riastrad /* 260 1.1 riastrad * The virtual monitor has been blanked by the guest and should be blacked 261 1.1 riastrad * out by the host using the previous mode values for width. height, etc. 262 1.1 riastrad */ 263 1.1 riastrad #define VBVA_SCREEN_F_BLANK2 0x0008 264 1.1 riastrad 265 1.1 riastrad struct vbva_infoscreen { 266 1.1 riastrad /* Which view contains the screen. */ 267 1.1 riastrad u32 view_index; 268 1.1 riastrad 269 1.1 riastrad /* Physical X origin relative to the primary screen. */ 270 1.1 riastrad s32 origin_x; 271 1.1 riastrad 272 1.1 riastrad /* Physical Y origin relative to the primary screen. */ 273 1.1 riastrad s32 origin_y; 274 1.1 riastrad 275 1.1 riastrad /* Offset of visible framebuffer relative to the framebuffer start. */ 276 1.1 riastrad u32 start_offset; 277 1.1 riastrad 278 1.1 riastrad /* The scan line size in bytes. */ 279 1.1 riastrad u32 line_size; 280 1.1 riastrad 281 1.1 riastrad /* Width of the screen. */ 282 1.1 riastrad u32 width; 283 1.1 riastrad 284 1.1 riastrad /* Height of the screen. */ 285 1.1 riastrad u32 height; 286 1.1 riastrad 287 1.1 riastrad /* Color depth. */ 288 1.1 riastrad u16 bits_per_pixel; 289 1.1 riastrad 290 1.1 riastrad /* VBVA_SCREEN_F_* */ 291 1.1 riastrad u16 flags; 292 1.1 riastrad } __packed; 293 1.1 riastrad 294 1.1 riastrad /* vbva_enable.flags */ 295 1.1 riastrad #define VBVA_F_NONE 0x00000000 296 1.1 riastrad #define VBVA_F_ENABLE 0x00000001 297 1.1 riastrad #define VBVA_F_DISABLE 0x00000002 298 1.1 riastrad /* extended VBVA to be used with WDDM */ 299 1.1 riastrad #define VBVA_F_EXTENDED 0x00000004 300 1.1 riastrad /* vbva offset is absolute VRAM offset */ 301 1.1 riastrad #define VBVA_F_ABSOFFSET 0x00000008 302 1.1 riastrad 303 1.1 riastrad struct vbva_enable { 304 1.1 riastrad u32 flags; 305 1.1 riastrad u32 offset; 306 1.1 riastrad s32 result; 307 1.1 riastrad } __packed; 308 1.1 riastrad 309 1.1 riastrad struct vbva_enable_ex { 310 1.1 riastrad struct vbva_enable base; 311 1.1 riastrad u32 screen_id; 312 1.1 riastrad } __packed; 313 1.1 riastrad 314 1.1 riastrad struct vbva_mouse_pointer_shape { 315 1.1 riastrad /* The host result. */ 316 1.1 riastrad s32 result; 317 1.1 riastrad 318 1.1 riastrad /* VBOX_MOUSE_POINTER_* bit flags. */ 319 1.1 riastrad u32 flags; 320 1.1 riastrad 321 1.1 riastrad /* X coordinate of the hot spot. */ 322 1.1 riastrad u32 hot_X; 323 1.1 riastrad 324 1.1 riastrad /* Y coordinate of the hot spot. */ 325 1.1 riastrad u32 hot_y; 326 1.1 riastrad 327 1.1 riastrad /* Width of the pointer in pixels. */ 328 1.1 riastrad u32 width; 329 1.1 riastrad 330 1.1 riastrad /* Height of the pointer in scanlines. */ 331 1.1 riastrad u32 height; 332 1.1 riastrad 333 1.1 riastrad /* Pointer data. 334 1.1 riastrad * 335 1.1 riastrad * The data consists of 1 bpp AND mask followed by 32 bpp XOR (color) 336 1.1 riastrad * mask. 337 1.1 riastrad * 338 1.1 riastrad * For pointers without alpha channel the XOR mask pixels are 32 bit 339 1.1 riastrad * values: (lsb)BGR0(msb). For pointers with alpha channel the XOR mask 340 1.1 riastrad * consists of (lsb)BGRA(msb) 32 bit values. 341 1.1 riastrad * 342 1.1 riastrad * Guest driver must create the AND mask for pointers with alpha chan., 343 1.1 riastrad * so if host does not support alpha, the pointer could be displayed as 344 1.1 riastrad * a normal color pointer. The AND mask can be constructed from alpha 345 1.1 riastrad * values. For example alpha value >= 0xf0 means bit 0 in the AND mask. 346 1.1 riastrad * 347 1.1 riastrad * The AND mask is 1 bpp bitmap with byte aligned scanlines. Size of AND 348 1.1 riastrad * mask, therefore, is and_len = (width + 7) / 8 * height. The padding 349 1.1 riastrad * bits at the end of any scanline are undefined. 350 1.1 riastrad * 351 1.1 riastrad * The XOR mask follows the AND mask on the next 4 bytes aligned offset: 352 1.1 riastrad * u8 *xor = and + (and_len + 3) & ~3 353 1.1 riastrad * Bytes in the gap between the AND and the XOR mask are undefined. 354 1.1 riastrad * XOR mask scanlines have no gap between them and size of XOR mask is: 355 1.1 riastrad * xor_len = width * 4 * height. 356 1.1 riastrad * 357 1.1 riastrad * Preallocate 4 bytes for accessing actual data as p->data. 358 1.1 riastrad */ 359 1.1 riastrad u8 data[4]; 360 1.1 riastrad } __packed; 361 1.1 riastrad 362 1.1 riastrad /* pointer is visible */ 363 1.1 riastrad #define VBOX_MOUSE_POINTER_VISIBLE 0x0001 364 1.1 riastrad /* pointer has alpha channel */ 365 1.1 riastrad #define VBOX_MOUSE_POINTER_ALPHA 0x0002 366 1.1 riastrad /* pointerData contains new pointer shape */ 367 1.1 riastrad #define VBOX_MOUSE_POINTER_SHAPE 0x0004 368 1.1 riastrad 369 1.1 riastrad /* 370 1.1 riastrad * The guest driver can handle asynch guest cmd completion by reading the 371 1.1 riastrad * command offset from io port. 372 1.1 riastrad */ 373 1.1 riastrad #define VBVACAPS_COMPLETEGCMD_BY_IOREAD 0x00000001 374 1.1 riastrad /* the guest driver can handle video adapter IRQs */ 375 1.1 riastrad #define VBVACAPS_IRQ 0x00000002 376 1.1 riastrad /* The guest can read video mode hints sent via VBVA. */ 377 1.1 riastrad #define VBVACAPS_VIDEO_MODE_HINTS 0x00000004 378 1.1 riastrad /* The guest can switch to a software cursor on demand. */ 379 1.1 riastrad #define VBVACAPS_DISABLE_CURSOR_INTEGRATION 0x00000008 380 1.1 riastrad /* The guest does not depend on host handling the VBE registers. */ 381 1.1 riastrad #define VBVACAPS_USE_VBVA_ONLY 0x00000010 382 1.1 riastrad 383 1.1 riastrad struct vbva_caps { 384 1.1 riastrad s32 rc; 385 1.1 riastrad u32 caps; 386 1.1 riastrad } __packed; 387 1.1 riastrad 388 1.1 riastrad /* Query the most recent mode hints received from the host. */ 389 1.1 riastrad struct vbva_query_mode_hints { 390 1.1 riastrad /* The maximum number of screens to return hints for. */ 391 1.1 riastrad u16 hints_queried_count; 392 1.1 riastrad /* The size of the mode hint structures directly following this one. */ 393 1.1 riastrad u16 hint_structure_guest_size; 394 1.1 riastrad /* Return code for the operation. Initialise to VERR_NOT_SUPPORTED. */ 395 1.1 riastrad s32 rc; 396 1.1 riastrad } __packed; 397 1.1 riastrad 398 1.1 riastrad /* 399 1.1 riastrad * Structure in which a mode hint is returned. The guest allocates an array 400 1.1 riastrad * of these immediately after the vbva_query_mode_hints structure. 401 1.1 riastrad * To accommodate future extensions, the vbva_query_mode_hints structure 402 1.1 riastrad * specifies the size of the vbva_modehint structures allocated by the guest, 403 1.1 riastrad * and the host only fills out structure elements which fit into that size. The 404 1.1 riastrad * host should fill any unused members (e.g. dx, dy) or structure space on the 405 1.1 riastrad * end with ~0. The whole structure can legally be set to ~0 to skip a screen. 406 1.1 riastrad */ 407 1.1 riastrad struct vbva_modehint { 408 1.1 riastrad u32 magic; 409 1.1 riastrad u32 cx; 410 1.1 riastrad u32 cy; 411 1.1 riastrad u32 bpp; /* Which has never been used... */ 412 1.1 riastrad u32 display; 413 1.1 riastrad u32 dx; /* X offset into the virtual frame-buffer. */ 414 1.1 riastrad u32 dy; /* Y offset into the virtual frame-buffer. */ 415 1.1 riastrad u32 enabled; /* Not flags. Add new members for new flags. */ 416 1.1 riastrad } __packed; 417 1.1 riastrad 418 1.1 riastrad #define VBVAMODEHINT_MAGIC 0x0801add9u 419 1.1 riastrad 420 1.1 riastrad /* 421 1.1 riastrad * Report the rectangle relative to which absolute pointer events should be 422 1.1 riastrad * expressed. This information remains valid until the next VBVA resize event 423 1.1 riastrad * for any screen, at which time it is reset to the bounding rectangle of all 424 1.1 riastrad * virtual screens and must be re-set. 425 1.1 riastrad */ 426 1.1 riastrad struct vbva_report_input_mapping { 427 1.1 riastrad s32 x; /* Upper left X co-ordinate relative to the first screen. */ 428 1.1 riastrad s32 y; /* Upper left Y co-ordinate relative to the first screen. */ 429 1.1 riastrad u32 cx; /* Rectangle width. */ 430 1.1 riastrad u32 cy; /* Rectangle height. */ 431 1.1 riastrad } __packed; 432 1.1 riastrad 433 1.1 riastrad /* 434 1.1 riastrad * Report the guest cursor position and query the host one. The host may wish 435 1.1 riastrad * to use the guest information to re-position its own cursor (though this is 436 1.1 riastrad * currently unlikely). 437 1.1 riastrad */ 438 1.1 riastrad struct vbva_cursor_position { 439 1.1 riastrad u32 report_position; /* Are we reporting a position? */ 440 1.1 riastrad u32 x; /* Guest cursor X position */ 441 1.1 riastrad u32 y; /* Guest cursor Y position */ 442 1.1 riastrad } __packed; 443 1.1 riastrad 444 1.1 riastrad #endif 445