Lines Matching defs:qxl
27 * This is qxl, a driver for the Qumranet paravirtualized graphics device
45 #include "qxl.h"
178 qxl_allocate_monitors_config (qxl_screen_t *qxl)
180 qxl->monitors_config = (QXLMonitorsConfig *)(void *)
181 ((unsigned long)qxl->ram + qxl->rom->ram_header_offset - qxl->monitors_config_size);
192 unmap_memory_helper (qxl_screen_t *qxl)
194 free (qxl->ram);
195 free (qxl->vram);
196 free (qxl->rom);
200 map_memory_helper (qxl_screen_t *qxl)
202 qxl->ram = calloc (qxl->ram_size, 1);
203 qxl->ram_physical = qxl->ram;
204 qxl->vram = calloc (qxl->vram_size, 1);
205 qxl->vram_physical = qxl->vram;
206 qxl->rom = calloc (ROM_SIZE, 1);
208 init_qxl_rom (qxl, ROM_SIZE);
214 unmap_memory_helper (qxl_screen_t *qxl)
217 if (qxl->ram)
218 pci_device_unmap_range (qxl->pci, qxl->ram, qxl->pci->regions[0].size);
219 if (qxl->vram)
220 pci_device_unmap_range (qxl->pci, qxl->vram, qxl->pci->regions[1].size);
221 if (qxl->rom)
222 pci_device_unmap_range (qxl->pci, qxl->rom, qxl->pci->regions[2].size);
223 if (qxl->io)
224 pci_device_close_io (qxl->pci, qxl->io);
226 if (qxl->ram)
227 xf86UnMapVidMem (scrnIndex, qxl->ram, (1 << qxl->pci->size[0]));
228 if (qxl->vram)
229 xf86UnMapVidMem (scrnIndex, qxl->vram, (1 << qxl->pci->size[1]));
230 if (qxl->rom)
231 xf86UnMapVidMem (scrnIndex, qxl->rom, (1 << qxl->pci->size[2]));
236 map_memory_helper (qxl_screen_t *qxl)
239 pci_device_map_range (qxl->pci, qxl->pci->regions[0].base_addr,
240 qxl->pci->regions[0].size,
242 &qxl->ram);
243 qxl->ram_physical = u64_to_pointer (qxl->pci->regions[0].base_addr);
244 qxl->ram_size = qxl->pci->regions[0].size;
246 pci_device_map_range (qxl->pci, qxl->pci->regions[1].base_addr,
247 qxl->pci->regions[1].size,
249 &qxl->vram);
250 qxl->vram_physical = u64_to_pointer (qxl->pci->regions[1].base_addr);
251 qxl->vram_size = qxl->pci->regions[1].size;
253 pci_device_map_range (qxl->pci, qxl->pci->regions[2].base_addr,
254 qxl->pci->regions[2].size, 0,
255 (void **)&qxl->rom);
257 qxl->io = pci_device_open_io(qxl->pci,
258 qxl->pci->regions[3].base_addr,
259 qxl->pci->regions[3].size);
260 qxl->io_base = qxl->pci->regions[3].base_addr;
262 qxl->ram = xf86MapPciMem (scrnIndex, VIDMEM_FRAMEBUFFER,
263 qxl->pci_tag, qxl->pci->memBase[0],
264 (1 << qxl->pci->size[0]));
265 qxl->ram_physical = (void *)qxl->pci->memBase[0];
267 qxl->vram = xf86MapPciMem (scrnIndex, VIDMEM_MMIO | VIDMEM_MMIO_32BIT,
268 qxl->pci_tag, qxl->pci->memBase[1],
269 (1 << qxl->pci->size[1]));
270 qxl->vram_physical = (void *)qxl->pci->memBase[1];
271 qxl->vram_size = (1 << qxl->pci->size[1]);
273 qxl->rom = xf86MapPciMem (scrnIndex, VIDMEM_MMIO | VIDMEM_MMIO_32BIT,
274 qxl->pci_tag, qxl->pci->memBase[2],
275 (1 << qxl->pci->size[2]));
277 qxl->io_base = qxl->pci->ioBase[3];
284 qxl_unmap_memory (qxl_screen_t *qxl)
287 if (qxl->worker)
289 spice_server_vm_stop(qxl->spice_server);
290 qxl->worker_running = FALSE;
294 if (qxl->mem)
296 qxl_mem_free_all (qxl->mem);
297 free(qxl->mem);
298 qxl->mem = NULL;
301 if (qxl->surf_mem) {
302 qxl_mem_free_all (qxl->surf_mem);
303 free(qxl->surf_mem);
304 qxl->surf_mem = NULL;
307 unmap_memory_helper (qxl);
308 qxl->ram = qxl->ram_physical = qxl->vram = qxl->rom = NULL;
310 qxl->num_modes = 0;
311 qxl->modes = NULL;
316 qxl_dump_ring_stat (qxl_screen_t *qxl)
321 cmd_prod = qxl_ring_prod (qxl->command_ring);
322 cursor_prod = qxl_ring_prod (qxl->cursor_ring);
323 cmd_cons = qxl_ring_cons (qxl->command_ring);
324 cursor_cons = qxl_ring_cons (qxl->cursor_ring);
325 release_prod = qxl_ring_prod (qxl->release_ring);
326 release_cons = qxl_ring_cons (qxl->release_ring);
335 /* To resize surface0 we need to ensure qxl->mem is empty. We can do that by:
343 qxl_resize_surface0 (qxl_screen_t *qxl, long surface0_size)
345 long ram_header_size = qxl->ram_size - qxl->rom->ram_header_offset;
346 long new_mem_size = qxl->ram_size -
347 (surface0_size + ram_header_size + qxl->monitors_config_size);
358 if (qxl->mem)
362 qxl_dump_ring_stat (qxl);
363 qxl_io_flush_surfaces (qxl);
364 surfaces = qxl_surface_cache_evacuate_all (qxl->surface_cache);
365 qxl_io_destroy_all_surfaces (qxl); // redundant?
366 qxl_io_flush_release (qxl);
367 qxl_dump_ring_stat (qxl);
368 qxl_surface_cache_replace_all (qxl->surface_cache, surfaces);
376 qxl->surface0_size = surface0_size;
378 qxl->mem_size = new_mem_size;
379 qxl->mem = qxl_mem_create ((void *)((unsigned long)qxl->surface0_area + qxl->surface0_size),
380 qxl->mem_size);
385 qxl_map_memory (qxl_screen_t *qxl, int scrnIndex)
387 map_memory_helper (qxl);
389 if (!qxl->ram || !qxl->vram || !qxl->rom)
393 qxl->ram, qxl->rom->surface0_area_size / 1024);
396 (void *)((unsigned long)qxl->ram + qxl->rom->surface0_area_size),
397 (qxl->rom->num_pages * getpagesize ()) / 1024);
400 qxl->vram, qxl->vram_size / 1024);
402 xf86DrvMsg (scrnIndex, X_INFO, "rom at %p\n", qxl->rom);
408 qxl->monitors_config_size = (sizeof (QXLMonitorsConfig) +
411 qxl->num_modes = *(uint32_t *)((uint8_t *)qxl->rom + qxl->rom->modes_offset);
412 qxl->modes = (struct QXLMode *)(((uint8_t *)qxl->rom) + qxl->rom->modes_offset + 4);
413 qxl->surface0_area = qxl->ram;
414 qxl->surface0_size = 0;
415 qxl->mem = NULL;
416 if (!qxl_resize_surface0 (qxl, qxl->rom->surface0_area_size))
418 qxl->surf_mem = qxl_mem_create ((void *)((unsigned long)qxl->vram), qxl->vram_size);
419 qxl_allocate_monitors_config (qxl);
439 qxl_screen_t *qxl = pScrn->driverPrivate;
441 if (xf86IsPrimaryPci (qxl->pci))
442 vgaHWSaveFonts (pScrn, &qxl->vgaRegs);
448 qxl_screen_t *qxl = pScrn->driverPrivate;
450 if (xf86IsPrimaryPci (qxl->pci))
451 vgaHWRestoreFonts (pScrn, &qxl->vgaRegs);
460 qxl_screen_t *qxl = pScrn->driverPrivate;
470 pScreen->CreateScreenResources = qxl->create_screen_resources;
471 pScreen->CloseScreen = qxl->close_screen;
476 if (!xf86IsPrimaryPci (qxl->pci) && qxl->primary)
477 qxl_reset_and_create_mem_slots (qxl);
483 qxl_mark_mem_unverifiable (qxl);
484 qxl_unmap_memory (qxl);
495 qxl_screen_t *qxl = pScrn->driverPrivate;
503 qxl->primary_mode.x_res, qxl->primary_mode.y_res,
505 qxl->primary_mode.x_res * qxl->bytes_per_pixel,
506 qxl_surface_get_host_bits(qxl->primary));
515 qxl_create_primary(qxl_screen_t *qxl)
517 struct QXLMode *pm = &qxl->primary_mode;
519 pm->x_res = qxl->virtual_x;
520 pm->y_res = qxl->virtual_y;
521 pm->bits = qxl->pScrn->bitsPerPixel;
522 pm->stride = qxl->virtual_x * pm->bits / 8;
527 return qxl_surface_cache_create_primary (qxl, &qxl->primary_mode);
531 qxl_resize_primary_to_virtual (qxl_screen_t *qxl)
535 if ((qxl->primary_mode.x_res == qxl->virtual_x &&
536 qxl->primary_mode.y_res == qxl->virtual_y) &&
537 qxl->device_primary == QXL_DEVICE_PRIMARY_CREATED)
542 ErrorF ("resizing primary to %dx%d\n", qxl->virtual_x, qxl->virtual_y);
544 if (!qxl->kms_enabled) {
546 qxl->virtual_x * qxl->pScrn->bitsPerPixel / 8 * qxl->virtual_y;
548 if (new_surface0_size > qxl->surface0_size)
550 if (!qxl_resize_surface0 (qxl, new_surface0_size))
558 if (qxl->primary)
560 qxl_surface_kill (qxl->primary);
561 qxl_surface_cache_sanity_check (qxl->surface_cache);
562 qxl->bo_funcs->destroy_primary(qxl, qxl->primary_bo);
565 qxl->primary = qxl_create_primary(qxl);
566 qxl->bytes_per_pixel = (qxl->pScrn->bitsPerPixel + 7) / 8;
568 if (qxl->screen_resources_created)
570 ScreenPtr pScreen = qxl->pScrn->pScreen;
573 if (qxl->deferred_fps <= 0)
580 set_surface (root, qxl->primary);
586 ErrorF ("primary is %p\n", qxl->primary);
591 qxl_resize_primary (qxl_screen_t *qxl, uint32_t width, uint32_t height)
593 qxl->virtual_x = width;
594 qxl->virtual_y = height;
596 if (qxl->vt_surfaces)
602 return qxl_resize_primary_to_virtual (qxl);
609 qxl_screen_t *qxl = pScrn->driverPrivate;
613 return qxl_resize_primary_to_virtual (qxl);
620 qxl_screen_t * qxl = pScrn->driverPrivate;
625 pScreen->CreateScreenResources = qxl->create_screen_resources;
634 if (qxl->deferred_fps <= 0)
641 set_surface (pPixmap, qxl->primary);
644 qxl_create_desired_modes (qxl);
645 qxl_update_edid (qxl);
647 qxl->screen_resources_created = TRUE;
654 spiceqxl_screen_init (ScrnInfoPtr pScrn, qxl_screen_t *qxl)
657 if (!qxl->spice_server)
659 qxl->spice_server = xspice_get_spice_server ();
660 xspice_set_spice_server_options (qxl->options);
661 qxl->core = basic_event_loop_init ();
662 if (spice_server_init (qxl->spice_server, qxl->core) < 0) {
666 qxl_add_spice_display_interface (qxl);
667 qxl_add_spice_playback_interface (qxl);
668 qxl_add_spice_smartcard_interface (qxl);
669 spiceqxl_vdagent_init (qxl);
680 if (! qxl->worker_running)
683 spice_server_vm_start(qxl->spice_server);
684 qxl->worker_running = TRUE;
691 qxl_fb_init (qxl_screen_t *qxl, ScreenPtr pScreen)
693 ScrnInfoPtr pScrn = qxl->pScrn;
695 if (!fbScreenInit (pScreen, qxl_surface_get_host_bits(qxl->primary),
709 qxl_screen_t * qxl = pScrn->driverPrivate;
715 assert (qxl->pScrn == pScrn);
717 if (!qxl_map_memory (qxl, pScrn->scrnIndex))
721 spiceqxl_screen_init (pScrn, qxl);
723 ram_header = (void *)((unsigned long)qxl->ram + (unsigned long)qxl->rom->ram_header_offset);
725 printf ("ram_header at %d\n", qxl->rom->ram_header_offset);
726 printf ("surf0 size: %d\n", qxl->rom->surface0_area_size);
739 ErrorF ("allocated %d x %d %p\n", pScrn->virtualX, pScrn->virtualY, qxl->fb);
743 qxl_reset_and_create_mem_slots (qxl);
746 qxl->surface_cache = qxl_surface_cache_create (qxl);
747 qxl->primary = qxl_create_primary(qxl);
749 if (!qxl_fb_init (qxl, pScreen))
766 qxl->command_ring = qxl_ring_create ((struct qxl_ring_header *)&(ram_header->cmd_ring),
768 QXL_COMMAND_RING_SIZE, QXL_IO_NOTIFY_CMD, qxl);
769 qxl->cursor_ring = qxl_ring_create ((struct qxl_ring_header *)&(ram_header->cursor_ring),
771 QXL_CURSOR_RING_SIZE, QXL_IO_NOTIFY_CURSOR, qxl);
772 qxl->release_ring = qxl_ring_create ((struct qxl_ring_header *)&(ram_header->release_ring),
774 QXL_RELEASE_RING_SIZE, 0, qxl);
780 qxl_uxa_init (qxl, pScreen);
782 uxa_set_fallback_debug (pScreen, qxl->debug_render_fallbacks);
800 qxl->create_screen_resources = pScreen->CreateScreenResources;
803 qxl->close_screen = pScreen->CloseScreen;
810 pScreen->width = qxl->primary_mode.x_res;
811 pScreen->height = qxl->primary_mode.y_res;
816 if (!qxl_resize_primary_to_virtual (qxl))
832 if (qxl->deferred_fps)
833 dfps_start_ticker(qxl);
845 qxl_screen_t *qxl = pScrn->driverPrivate;
849 qxl_reset_and_create_mem_slots (qxl);
851 if (!qxl_resize_primary_to_virtual (qxl))
854 if (qxl->mem)
856 qxl_mem_free_all (qxl->mem);
859 if (qxl->surf_mem)
860 qxl_mem_free_all (qxl->surf_mem);
862 if (qxl->vt_surfaces)
864 qxl_surface_cache_replace_all (qxl->surface_cache, qxl->vt_surfaces);
866 qxl->vt_surfaces = NULL;
869 qxl_create_desired_modes (qxl);
880 qxl_screen_t *qxl = pScrn->driverPrivate;
886 if (qxl->deferred_fps <= 0)
887 qxl->vt_surfaces = qxl_surface_cache_evacuate_all (qxl->surface_cache);
889 ioport_write (qxl, QXL_IO_RESET, 0);
892 qxl->device_primary = QXL_DEVICE_PRIMARY_NONE;
926 print_modes (qxl_screen_t *qxl, int scrnIndex)
930 for (i = 0; i < qxl->num_modes; ++i)
932 struct QXLMode *m = qxl->modes + i;
943 qxl_check_device (ScrnInfoPtr pScrn, qxl_screen_t *qxl)
946 struct QXLRom *rom = qxl->rom;
947 struct QXLRam *ram_header = (void *)((unsigned long)qxl->ram + rom->ram_header_offset);
965 rom->num_pages, (unsigned long)qxl->ram);
988 qxl_screen_t *qxl = pScrn->driverPrivate;
995 memcpy (qxl->options, DefaultOptions, sizeof (DefaultOptions));
996 xf86ProcessOptions (scrnIndex, pScrn->options, qxl->options);
998 qxl->enable_image_cache =
999 get_bool_option (qxl->options, OPTION_ENABLE_IMAGE_CACHE, "QXL_ENABLE_IMAGE_CACHE");
1000 qxl->enable_fallback_cache =
1001 get_bool_option (qxl->options, OPTION_ENABLE_FALLBACK_CACHE, "QXL_ENABLE_FALLBACK_CACHE");
1002 qxl->enable_surfaces =
1003 get_bool_option (qxl->options, OPTION_ENABLE_SURFACES, "QXL_ENABLE_SURFACES");
1004 qxl->debug_render_fallbacks =
1005 get_bool_option (qxl->options, OPTION_DEBUG_RENDER_FALLBACKS, "QXL_DEBUG_RENDER_FALLBACKS");
1006 qxl->num_heads =
1007 get_int_option (qxl->options, OPTION_NUM_HEADS, "QXL_NUM_HEADS");
1008 if (qxl->num_heads == 0) {
1010 qxl->num_heads = 1;
1013 qxl->deferred_fps = get_int_option(qxl->options, OPTION_SPICE_DEFERRED_FPS, "XSPICE_DEFERRED_FPS");
1014 if (qxl->deferred_fps > 0)
1015 xf86DrvMsg(scrnIndex, X_INFO, "Deferred FPS: %d\n", qxl->deferred_fps);
1020 qxl->enable_surfaces ? "Enabled" : "Disabled");
1022 qxl->enable_image_cache ? "Enabled" : "Disabled");
1024 qxl->enable_fallback_cache ? "Enabled" : "Disabled");
1035 qxl_screen_t *qxl = NULL;
1065 qxl = pScrn->driverPrivate;
1066 qxl->device_primary = QXL_DEVICE_PRIMARY_UNDEFINED;
1067 qxl->pScrn = pScrn;
1068 qxl->x_modes = NULL;
1069 qxl->entity = xf86GetEntityInfo (pScrn->entityList[0]);
1070 qxl->kms_enabled = FALSE;
1071 xorg_list_init(&qxl->ums_bos);
1074 qxl->pci = xf86GetPciInfoForEntity (qxl->entity->index);
1076 qxl->pci_tag = pciTag (qxl->pci->bus, qxl->pci->device, qxl->pci->func);
1078 if (qxl->pci->revision < 4)
1085 qxl_ums_setup_funcs(qxl);
1091 playback_fifo_dir = get_str_option(qxl->options, OPTION_SPICE_PLAYBACK_FIFO_DIR,
1094 strncpy(qxl->playback_fifo_dir, playback_fifo_dir, sizeof(qxl->playback_fifo_dir));
1096 qxl->playback_fifo_dir[0] = '\0';
1098 smartcard_file = get_str_option(qxl->options, OPTION_SPICE_SMARTCARD_FILE,
1101 strncpy(qxl->smartcard_file, smartcard_file, sizeof(qxl->smartcard_file));
1103 qxl->smartcard_file[0] = '\0';
1105 qxl->surface0_size =
1106 get_int_option (qxl->options, OPTION_FRAME_BUFFER_SIZE, "QXL_FRAME_BUFFER_SIZE") << 20L;
1107 qxl->vram_size =
1108 get_int_option (qxl->options, OPTION_SURFACE_BUFFER_SIZE, "QXL_SURFACE_BUFFER_SIZE") << 20L;
1109 qxl->ram_size =
1110 get_int_option (qxl->options, OPTION_COMMAND_BUFFER_SIZE, "QXL_COMMAND_BUFFER_SIZE") << 20L;
1113 if (!qxl_map_memory (qxl, scrnIndex))
1117 if (!qxl_check_device (pScrn, qxl))
1120 xspice_init_qxl_ram (qxl); /* initialize the rings */
1127 pScrn->videoRam = PAGES_TO_KB(qxl->rom->num_pages)
1128 - BYTES_TO_KB(qxl->monitors_config_size);
1130 xf86DrvMsg (scrnIndex, X_INFO, "%d surfaces\n", qxl->rom->n_surfaces);
1157 qxl_initialize_x_modes (qxl, pScrn, &max_x, &max_y);
1163 qxl_init_randr (pScrn, qxl);
1177 print_modes (qxl, scrnIndex);
1187 qxl_unmap_memory (qxl);
1200 if (qxl)
1201 free (qxl);
1244 xf86PrintChipsets ("qxl", "Driver for QXL virtual graphics", qxlChips);
1384 qxl_screen_t *qxl;
1400 qxl = pScrn->driverPrivate;
1401 qxl->pci = dev;
1417 qxl_screen_t *qxl;
1436 qxl = pScrn->driverPrivate = xnfcalloc (sizeof (qxl_screen_t), 1);
1437 qxl->pci = dev->pdev;
1438 qxl->platform_dev = dev;