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);
}
Example #2
0
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;
}
Example #3
0
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);
}