Skip to content

Commit

Permalink
drm/qxl: remove dead qxl fbdev emulation code
Browse files Browse the repository at this point in the history
Lovely diffstat, thanks to the new generic fbdev emulation.

 drm/qxl/Makefile   |    2
 drm/qxl/qxl_draw.c |  232 ----------------------------------------
 drm/qxl/qxl_drv.h  |   21 ---
 drm/qxl/qxl_fb.c   |  300 -----------------------------------------------------

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Acked-by: Noralf Trønnes <noralf@tronnes.org>
Link: http://patchwork.freedesktop.org/patch/msgid/20190118122020.27596-19-kraxel@redhat.com
  • Loading branch information
Gerd Hoffmann committed Jan 28, 2019
1 parent 26d4707 commit 13aff18
Show file tree
Hide file tree
Showing 4 changed files with 1 addition and 554 deletions.
2 changes: 1 addition & 1 deletion drivers/gpu/drm/qxl/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
# Makefile for the drm device driver. This driver provides support for the
# Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher.

qxl-y := qxl_drv.o qxl_kms.o qxl_display.o qxl_ttm.o qxl_fb.o qxl_object.o qxl_gem.o qxl_cmd.o qxl_image.o qxl_draw.o qxl_debugfs.o qxl_irq.o qxl_dumb.o qxl_ioctl.o qxl_release.o qxl_prime.o
qxl-y := qxl_drv.o qxl_kms.o qxl_display.o qxl_ttm.o qxl_object.o qxl_gem.o qxl_cmd.o qxl_image.o qxl_draw.o qxl_debugfs.o qxl_irq.o qxl_dumb.o qxl_ioctl.o qxl_release.o qxl_prime.o

obj-$(CONFIG_DRM_QXL)+= qxl.o
232 changes: 0 additions & 232 deletions drivers/gpu/drm/qxl/qxl_draw.c
Original file line number Diff line number Diff line change
Expand Up @@ -109,152 +109,6 @@ make_drawable(struct qxl_device *qdev, int surface, uint8_t type,
return 0;
}

static int alloc_palette_object(struct qxl_device *qdev,
struct qxl_release *release,
struct qxl_bo **palette_bo)
{
return qxl_alloc_bo_reserved(qdev, release,
sizeof(struct qxl_palette) + sizeof(uint32_t) * 2,
palette_bo);
}

static int qxl_palette_create_1bit(struct qxl_bo *palette_bo,
struct qxl_release *release,
const struct qxl_fb_image *qxl_fb_image)
{
const struct fb_image *fb_image = &qxl_fb_image->fb_image;
uint32_t visual = qxl_fb_image->visual;
const uint32_t *pseudo_palette = qxl_fb_image->pseudo_palette;
struct qxl_palette *pal;
int ret;
uint32_t fgcolor, bgcolor;
static uint64_t unique; /* we make no attempt to actually set this
* correctly globaly, since that would require
* tracking all of our palettes. */
ret = qxl_bo_kmap(palette_bo, (void **)&pal);
if (ret)
return ret;
pal->num_ents = 2;
pal->unique = unique++;
if (visual == FB_VISUAL_TRUECOLOR || visual == FB_VISUAL_DIRECTCOLOR) {
/* NB: this is the only used branch currently. */
fgcolor = pseudo_palette[fb_image->fg_color];
bgcolor = pseudo_palette[fb_image->bg_color];
} else {
fgcolor = fb_image->fg_color;
bgcolor = fb_image->bg_color;
}
pal->ents[0] = bgcolor;
pal->ents[1] = fgcolor;
qxl_bo_kunmap(palette_bo);
return 0;
}

