xref: /openbmc/qemu/hw/display/framebuffer.h (revision 709395f8)
1 #ifndef QEMU_FRAMEBUFFER_H
2 #define QEMU_FRAMEBUFFER_H
3 
4 #include "exec/memory.h"
5 
6 /* Framebuffer device helper routines.  */
7 
8 typedef void (*drawfn)(void *, uint8_t *, const uint8_t *, int, int);
9 
10 /* framebuffer_update_memory_section: Update framebuffer
11  * #MemoryRegionSection, for example if the framebuffer is switched to
12  * a different memory area.
13  *
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.
20  */
21 void framebuffer_update_memory_section(
22     MemoryRegionSection *mem_section,
23     MemoryRegion *root,
24     hwaddr base,
25     unsigned rows,
26     unsigned src_width);
27 
28 /* framebuffer_update_display: Draw the framebuffer on a surface.
29  *
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).
50  */
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);
64 
65 #endif
66