Home | History | Annotate | Download | only in src

Lines Matching refs:qxl

32 #include "qxl.h"
187 setup_slot (qxl_screen_t *qxl, uint8_t slot_index_offset,
196 ram_header = (void *)((unsigned long)qxl->ram + (unsigned long)qxl->rom->ram_header_offset);
198 slot_index = qxl->rom->slots_start + slot_index_offset;
199 slot = &qxl->mem_slots[slot_index];
208 qxl_io_memslot_add (qxl, slot_index);
210 slot->generation = qxl->rom->slot_generation;
212 high_bits = slot_index << qxl->slot_gen_bits;
214 high_bits <<= (64 - (qxl->slot_gen_bits + qxl->slot_id_bits));
221 qxl_reset_and_create_mem_slots (qxl_screen_t *qxl)
223 ioport_write (qxl, QXL_IO_RESET, 0);
224 qxl->device_primary = QXL_DEVICE_PRIMARY_NONE;
227 qxl->rom->slots_start,
228 qxl->rom->slots_end);
231 qxl->n_mem_slots = qxl->rom->slots_end;
232 qxl->slot_gen_bits = qxl->rom->slot_gen_bits;
233 qxl->slot_id_bits = qxl->rom->slot_id_bits;
234 qxl->va_slot_mask = (~(uint64_t)0) >> (qxl->slot_id_bits + qxl->slot_gen_bits);
236 qxl->mem_slots = xnfalloc (qxl->n_mem_slots * sizeof (qxl_memslot_t));
239 qxl->main_mem_slot = qxl->vram_mem_slot = setup_slot (qxl, 0, 0, ~0, 0, ~0);
240 #else /* QXL */
241 qxl->main_mem_slot = setup_slot (qxl, 0,
242 (unsigned long)qxl->ram_physical,
243 (unsigned long)qxl->ram_physical + qxl->surface0_size +
244 (unsigned long)qxl->rom->num_pages * getpagesize (),
245 (uint64_t)(uintptr_t)qxl->ram,
246 (uint64_t)(uintptr_t)qxl->ram + qxl->surface0_size +
247 (unsigned long)qxl->rom->num_pages * getpagesize ()
249 qxl->vram_mem_slot = setup_slot (qxl, 1,
250 (unsigned long)qxl->vram_physical,
251 (unsigned long)qxl->vram_physical + (unsigned long)qxl->vram_size,
252 (uint64_t)(uintptr_t)qxl->vram,
253 (uint64_t)(uintptr_t)qxl->vram + (uint64_t)qxl->vram_size);
256 qxl_allocate_monitors_config(qxl);
260 qxl_mark_mem_unverifiable (qxl_screen_t *qxl)
262 qxl_mem_unverifiable (qxl->mem);
263 qxl_mem_unverifiable (qxl->surf_mem);
268 qxl_garbage_collect_internal (qxl_screen_t *qxl, uint64_t id)
277 union QXLReleaseInfo *info = qxl->bo_funcs->bo_map(info_bo);
295 to_free = qxl_ums_lookup_phy_addr(qxl, cmd->u.set.shape);
296 qxl->bo_funcs->bo_decref (qxl, to_free);
302 to_free = qxl_ums_lookup_phy_addr(qxl, drawable->u.copy.src_bitmap);
303 image = qxl->bo_funcs->bo_map(to_free);
307 qxl_surface_unref (qxl->surface_cache, image->surface_image.surface_id);
308 qxl_surface_cache_sanity_check (qxl->surface_cache);
309 qxl->bo_funcs->bo_unmap(to_free);
310 qxl->bo_funcs->bo_decref (qxl, to_free);
314 qxl->bo_funcs->bo_unmap(to_free);
315 qxl_image_destroy (qxl, to_free);
324 bo = qxl_ums_lookup_phy_addr(qxl, drawable->u.composite.src);
325 qxl->bo_funcs->bo_decref (qxl, bo);
329 bo = qxl_ums_lookup_phy_addr(qxl, composite->src_transform);
330 qxl->bo_funcs->bo_decref (qxl, bo);
338 bo = qxl_ums_lookup_phy_addr(qxl, drawable->u.composite.mask_transform);
339 qxl->bo_funcs->bo_decref (qxl, bo);
341 bo = qxl_ums_lookup_phy_addr(qxl, drawable->u.composite.mask);
342 qxl->bo_funcs->bo_decref (qxl, bo);
347 qxl_surface_recycle (qxl->surface_cache, surface_cmd->surface_id);
348 qxl_surface_cache_sanity_check (qxl->surface_cache);
353 qxl->bo_funcs->bo_unmap(info_bo);
354 qxl->bo_funcs->bo_decref(qxl, info_bo);
360 qxl_garbage_collect (qxl_screen_t *qxl)
365 while (qxl_ring_pop (qxl->release_ring, &id))
369 id = qxl_garbage_collect_internal (qxl, id);
392 qxl_handle_oom (qxl_screen_t *qxl)
394 qxl_io_notify_oom (qxl);
401 if (!(qxl_garbage_collect (qxl)))
404 return qxl_garbage_collect (qxl);
408 qxl_allocnf (qxl_screen_t *qxl, unsigned long size, const char *name)
417 qxl_garbage_collect (qxl);
419 while (!(result = qxl_alloc (qxl->mem, size, name)))
424 if (!qxl_garbage_collect (qxl))
426 if (qxl_handle_oom (qxl))
433 qxl_mem_dump_stats (qxl->mem, "Out of mem - stats\n");
450 qxl_screen_t *qxl;
454 static struct qxl_bo *qxl_bo_alloc_internal(qxl_screen_t *qxl, int type, int flags, unsigned long size, const char *name)
466 bo->qxl = qxl;
469 mptr = qxl->surf_mem;
471 mptr = qxl->mem;
480 bo->internal_virt_addr = qxl_allocnf(qxl, size, name);
483 xorg_list_add(&bo->bos, &qxl->ums_bos);
488 static struct qxl_bo *qxl_bo_alloc(qxl_screen_t *qxl, unsigned long size, const char *name)
490 return qxl_bo_alloc_internal(qxl, QXL_BO_DATA, 0, size, name);
493 static struct qxl_bo *qxl_cmd_alloc(qxl_screen_t *qxl, unsigned long size, const char *name)
495 return qxl_bo_alloc_internal(qxl, QXL_BO_CMD, 0, size, name);
515 static void qxl_bo_output_bo_reloc(qxl_screen_t *qxl, uint32_t dst_offset,
527 slot_id = src_bo->type == QXL_BO_SURF ? qxl->vram_mem_slot : qxl->main_mem_slot;
528 value = physical_address(qxl, src_bo->internal_virt_addr, slot_id);
533 static void qxl_bo_output_cmd_reloc(qxl_screen_t *qxl, QXLCommand *command,
542 slot_id = src_bo->type == QXL_BO_SURF ? qxl->vram_mem_slot : qxl->main_mem_slot;
543 value = physical_address(qxl, src_bo->internal_virt_addr, slot_id);
548 struct qxl_bo *qxl_ums_lookup_phy_addr(qxl_screen_t *qxl, uint64_t phy_addr)
554 slot_id = qxl->main_mem_slot;
555 virt_addr = (void *)virtual_address(qxl, u64_to_pointer(phy_addr), slot_id);
557 xorg_list_for_each_entry(bo, &qxl->ums_bos, bos) {
566 static void qxl_bo_incref(qxl_screen_t *qxl, struct qxl_bo *_bo)
572 static void qxl_bo_decref(qxl_screen_t *qxl, struct qxl_bo *_bo)
586 mptr = qxl->surf_mem;
588 mptr = qxl->mem;
597 static void qxl_bo_write_command(qxl_screen_t *qxl, uint32_t cmd_type, struct qxl_bo *bo)
614 if (!qxl->pScrn->vtSema && cmd_type != QXL_CMD_SURFACE)
618 qxl_bo_output_cmd_reloc(qxl, &cmd, bo);
621 qxl_ring_push (qxl->cursor_ring, &cmd);
623 qxl_ring_push (qxl->command_ring, &cmd);
625 qxl_bo_decref(qxl, bo);
630 struct QXLRam *ram_header = get_ram_header(surf->qxl);
639 qxl_update_area(surf->qxl);
643 static struct qxl_bo *qxl_bo_create_primary(qxl_screen_t *qxl, uint32_t width, uint32_t height, int32_t stride, uint32_t format)
647 (void *)((unsigned long)qxl->ram + qxl->rom->ram_header_offset);
658 create->mem = physical_address (qxl, qxl->ram, qxl->main_mem_slot);
660 qxl_io_create_primary(qxl);
669 bo->qxl = qxl;
671 bo->internal_virt_addr = (uint8_t *)qxl->ram + stride * (height - 1);
673 qxl->primary_bo = (struct qxl_bo *)bo;
677 static void qxl_bo_destroy_primary(qxl_screen_t *qxl, struct qxl_bo *bo)
680 qxl->primary_bo = NULL;
682 qxl_io_destroy_primary (qxl);
685 static void qxl_bo_output_surf_reloc(qxl_screen_t *qxl, uint32_t dst_offset,
710 void qxl_ums_setup_funcs(qxl_screen_t *qxl)
712 qxl->bo_funcs = &qxl_ums_bo_funcs;
715 struct qxl_bo *qxl_ums_surf_mem_alloc(qxl_screen_t *qxl, uint32_t size)
718 bo = qxl_bo_alloc_internal (qxl, QXL_BO_SURF, QXL_BO_FLAG_FAIL, size, "surface memory");