vgabios: Extract out current mode finding into new function.
[seabios.git] / vgasrc / vgabios.h
1 #ifndef __VGABIOS_H
2 #define __VGABIOS_H
3
4 #include "types.h" // u8
5 #include "farptr.h" // struct segoff_s
6
7 // standard BIOS Video Parameter Table
8 struct VideoParam_s {
9     u8 twidth;
10     u8 theightm1;
11     u8 cheight;
12     u16 slength;
13     u8 sequ_regs[4];
14     u8 miscreg;
15     u8 crtc_regs[25];
16     u8 actl_regs[20];
17     u8 grdc_regs[9];
18 } PACKED;
19
20 extern struct VideoParam_s video_param_table[29];
21
22 struct saveBDAstate {
23     u8 video_mode;
24     u16 video_cols;
25     u16 video_pagesize;
26     u16 crtc_address;
27     u8 video_rows;
28     u16 char_height;
29     u8 video_ctl;
30     u8 video_switches;
31     u8 modeset_ctl;
32     u16 cursor_type;
33     u16 cursor_pos[8];
34     u16 video_pagestart;
35     u8 video_page;
36     /* current font */
37     struct segoff_s font0;
38     struct segoff_s font1;
39 };
40
41 // Mode flags
42 #define MF_GRAYSUM    0x0002
43 #define MF_NOPALETTE  0x0008
44 #define MF_CUSTOMCRTC 0x0800
45 #define MF_LINEARFB   0x4000
46 #define MF_NOCLEARMEM 0x8000
47
48 // Memory model types
49 #define MM_TEXT            0x00
50 #define MM_CGA             0x01
51 #define MM_HERCULES        0x02
52 #define MM_PLANAR          0x03
53 #define MM_PACKED          0x04
54 #define MM_NON_CHAIN_4_256 0x05
55 #define MM_DIRECT          0x06
56 #define MM_YUV             0x07
57
58 struct vgamode_s {
59     u8 memmodel;
60     u16 width;
61     u16 height;
62     u8 depth;
63     u8 cwidth;
64     u8 cheight;
65     u16 sstart;
66 };
67
68 // vgafonts.c
69 extern u8 vgafont8[];
70 extern u8 vgafont14[];
71 extern u8 vgafont16[];
72 extern u8 vgafont14alt[];
73 extern u8 vgafont16alt[];
74
75 // vgabios.c
76 extern int VgaBDF;
77 #define SET_VGA(var, val) SET_FARVAR(get_global_seg(), (var), (val))
78 struct carattr {
79     u8 car, attr, use_attr;
80 };
81 struct cursorpos {
82     u8 x, y, page;
83 };
84 u16 calc_page_size(u8 memmodel, u16 width, u16 height);
85 struct vgamode_s *get_current_mode(void);
86 void modeswitch_set_bda(int mode, int flags, struct vgamode_s *vmode_g);
87
88 // vgafb.c
89 void vgafb_scroll(int nblines, int attr
90                   , struct cursorpos ul, struct cursorpos lr);
91 void vgafb_write_char(struct cursorpos cp, struct carattr ca);
92 struct carattr vgafb_read_char(struct cursorpos cp);
93 void vgafb_write_pixel(u8 color, u16 x, u16 y);
94 u8 vgafb_read_pixel(u16 x, u16 y);
95
96 // vbe.c
97 u32 VBE_total_memory;
98 u32 VBE_capabilities;
99 u32 VBE_framebuffer;
100 u16 VBE_win_granularity;
101 #define VBE_OEM_STRING "SeaBIOS VBE(C) 2011"
102 #define VBE_VENDOR_STRING "SeaBIOS Developers"
103 #define VBE_PRODUCT_STRING "SeaBIOS VBE Adapter"
104 #define VBE_REVISION_STRING "Rev. 1"
105 struct bregs;
106 void handle_104f(struct bregs *regs);
107
108 #endif // vgabios.h