From 6bf3072194c3353d37c0a7575dbcac77c797598c Mon Sep 17 00:00:00 2001 From: Marcin Chrzanowski Date: Wed, 23 May 2018 17:56:46 +0200 Subject: Impelement copy rects --- harddoomdev.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'harddoomdev.c') diff --git a/harddoomdev.c b/harddoomdev.c index 9b327c0..38c32dd 100644 --- a/harddoomdev.c +++ b/harddoomdev.c @@ -43,6 +43,11 @@ void ping_sync(void __iomem *iomem) send_command(iomem, HARDDOOM_CMD_PING_SYNC); } +void set_surf_src_pt(void __iomem *iomem, dma_addr_t page_table) +{ + send_command(iomem, HARDDOOM_CMD_SURF_SRC_PT(page_table)); +} + void set_surf_dst_pt(void __iomem *iomem, dma_addr_t page_table) { send_command(iomem, HARDDOOM_CMD_SURF_DST_PT(page_table)); @@ -97,6 +102,22 @@ void draw_line(struct surface_data *surface_data, struct doomdev_line line) send_command(iomem, HARDDOOM_CMD_DRAW_LINE); } +void copy_rect(struct surface_data *dst_data, struct surface_data *src_data, + struct doomdev_copy_rect rect) +{ + void __iomem *iomem; + + iomem = dst_data->doom_data->iomem; + + set_surf_dst_pt(iomem, dst_data->page_table_dev); + set_surf_src_pt(iomem, src_data->page_table_dev); + set_surf_dims(iomem, dst_data->width, dst_data->height); + set_xy_a(iomem, rect.pos_dst_x, rect.pos_dst_y); + set_xy_b(iomem, rect.pos_src_x, rect.pos_src_y); + + send_command(iomem, HARDDOOM_CMD_COPY_RECT(rect.width, rect.height)); +} + uint32_t doomdev_read_stat(void __iomem *iomem, size_t stat) { return doomdev_read(iomem, HARDDOOM_STATS(stat)); -- cgit v1.2.3