blob: a10198d3d58cee0189adb0b6eaf203237db4b1f7 [file] [log] [blame]
Kevin O'Connore1e000b2011-12-31 03:30:40 -05001#ifndef __VGABIOS_H
2#define __VGABIOS_H
Kevin O'Connor1f2c3072009-05-06 23:35:59 -04003
4#include "types.h" // u8
Kevin O'Connor9f985422009-09-09 11:34:39 -04005#include "farptr.h" // struct segoff_s
Kevin O'Connor1f2c3072009-05-06 23:35:59 -04006
Kevin O'Connoraad3b692012-01-14 23:15:40 -05007// standard BIOS Video Parameter Table
8struct 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
20extern struct VideoParam_s video_param_table[29];
21
Kevin O'Connorca668642009-05-21 23:06:08 -040022struct 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 */
Kevin O'Connor9f985422009-09-09 11:34:39 -040037 struct segoff_s font0;
38 struct segoff_s font1;
Kevin O'Connorca668642009-05-21 23:06:08 -040039};
40
Kevin O'Connor821d6b42011-12-31 18:19:22 -050041// 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
Kevin O'Connord4398ad2012-01-01 12:32:53 -050048// 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
Kevin O'Connor10dff3d2012-01-09 19:19:44 -050058struct 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
Kevin O'Connor1f2c3072009-05-06 23:35:59 -040068// vgafonts.c
69extern u8 vgafont8[];
70extern u8 vgafont14[];
71extern u8 vgafont16[];
72extern u8 vgafont14alt[];
73extern u8 vgafont16alt[];
74
Kevin O'Connore1e000b2011-12-31 03:30:40 -050075// vgabios.c
Kevin O'Connor161d2012011-12-31 19:42:21 -050076extern u16 VgaBDF;
Kevin O'Connorf3760372011-12-23 22:41:08 -050077#define SET_VGA(var, val) SET_FARVAR(get_global_seg(), (var), (val))
Kevin O'Connor09262412009-05-25 11:44:11 -040078struct carattr {
Kevin O'Connor0ad77f02009-05-31 20:46:43 -040079 u8 car, attr, use_attr;
Kevin O'Connor09262412009-05-25 11:44:11 -040080};
Kevin O'Connor918b1562009-05-25 11:05:18 -040081struct cursorpos {
82 u8 x, y, page;
83};
Kevin O'Connor83047be2012-01-07 18:27:19 -050084u16 calc_page_size(u8 memmodel, u16 width, u16 height);
Kevin O'Connor821d6b42011-12-31 18:19:22 -050085void modeswitch_set_bda(int mode, int flags, struct vgamode_s *vmode_g);
Kevin O'Connorc0c7df62009-05-17 18:11:33 -040086
87// vgafb.c
Kevin O'Connor217f2bc2009-05-31 00:46:47 -040088void vgafb_scroll(int nblines, int attr
89 , struct cursorpos ul, struct cursorpos lr);
Kevin O'Connord3b38152009-05-26 00:05:37 -040090void vgafb_write_char(struct cursorpos cp, struct carattr ca);
91struct carattr vgafb_read_char(struct cursorpos cp);
Kevin O'Connor227a2bb2009-05-31 22:00:20 -040092void vgafb_write_pixel(u8 color, u16 x, u16 y);
93u8 vgafb_read_pixel(u16 x, u16 y);
Kevin O'Connorc0c7df62009-05-17 18:11:33 -040094
Julian Pidancet87879e22011-12-19 05:08:00 +000095// vbe.c
Kevin O'Connor3339c052012-01-13 20:00:35 -050096int VBE_enabled;
97u32 VBE_total_memory;
98u32 VBE_capabilities;
99u32 VBE_framebuffer;
Kevin O'Connor643290f2012-01-13 22:08:52 -0500100u16 VBE_win_granularity;
Julian Pidancet87879e22011-12-19 05:08:00 +0000101#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"
Kevin O'Connor40401952011-12-31 03:43:12 -0500105struct bregs;
106void handle_104f(struct bregs *regs);
107
Kevin O'Connore1e000b2011-12-31 03:30:40 -0500108#endif // vgabios.h