Lines Matching refs:qxl
31 #include "qxl.h"
35 Bool qxl_kms_check_cap(qxl_screen_t *qxl, int idx)
41 ret = drmIoctl(qxl->drm_fd, DRM_IOCTL_QXL_CLIENTCAP, &cap);
48 static Bool qxl_kms_getparam(qxl_screen_t *qxl, uint64_t param, uint64_t *value)
54 ret = drmIoctl(qxl->drm_fd, DRM_IOCTL_QXL_GETPARAM, &args);
65 qxl_screen_t *qxl = pScrn->driverPrivate;
66 struct pci_device *dev = qxl->pci;
72 if (qxl->platform_dev) {
73 qxl->drm_fd = xf86_get_platform_device_int_attrib(qxl->platform_dev,
75 if (qxl->drm_fd != -1) {
76 qxl->drmmode.fd = qxl->drm_fd;
90 qxl->drm_fd = drmOpen("qxl", busid);
91 if (qxl->drm_fd == -1) {
109 err = drmSetInterfaceVersion(qxl->drm_fd, &sv);
113 drmClose(qxl->drm_fd);
114 qxl->drm_fd = -1;
119 qxl->drmmode.fd = qxl->drm_fd;
127 qxl_screen_t *qxl = pScrn->driverPrivate;
130 qxl_drmmode_uevent_fini(pScrn, &qxl->drmmode);
131 pScreen->CloseScreen = qxl->close_screen;
142 qxl_screen_t *qxl = NULL;
157 qxl = pScrn->driverPrivate;
158 qxl->device_primary = QXL_DEVICE_PRIMARY_UNDEFINED;
159 qxl->pScrn = pScrn;
160 qxl->x_modes = NULL;
161 qxl->entity = xf86GetEntityInfo (pScrn->entityList[0]);
162 qxl->kms_enabled = TRUE;
163 xorg_list_init(&qxl->ums_bos);
165 qxl_kms_setup_funcs(qxl);
166 qxl->pci = xf86GetPciInfoForEntity (qxl->entity->index);
186 if (drmmode_pre_init(pScrn, &qxl->drmmode, pScrn->bitsPerPixel / 8) == FALSE)
189 qxl->virtual_x = pScrn->virtualX;
190 qxl->virtual_y = pScrn->virtualY;
192 pScrn->display->virtualX = qxl->virtual_x;
193 pScrn->display->virtualY = qxl->virtual_y;
203 if (qxl)
204 free(qxl);
212 qxl_screen_t * qxl = pScrn->driverPrivate;
217 pScreen->CreateScreenResources = qxl->create_screen_resources;
229 qxl->bo_funcs->destroy_surface(surf);
231 set_surface (pPixmap, qxl->primary);
233 qxl_drmmode_uevent_init(pScrn, &qxl->drmmode);
238 qxl->screen_resources_created = TRUE;
252 qxl_screen_t *qxl = pScrn->driverPrivate;
256 if (!(qxl->platform_dev &&
257 (qxl->platform_dev->flags & XF86_PDEV_SERVER_FD)))
260 ret = drmSetMaster(qxl->drm_fd);
280 qxl_screen_t *qxl = pScrn->driverPrivate;
285 if (qxl->platform_dev && (qxl->platform_dev->flags & XF86_PDEV_SERVER_FD))
289 ret = drmDropMaster(qxl->drm_fd);
301 qxl_screen_t * qxl = pScrn->driverPrivate;
312 if (!qxl_fb_init (qxl, pScreen))
329 qxl->uxa = uxa_driver_alloc ();
334 if (!qxl_kms_getparam(qxl, QXL_PARAM_NUM_SURFACES, &n_surf))
336 qxl->surface_cache = qxl_surface_cache_create (qxl, n_surf);
340 qxl_uxa_init (qxl, pScreen);
359 if (!qxl_resize_primary_to_virtual (qxl))
362 qxl->create_screen_resources = pScreen->CreateScreenResources;
365 qxl->close_screen = pScreen->CloseScreen;
386 qxl_screen_t *qxl;
390 static struct qxl_bo *qxl_bo_alloc(qxl_screen_t *qxl,
404 ret = drmIoctl(qxl->drm_fd, DRM_IOCTL_QXL_ALLOC, &alloc);
406 xf86DrvMsg(qxl->pScrn->scrnIndex, X_ERROR,
416 bo->qxl = qxl;
421 static struct qxl_bo *qxl_cmd_alloc(qxl_screen_t *qxl,
438 bo->qxl = qxl;
448 qxl_screen_t *qxl;
453 qxl = bo->qxl;
461 if (drmIoctl(qxl->drm_fd, DRM_IOCTL_QXL_MAP, &qxl_map)) {
462 xf86DrvMsg(qxl->pScrn->scrnIndex, X_ERROR,
467 map = mmap(0, bo->size, PROT_READ | PROT_WRITE, MAP_SHARED, qxl->drm_fd,
470 xf86DrvMsg(qxl->pScrn->scrnIndex, X_ERROR,
483 static void qxl_bo_incref(qxl_screen_t *qxl, struct qxl_bo *_bo)
489 static void qxl_bo_decref(qxl_screen_t *qxl, struct qxl_bo *_bo)
507 ret = drmIoctl(qxl->drm_fd, DRM_IOCTL_GEM_CLOSE, &args);
509 xf86DrvMsg(qxl->pScrn->scrnIndex, X_ERROR,
516 static void qxl_bo_output_bo_reloc(qxl_screen_t *qxl, uint32_t dst_offset,
522 struct drm_qxl_reloc *r = &qxl->cmds.relocs[qxl->cmds.n_relocs];
524 if (qxl->cmds.n_reloc_bos >= MAX_RELOCS || qxl->cmds.n_relocs >= MAX_RELOCS)
527 qxl->cmds.reloc_bo[qxl->cmds.n_reloc_bos] = _src_bo;
528 qxl->cmds.n_reloc_bos++;
537 qxl->cmds.n_relocs++;
540 static void qxl_bo_write_command(qxl_screen_t *qxl, uint32_t cmd_type, struct qxl_bo *_bo)
551 if (qxl->cmds.n_relocs) {
552 c.relocs_num = qxl->cmds.n_relocs;
553 c.relocs = pointer_to_u64(qxl->cmds.relocs);
561 ret = drmIoctl(qxl->drm_fd, DRM_IOCTL_QXL_EXECBUFFER, &eb);
563 xf86DrvMsg(qxl->pScrn->scrnIndex, X_ERROR,
566 qxl->cmds.n_relocs = 0;
567 qxl->bo_funcs->bo_decref(qxl, _bo);
569 for (i = 0; i < qxl->cmds.n_reloc_bos; i++)
570 qxl->bo_funcs->bo_decref(qxl, qxl->cmds.reloc_bo[i]);
571 qxl->cmds.n_reloc_bos = 0;
586 ret = drmIoctl(surf->qxl->drm_fd,
593 static struct qxl_bo *qxl_bo_create_primary(qxl_screen_t *qxl, uint32_t width, uint32_t height, int32_t stride, uint32_t format)
608 ret = drmIoctl(qxl->drm_fd,
617 bo->qxl = qxl;
620 qxl->primary_bo = (struct qxl_bo *)bo;
621 qxl->device_primary = QXL_DEVICE_PRIMARY_CREATED;
625 static void qxl_bo_destroy_primary(qxl_screen_t *qxl, struct qxl_bo *bo)
627 qxl_bo_decref(qxl, bo);
629 qxl->primary_bo = NULL;
630 qxl->device_primary = QXL_DEVICE_PRIMARY_NONE;
634 qxl_kms_surface_create(qxl_screen_t *qxl,
649 if (!qxl->enable_surfaces)
683 ret = drmIoctl(qxl->drm_fd,
692 bo->qxl = qxl;
698 surface->qxl = qxl;
701 dev_ptr = qxl->bo_funcs->bo_map(surface->bo);
710 qxl->bo_funcs->bo_unmap(surface->bo);
719 qxl_screen_t *qxl = surf->qxl;
727 qxl->bo_funcs->bo_decref(qxl, surf->image_bo);
728 qxl->bo_funcs->bo_decref(qxl, surf->bo);
732 static void qxl_bo_output_surf_reloc(qxl_screen_t *qxl, uint32_t dst_offset,
736 struct drm_qxl_reloc *r = &qxl->cmds.relocs[qxl->cmds.n_relocs];
738 if (qxl->cmds.n_reloc_bos >= MAX_RELOCS || qxl->cmds.n_relocs >= MAX_RELOCS)
741 qxl->cmds.reloc_bo[qxl->cmds.n_reloc_bos] = surf->bo;
742 qxl->cmds.n_reloc_bos++;
751 qxl->cmds.n_relocs++;
771 void qxl_kms_setup_funcs(qxl_screen_t *qxl)
773 qxl->bo_funcs = &qxl_kms_bo_funcs;