xref: /kvmtool/include/kvm/framebuffer.h (revision 08e89f1ecd3c1c8210140d0e7307fd5dd97306ae)
1*08e89f1eSPekka Enberg #ifndef KVM__FRAMEBUFFER_H
2*08e89f1eSPekka Enberg #define KVM__FRAMEBUFFER_H
3*08e89f1eSPekka Enberg 
4*08e89f1eSPekka Enberg #include <linux/types.h>
5*08e89f1eSPekka Enberg #include <linux/list.h>
6*08e89f1eSPekka Enberg 
7*08e89f1eSPekka Enberg struct framebuffer;
8*08e89f1eSPekka Enberg 
9*08e89f1eSPekka Enberg struct fb_target_operations {
10*08e89f1eSPekka Enberg 	int (*start)(struct framebuffer *fb);
11*08e89f1eSPekka Enberg 	void (*write)(struct framebuffer *fb, u64 addr, u8 *data, u32 len);
12*08e89f1eSPekka Enberg };
13*08e89f1eSPekka Enberg 
14*08e89f1eSPekka Enberg #define FB_MAX_TARGETS			2
15*08e89f1eSPekka Enberg 
16*08e89f1eSPekka Enberg struct framebuffer {
17*08e89f1eSPekka Enberg 	struct list_head		node;
18*08e89f1eSPekka Enberg 
19*08e89f1eSPekka Enberg 	u32				width;
20*08e89f1eSPekka Enberg 	u32				height;
21*08e89f1eSPekka Enberg 	u8				depth;
22*08e89f1eSPekka Enberg 	char				*mem;
23*08e89f1eSPekka Enberg 	u64				mem_addr;
24*08e89f1eSPekka Enberg 
25*08e89f1eSPekka Enberg 	unsigned long			nr_targets;
26*08e89f1eSPekka Enberg 	struct fb_target_operations	*targets[FB_MAX_TARGETS];
27*08e89f1eSPekka Enberg };
28*08e89f1eSPekka Enberg 
29*08e89f1eSPekka Enberg struct framebuffer *fb__register(struct framebuffer *fb);
30*08e89f1eSPekka Enberg int fb__attach(struct framebuffer *fb, struct fb_target_operations *ops);
31*08e89f1eSPekka Enberg int fb__start(void);
32*08e89f1eSPekka Enberg void fb__stop(void);
33*08e89f1eSPekka Enberg void fb__write(u64 addr, u8 *data, u32 len);
34*08e89f1eSPekka Enberg 
35*08e89f1eSPekka Enberg #endif /* KVM__FRAMEBUFFER_H */
36