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