blob: f58e4988e2bcf4dc11c0e3b672f4f3ad71e4ee2d [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 {
Kevin O'Connorda6a1572014-02-05 19:29:08 -050023 u8 bda_0x49[28];
24 u8 bda_0x84[6];
25 u16 vbe_mode;
Kevin O'Connor9f985422009-09-09 11:34:39 -040026 struct segoff_s font0;
27 struct segoff_s font1;
Kevin O'Connorca668642009-05-21 23:06:08 -040028};
29
Kevin O'Connor821d6b42011-12-31 18:19:22 -050030// Mode flags
Kevin O'Connorb7b92932013-03-09 13:04:47 -050031#define MF_LEGACY 0x0001
Kevin O'Connor821d6b42011-12-31 18:19:22 -050032#define MF_GRAYSUM 0x0002
33#define MF_NOPALETTE 0x0008
34#define MF_CUSTOMCRTC 0x0800
35#define MF_LINEARFB 0x4000
36#define MF_NOCLEARMEM 0x8000
Kevin O'Connore6bc4c12012-01-21 11:26:37 -050037#define MF_VBEFLAGS 0xfe00
Kevin O'Connor821d6b42011-12-31 18:19:22 -050038
Kevin O'Connord4398ad2012-01-01 12:32:53 -050039// Memory model types
40#define MM_TEXT 0x00
41#define MM_CGA 0x01
42#define MM_HERCULES 0x02
43#define MM_PLANAR 0x03
44#define MM_PACKED 0x04
45#define MM_NON_CHAIN_4_256 0x05
46#define MM_DIRECT 0x06
47#define MM_YUV 0x07
48
Kevin O'Connor10dff3d2012-01-09 19:19:44 -050049struct vgamode_s {
50 u8 memmodel;
51 u16 width;
52 u16 height;
53 u8 depth;
54 u8 cwidth;
55 u8 cheight;
56 u16 sstart;
57};
58
Kevin O'Connor1f2c3072009-05-06 23:35:59 -040059// vgafonts.c
60extern u8 vgafont8[];
61extern u8 vgafont14[];
62extern u8 vgafont16[];
63extern u8 vgafont14alt[];
64extern u8 vgafont16alt[];
65
Kevin O'Connor4c85a262012-02-12 11:50:52 -050066// Debug settings
67#define DEBUG_VGA_POST 1
68#define DEBUG_VGA_10 3
69
Kevin O'Connordab0a742013-12-03 11:50:49 -050070// vgainit.c
71extern struct VideoSavePointer_s video_save_pointer_table;
72
Kevin O'Connore1e000b2011-12-31 03:30:40 -050073// vgabios.c
Kevin O'Connor8cf8f8e2012-01-16 19:05:27 -050074extern int VgaBDF;
Kevin O'Connorcfd7ef92012-02-02 22:52:17 -050075extern int HaveRunInit;
Kevin O'Connorf3760372011-12-23 22:41:08 -050076#define SET_VGA(var, val) SET_FARVAR(get_global_seg(), (var), (val))
Kevin O'Connor09262412009-05-25 11:44:11 -040077struct carattr {
Kevin O'Connor6ee837b2012-02-13 20:09:02 -050078 u8 car, attr, use_attr, pad;
Kevin O'Connor09262412009-05-25 11:44:11 -040079};
Kevin O'Connor918b1562009-05-25 11:05:18 -040080struct cursorpos {
Kevin O'Connor6ee837b2012-02-13 20:09:02 -050081 u8 x, y, page, pad;
Kevin O'Connor918b1562009-05-25 11:05:18 -040082};
Kevin O'Connor3876b532012-01-24 00:07:44 -050083int vga_bpp(struct vgamode_s *vmode_g);
Kevin O'Connor83047be2012-01-07 18:27:19 -050084u16 calc_page_size(u8 memmodel, u16 width, u16 height);
Kevin O'Connor9f857fc2012-02-04 11:59:02 -050085void save_bda_state(u16 seg, struct saveBDAstate *info);
86void restore_bda_state(u16 seg, struct saveBDAstate *info);
Kevin O'Connor4a73f932012-01-21 11:08:35 -050087struct vgamode_s *get_current_mode(void);
Kevin O'Connore6bc4c12012-01-21 11:26:37 -050088int vga_set_mode(int mode, int flags);
Kevin O'Connorc0c7df62009-05-17 18:11:33 -040089
90// vgafb.c
Kevin O'Connor217f2bc2009-05-31 00:46:47 -040091void vgafb_scroll(int nblines, int attr
92 , struct cursorpos ul, struct cursorpos lr);
Kevin O'Connord3b38152009-05-26 00:05:37 -040093void vgafb_write_char(struct cursorpos cp, struct carattr ca);
94struct carattr vgafb_read_char(struct cursorpos cp);
Kevin O'Connor227a2bb2009-05-31 22:00:20 -040095void vgafb_write_pixel(u8 color, u16 x, u16 y);
96u8 vgafb_read_pixel(u16 x, u16 y);
Kevin O'Connorc0c7df62009-05-17 18:11:33 -040097
Julian Pidancet87879e22011-12-19 05:08:00 +000098// vbe.c
Kevin O'Connor31f67ae2012-01-29 11:37:01 -050099extern u32 VBE_total_memory;
100extern u32 VBE_capabilities;
101extern u32 VBE_framebuffer;
102extern u16 VBE_win_granularity;
Julian Pidancet87879e22011-12-19 05:08:00 +0000103#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"
Kevin O'Connor40401952011-12-31 03:43:12 -0500107struct bregs;
108void handle_104f(struct bregs *regs);
109
Kevin O'Connore1e000b2011-12-31 03:30:40 -0500110#endif // vgabios.h