static void fb_free_buffer(struct private_module_t *module, struct private_buffer_t *buffer) { if (buffer->fb) { drmModeRmFB(module->fd, buffer->fb); buffer->fb = 0; } if (buffer->vaddr) { kms_bo_unmap(buffer->bo); buffer->vaddr = 0; } if (buffer->bo) kms_bo_destroy(&buffer->bo); }
static void gbm_kms_bo_destroy(struct gbm_bo *_bo) { struct gbm_kms_bo *bo = (struct gbm_kms_bo*)_bo; if (!bo) return; if (bo->addr) kms_bo_unmap(bo->bo); if (bo->bo) kms_bo_destroy(&bo->bo); free(bo); return; }
static void crtc_load_cursor_argb_kms(xf86CrtcPtr crtc, CARD32 * image) { modesettingPtr ms = modesettingPTR(crtc->scrn); struct crtc_private *crtcp = crtc->driver_private; unsigned char *ptr; if (!crtcp->cursor_bo) { unsigned attr[8]; attr[0] = KMS_BO_TYPE; #ifdef KMS_BO_TYPE_CURSOR_64X64_A8R8G8B8 attr[1] = KMS_BO_TYPE_CURSOR_64X64_A8R8G8B8; #else attr[1] = KMS_BO_TYPE_CURSOR; #endif attr[2] = KMS_WIDTH; attr[3] = 64; attr[4] = KMS_HEIGHT; attr[5] = 64; attr[6] = 0; if (kms_bo_create(ms->kms, attr, &crtcp->cursor_bo)) return; if (kms_bo_get_prop(crtcp->cursor_bo, KMS_HANDLE, &crtcp->cursor_handle)) goto err_bo_destroy; } kms_bo_map(crtcp->cursor_bo, (void**)&ptr); memcpy(ptr, image, 64*64*4); kms_bo_unmap(crtcp->cursor_bo); if (crtc->cursor_shown) drmModeSetCursor(ms->fd, crtcp->drm_crtc->crtc_id, crtcp->cursor_handle, 64, 64); return; err_bo_destroy: kms_bo_destroy(&crtcp->cursor_bo); }