void qxl_draw_opaque_fb(const struct qxl_fb_image *qxl_fb_image,
int stride /* filled in if 0 */)
{
struct qxl_device *qdev = qxl_fb_image->qdev;
struct qxl_drawable *drawable;
struct qxl_rect rect;
const struct fb_image *fb_image = &qxl_fb_image->fb_image;
int x = fb_image->dx;
int y = fb_image->dy;
int width = fb_image->width;
int height = fb_image->height;
const char *src = fb_image->data;
int depth = fb_image->depth;
struct qxl_release *release;
struct qxl_image *image;
int ret;
struct qxl_drm_image *dimage;
struct qxl_bo *palette_bo = NULL;

if (stride == 0)
stride = depth * width / 8;

ret = alloc_drawable(qdev, &release);
if (ret)
return;

ret = qxl_image_alloc_objects(qdev, release,
&dimage,
height, stride);
if (ret)
goto out_free_drawable;

if (depth == 1) {
ret = alloc_palette_object(qdev, release, &palette_bo);
if (ret)
goto out_free_image;
}

/* do a reservation run over all the objects we just allocated */
ret = qxl_release_reserve_list(release, true);
if (ret)
goto out_free_palette;

rect.left = x;
rect.right = x + width;
rect.top = y;
rect.bottom = y + height;

ret = make_drawable(qdev, 0, QXL_DRAW_COPY, &rect, release);
if (ret) {
qxl_release_backoff_reserve_list(release);
goto out_free_palette;
}

ret = qxl_image_init(qdev, release, dimage,
(const uint8_t *)src, 0, 0,
width, height, depth, stride);
if (ret) {
qxl_release_backoff_reserve_list(release);
qxl_release_free(qdev, release);
return;
}

if (depth == 1) {
void *ptr;

ret = qxl_palette_create_1bit(palette_bo, release, qxl_fb_image);

ptr = qxl_bo_kmap_atomic_page(qdev, dimage->bo, 0);
image = ptr;
image->u.bitmap.palette =
qxl_bo_physical_address(qdev, palette_bo, 0);
qxl_bo_kunmap_atomic_page(qdev, dimage->bo, ptr);
}

drawable = (struct qxl_drawable *)qxl_release_map(qdev, release);

drawable->u.copy.src_area.top = 0;
drawable->u.copy.src_area.bottom = height;
drawable->u.copy.src_area.left = 0;
drawable->u.copy.src_area.right = width;

drawable->u.copy.rop_descriptor = SPICE_ROPD_OP_PUT;
drawable->u.copy.scale_mode = 0;
drawable->u.copy.mask.flags = 0;
drawable->u.copy.mask.pos.x = 0;
drawable->u.copy.mask.pos.y = 0;
drawable->u.copy.mask.bitmap = 0;

drawable->u.copy.src_bitmap =
qxl_bo_physical_address(qdev, dimage->bo, 0);
qxl_release_unmap(qdev, release, &drawable->release_info);

qxl_push_command_ring_release(qdev, release, QXL_CMD_DRAW, false);
qxl_release_fence_buffer_objects(release);

out_free_palette:
qxl_bo_unref(&palette_bo);
out_free_image:
qxl_image_free_objects(qdev, dimage);
out_free_drawable:
if (ret)
free_drawable(qdev, release);
}

/* push a draw command using the given clipping rectangles as
* the sources from the shadow framebuffer.
*
Expand Down Expand Up @@ -402,89 +256,3 @@ void qxl_draw_dirty_fb(struct qxl_device *qdev,
free_drawable(qdev, release);

}

void qxl_draw_copyarea(struct qxl_device *qdev,
u32 width, u32 height,
u32 sx, u32 sy,
u32 dx, u32 dy)
{
struct qxl_drawable *drawable;
struct qxl_rect rect;
struct qxl_release *release;
int ret;

ret = alloc_drawable(qdev, &release);
if (ret)
return;

/* do a reservation run over all the objects we just allocated */
ret = qxl_release_reserve_list(release, true);
if (ret)
goto out_free_release;

rect.left = dx;
rect.top = dy;
rect.right = dx + width;
rect.bottom = dy + height;
ret = make_drawable(qdev, 0, QXL_COPY_BITS, &rect, release);
if (ret) {
qxl_release_backoff_reserve_list(release);
goto out_free_release;
}

drawable = (struct qxl_drawable *)qxl_release_map(qdev, release);
drawable->u.copy_bits.src_pos.x = sx;
drawable->u.copy_bits.src_pos.y = sy;
qxl_release_unmap(qdev, release, &drawable->release_info);

qxl_push_command_ring_release(qdev, release, QXL_CMD_DRAW, false);
qxl_release_fence_buffer_objects(release);

