vgabios: Add support for vbe get/set line length 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 #define MF_VBEFLAGS   0xfe00
48
49 // Memory model types
50 #define MM_TEXT            0x00
51 #define MM_CGA             0x01
52 #define MM_HERCULES        0x02
53 #define MM_PLANAR          0x03
54 #define MM_PACKED          0x04
55 #define MM_NON_CHAIN_4_256 0x05
56 #define MM_DIRECT          0x06
57 #define MM_YUV             0x07
58
59 struct vgamode_s {
60     u8 memmodel;
61     u16 width;
62     u16 height;
63     u8 depth;
64     u8 cwidth;
65     u8 cheight;
66     u16 sstart;
67 };
68
69 // vgafonts.c
70 extern u8 vgafont8[];
71 extern u8 vgafont14[];
72 extern u8 vgafont16[];
73 extern u8 vgafont14alt[];
74 extern u8 vgafont16alt[];
75
76 // vgabios.c
77 extern int VgaBDF;
78 #define SET_VGA(var, val) SET_FARVAR(get_global_seg(), (var), (val))
79 struct carattr {
80     u8 car, attr, use_attr;
81 };
82 struct cursorpos {
83     u8 x, y, page;
84 };
85 int vga_bpp(struct vgamode_s *vmode_g);
86 u16 calc_page_size(u8 memmodel, u16 width, u16 height);
87 struct vgamode_s *get_current_mode(void);
88 int vga_set_mode(int mode, int flags);
89
90 // vgafb.c
91 void vgafb_scroll(int nblines, int attr
92                   , struct cursorpos ul, struct cursorpos lr);
93 void vgafb_write_char(struct cursorpos cp, struct carattr ca);
94 struct carattr vgafb_read_char(struct cursorpos cp);
95 void vgafb_write_pixel(u8 color, u16 x, u16 y);
96 u8 vgafb_read_pixel(u16 x, u16 y);
97
98 // vbe.c
99 u32 VBE_total_memory;
100 u32 VBE_capabilities;
101 u32 VBE_framebuffer;
102 u16 VBE_win_granularity;
103 #define VBE_OEM_STRING "SeaBIOS VBE(C) 2011"
104 #define VBE_VENDOR_STRING "SeaBIOS Developers"
105 #define VBE_PRODUCT_STRING "SeaBIOS VBE Adapter"
106 #define VBE_REVISION_STRING "Rev. 1"
107 struct bregs;
108 void handle_104f(struct bregs *regs);
109
110 #endif // vgabios.h