Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / seabios / vgasrc / vgabios.h
1 #ifndef __VGABIOS_H
2 #define __VGABIOS_H
3
4 #include "config.h" // CONFIG_VGA_EMULATE_TEXT
5 #include "types.h" // u8
6 #include "farptr.h" // struct segoff_s
7 #include "std/vga.h" // struct video_param_s
8
9 // Save/Restore flags
10 #define SR_HARDWARE   0x0001
11 #define SR_BDA        0x0002
12 #define SR_DAC        0x0004
13 #define SR_REGISTERS  0x0008
14 #define SR_SAVE       0x0100
15 #define SR_RESTORE    0x0200
16
17 // Mode flags
18 #define MF_LEGACY     0x0001
19 #define MF_GRAYSUM    0x0002
20 #define MF_NOPALETTE  0x0008
21 #define MF_CUSTOMCRTC 0x0800
22 #define MF_LINEARFB   0x4000
23 #define MF_NOCLEARMEM 0x8000
24 #define MF_VBEFLAGS   0xfe00
25
26 // Memory model types
27 #define MM_TEXT            0x00
28 #define MM_CGA             0x01
29 #define MM_HERCULES        0x02
30 #define MM_PLANAR          0x03
31 #define MM_PACKED          0x04
32 #define MM_NON_CHAIN_4_256 0x05
33 #define MM_DIRECT          0x06
34 #define MM_YUV             0x07
35
36 struct vgamode_s {
37     u8 memmodel;
38     u16 width;
39     u16 height;
40     u8 depth;
41     u8 cwidth;
42     u8 cheight;
43     u16 sstart;
44 };
45
46 // Graphics pixel operations.
47 struct gfx_op {
48     struct vgamode_s *vmode_g;
49     u32 linelength;
50     u32 displaystart;
51
52     u8 op;
53     u16 x, y;
54
55     u8 pixels[8];
56     u16 xlen, ylen;
57     u16 srcy;
58 };
59
60 #define GO_READ8   1
61 #define GO_WRITE8  2
62 #define GO_MEMSET  3
63 #define GO_MEMMOVE 4
64
65 // Custom internal storage in BDA
66 #define VGA_CUSTOM_BDA 0xb9
67
68 struct vga_bda_s {
69     u8 flags;
70     u16 vbe_mode;
71     u16 vgamode_offset;
72 } PACKED;
73
74 #define BF_PM_MASK      0x0f
75 #define BF_EMULATE_TEXT 0x10
76 #define BF_SWCURSOR     0x20
77
78 #define GET_BDA_EXT(var) \
79     GET_FARVAR(SEG_BDA, ((struct vga_bda_s *)VGA_CUSTOM_BDA)->var)
80 #define SET_BDA_EXT(var, val) \
81     SET_FARVAR(SEG_BDA, ((struct vga_bda_s *)VGA_CUSTOM_BDA)->var, (val))
82 #define MASK_BDA_EXT(var, off, on)                                      \
83     SET_BDA_EXT(var, (GET_BDA_EXT(var) & ~(off)) | (on))
84
85 static inline int vga_emulate_text(void) {
86     return CONFIG_VGA_EMULATE_TEXT && GET_BDA_EXT(flags) & BF_EMULATE_TEXT;
87 }
88
89 // Debug settings
90 #define DEBUG_VGA_POST 1
91 #define DEBUG_VGA_10 3
92
93 // vgafonts.c
94 extern u8 vgafont8[];
95 extern u8 vgafont14[];
96 extern u8 vgafont16[];
97 extern u8 vgafont14alt[];
98 extern u8 vgafont16alt[];
99
100 // vgainit.c
101 extern struct video_save_pointer_s video_save_pointer_table;
102 extern struct video_param_s video_param_table[29];
103
104 // vgabios.c
105 extern int VgaBDF;
106 extern int HaveRunInit;
107 #define SET_VGA(var, val) SET_FARVAR(get_global_seg(), (var), (val))
108 struct carattr {
109     u8 car, attr, use_attr, pad;
110 };
111 struct cursorpos {
112     u8 x, y, page, pad;
113 };
114 int vga_bpp(struct vgamode_s *vmode_g);
115 u16 calc_page_size(u8 memmodel, u16 width, u16 height);
116 u16 get_cursor_shape(void);
117 struct cursorpos get_cursor_pos(u8 page);
118 int bda_save_restore(int cmd, u16 seg, void *data);
119 struct vgamode_s *get_current_mode(void);
120 int vga_set_mode(int mode, int flags);
121 extern struct video_func_static static_functionality;
122
123 // vgafb.c
124 void init_gfx_op(struct gfx_op *op, struct vgamode_s *vmode_g);
125 void handle_gfx_op(struct gfx_op *op);
126 void *text_address(struct cursorpos cp);
127 void vgafb_move_chars(struct cursorpos dest
128                       , struct cursorpos src, struct cursorpos movesize);
129 void vgafb_clear_chars(struct cursorpos dest
130                        , struct carattr ca, struct cursorpos movesize);
131 void vgafb_write_char(struct cursorpos cp, struct carattr ca);
132 struct carattr vgafb_read_char(struct cursorpos cp);
133 void vgafb_write_pixel(u8 color, u16 x, u16 y);
134 u8 vgafb_read_pixel(u16 x, u16 y);
135 void vgafb_set_swcursor(int enable);
136
137 // vbe.c
138 extern u32 VBE_total_memory;
139 extern u32 VBE_capabilities;
140 extern u32 VBE_framebuffer;
141 extern u16 VBE_win_granularity;
142 #define VBE_OEM_STRING "SeaBIOS VBE(C) 2011"
143 #define VBE_VENDOR_STRING "SeaBIOS Developers"
144 #define VBE_PRODUCT_STRING "SeaBIOS VBE Adapter"
145 #define VBE_REVISION_STRING "Rev. 1"
146 struct bregs;
147 void handle_104f(struct bregs *regs);
148
149 #endif // vgabios.h