Merge tag 'pull-target-arm-20240325-1' of https://git.linaro.org/people/pmaydell...
[qemu/armbru.git] / hw / display / framebuffer.h
blob38fa0dcec612f8bd4ef4bb984f485ba8350c7349
1 #ifndef QEMU_FRAMEBUFFER_H
2 #define QEMU_FRAMEBUFFER_H
4 #include "exec/memory.h"
6 /* Framebuffer device helper routines. */
8 typedef void (*drawfn)(void *, uint8_t *, const uint8_t *, int, int);
10 /* framebuffer_update_memory_section: Update framebuffer
11 * #MemoryRegionSection, for example if the framebuffer is switched to
12 * a different memory area.
14 * @mem_section: Output #MemoryRegionSection, to be passed to
15 * framebuffer_update_display().
16 * @root: #MemoryRegion within which the framebuffer lies
17 * @base: Base address of the framebuffer within @root.
18 * @rows: Height of the screen.
19 * @src_width: Number of bytes in framebuffer memory between two rows.
21 void framebuffer_update_memory_section(
22 MemoryRegionSection *mem_section,
23 MemoryRegion *root,
24 hwaddr base,
25 unsigned rows,
26 unsigned src_width);
28 /* framebuffer_update_display: Draw the framebuffer on a surface.
30 * @ds: #DisplaySurface to draw to.
31 * @mem_section: #MemoryRegionSection provided by
32 * framebuffer_update_memory_section().
33 * @cols: Width the screen.
34 * @rows: Height of the screen.
35 * @src_width: Number of bytes in framebuffer memory between two rows.
36 * @dest_row_pitch: Number of bytes in the surface data between two rows.
37 * Negative if the framebuffer is stored in the opposite order (e.g.
38 * bottom-to-top) compared to the framebuffer.
39 * @dest_col_pitch: Number of bytes in the surface data between two pixels.
40 * Negative if the framebuffer is stored in the opposite order (e.g.
41 * right-to-left) compared to the framebuffer.
42 * @invalidate: True if the function should redraw the whole screen
43 * without checking the DIRTY_MEMORY_VGA dirty bitmap.
44 * @fn: Drawing function to be called for each row that has to be drawn.
45 * @opaque: Opaque pointer passed to @fn.
46 * @first_row: Pointer to an integer, receives the number of the first row
47 * that was drawn (either the first dirty row, or 0 if @invalidate is true).
48 * @last_row: Pointer to an integer, receives the number of the last row that
49 * was drawn (either the last dirty row, or @rows-1 if @invalidate is true).
51 void framebuffer_update_display(
52 DisplaySurface *ds,
53 MemoryRegionSection *mem_section,
54 int cols,
55 int rows,
56 int src_width,
57 int dest_row_pitch,
58 int dest_col_pitch,
59 int invalidate,
60 drawfn fn,
61 void *opaque,
62 int *first_row,
63 int *last_row);
65 #endif