out_free_release:
if (ret)
free_drawable(qdev, release);
}

void qxl_draw_fill(struct qxl_draw_fill *qxl_draw_fill_rec)
{
struct qxl_device *qdev = qxl_draw_fill_rec->qdev;
struct qxl_rect rect = qxl_draw_fill_rec->rect;
uint32_t color = qxl_draw_fill_rec->color;
uint16_t rop = qxl_draw_fill_rec->rop;
struct qxl_drawable *drawable;
struct qxl_release *release;
int ret;

ret = alloc_drawable(qdev, &release);
if (ret)
return;

/* do a reservation run over all the objects we just allocated */
ret = qxl_release_reserve_list(release, true);
if (ret)
goto out_free_release;

ret = make_drawable(qdev, 0, QXL_DRAW_FILL, &rect, release);
if (ret) {
qxl_release_backoff_reserve_list(release);
goto out_free_release;
}

drawable = (struct qxl_drawable *)qxl_release_map(qdev, release);
drawable->u.fill.brush.type = SPICE_BRUSH_TYPE_SOLID;
drawable->u.fill.brush.u.color = color;
drawable->u.fill.rop_descriptor = rop;
drawable->u.fill.mask.flags = 0;
drawable->u.fill.mask.pos.x = 0;
drawable->u.fill.mask.pos.y = 0;
drawable->u.fill.mask.bitmap = 0;

qxl_release_unmap(qdev, release, &drawable->release_info);

qxl_push_command_ring_release(qdev, release, QXL_CMD_DRAW, false);
qxl_release_fence_buffer_objects(release);

out_free_release:
if (ret)
free_drawable(qdev, release);
}
21 changes: 0 additions & 21 deletions drivers/gpu/drm/qxl/qxl_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -220,8 +220,6 @@ struct qxl_device {
struct qxl_mman mman;
struct qxl_gem gem;

struct drm_fb_helper fb_helper;

void *ram_physical;

struct qxl_ring *release_ring;
Expand Down Expand Up @@ -322,12 +320,6 @@ qxl_bo_physical_address(struct qxl_device *qdev, struct qxl_bo *bo,
return slot->high_bits | (bo->tbo.offset - slot->gpu_offset + offset);
}

/* qxl_fb.c */
#define QXLFB_CONN_LIMIT 1

int qxl_fbdev_init(struct qxl_device *qdev);
void qxl_fbdev_fini(struct qxl_device *qdev);

/* qxl_display.c */
void qxl_display_read_client_monitors_config(struct qxl_device *qdev);
int qxl_create_monitors_object(struct qxl_device *qdev);
Expand Down Expand Up @@ -432,9 +424,6 @@ int qxl_alloc_bo_reserved(struct qxl_device *qdev,
struct qxl_bo **_bo);
/* qxl drawing commands */

void qxl_draw_opaque_fb(const struct qxl_fb_image *qxl_fb_image,
int stride /* filled in if 0 */);

void qxl_draw_dirty_fb(struct qxl_device *qdev,
struct drm_framebuffer *fb,
struct qxl_bo *bo,
Expand All @@ -443,13 +432,6 @@ void qxl_draw_dirty_fb(struct qxl_device *qdev,
unsigned int num_clips, int inc,
uint32_t dumb_shadow_offset);

void qxl_draw_fill(struct qxl_draw_fill *qxl_draw_fill_rec);

void qxl_draw_copyarea(struct qxl_device *qdev,
u32 width, u32 height,
u32 sx, u32 sy,
u32 dx, u32 dy);

void qxl_release_free(struct qxl_device *qdev,
struct qxl_release *release);

Expand Down Expand Up @@ -481,9 +463,6 @@ int qxl_gem_prime_mmap(struct drm_gem_object *obj,
int qxl_irq_init(struct qxl_device *qdev);
irqreturn_t qxl_irq_handler(int irq, void *arg);

/* qxl_fb.c */
bool qxl_fbdev_qobj_is_fb(struct qxl_device *qdev, struct qxl_bo *qobj);

int qxl_debugfs_add_files(struct qxl_device *qdev,
struct drm_info_list *files,
unsigned int nfiles);
Expand Down
Loading

0 comments on commit 13aff18

Please sign in to comment.