Kevin O'Connor | e1e000b | 2011-12-31 03:30:40 -0500 | [diff] [blame] | 1 | #ifndef __VGABIOS_H |
| 2 | #define __VGABIOS_H |
Kevin O'Connor | 1f2c307 | 2009-05-06 23:35:59 -0400 | [diff] [blame] | 3 | |
| 4 | #include "types.h" // u8 |
Kevin O'Connor | 9f98542 | 2009-09-09 11:34:39 -0400 | [diff] [blame] | 5 | #include "farptr.h" // struct segoff_s |
Kevin O'Connor | 1f2c307 | 2009-05-06 23:35:59 -0400 | [diff] [blame] | 6 | |
Kevin O'Connor | aad3b69 | 2012-01-14 23:15:40 -0500 | [diff] [blame] | 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 | |
Kevin O'Connor | 20dc419 | 2014-02-05 20:52:25 -0500 | [diff] [blame] | 22 | // Save/Restore flags |
| 23 | #define SR_HARDWARE 0x0001 |
| 24 | #define SR_BDA 0x0002 |
| 25 | #define SR_DAC 0x0004 |
| 26 | #define SR_REGISTERS 0x0008 |
| 27 | #define SR_SAVE 0x0100 |
| 28 | #define SR_RESTORE 0x0200 |
Kevin O'Connor | ca66864 | 2009-05-21 23:06:08 -0400 | [diff] [blame] | 29 | |
Kevin O'Connor | 821d6b4 | 2011-12-31 18:19:22 -0500 | [diff] [blame] | 30 | // Mode flags |
Kevin O'Connor | b7b9293 | 2013-03-09 13:04:47 -0500 | [diff] [blame] | 31 | #define MF_LEGACY 0x0001 |
Kevin O'Connor | 821d6b4 | 2011-12-31 18:19:22 -0500 | [diff] [blame] | 32 | #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'Connor | e6bc4c1 | 2012-01-21 11:26:37 -0500 | [diff] [blame] | 37 | #define MF_VBEFLAGS 0xfe00 |
Kevin O'Connor | 821d6b4 | 2011-12-31 18:19:22 -0500 | [diff] [blame] | 38 | |
Kevin O'Connor | d4398ad | 2012-01-01 12:32:53 -0500 | [diff] [blame] | 39 | // 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'Connor | 10dff3d | 2012-01-09 19:19:44 -0500 | [diff] [blame] | 49 | struct 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'Connor | f864b60 | 2014-03-24 12:49:44 -0400 | [diff] [blame] | 59 | // Graphics pixel operations. |
| 60 | struct gfx_op { |
| 61 | struct vgamode_s *vmode_g; |
| 62 | u32 linelength; |
Kevin O'Connor | 098c2fc | 2014-04-05 17:11:06 -0400 | [diff] [blame] | 63 | u32 displaystart; |
Kevin O'Connor | f864b60 | 2014-03-24 12:49:44 -0400 | [diff] [blame] | 64 | |
| 65 | u8 op; |
| 66 | u16 x, y; |
| 67 | |
| 68 | u8 pixels[8]; |
| 69 | u16 xlen, ylen; |
| 70 | u16 srcy; |
| 71 | }; |
| 72 | |
| 73 | #define GO_READ8 1 |
| 74 | #define GO_WRITE8 2 |
| 75 | #define GO_MEMSET 3 |
| 76 | #define GO_MEMMOVE 4 |
| 77 | |
Kevin O'Connor | 9978d49 | 2014-10-17 21:17:48 -0400 | [diff] [blame] | 78 | // Custom internal storage in BDA |
| 79 | #define VGA_CUSTOM_BDA 0xb9 |
| 80 | |
| 81 | struct vga_bda_s { |
| 82 | u8 vbe_flag; |
| 83 | u16 vbe_mode; |
Kevin O'Connor | f7f2263 | 2014-10-17 21:37:23 -0400 | [diff] [blame] | 84 | u16 vgamode_offset; |
Kevin O'Connor | 9978d49 | 2014-10-17 21:17:48 -0400 | [diff] [blame] | 85 | } PACKED; |
| 86 | |
| 87 | #define GET_BDA_EXT(var) \ |
| 88 | GET_FARVAR(SEG_BDA, ((struct vga_bda_s *)VGA_CUSTOM_BDA)->var) |
| 89 | #define SET_BDA_EXT(var, val) \ |
| 90 | SET_FARVAR(SEG_BDA, ((struct vga_bda_s *)VGA_CUSTOM_BDA)->var, (val)) |
| 91 | |
Kevin O'Connor | f864b60 | 2014-03-24 12:49:44 -0400 | [diff] [blame] | 92 | // Debug settings |
| 93 | #define DEBUG_VGA_POST 1 |
| 94 | #define DEBUG_VGA_10 3 |
| 95 | |
Kevin O'Connor | 1f2c307 | 2009-05-06 23:35:59 -0400 | [diff] [blame] | 96 | // vgafonts.c |
| 97 | extern u8 vgafont8[]; |
| 98 | extern u8 vgafont14[]; |
| 99 | extern u8 vgafont16[]; |
| 100 | extern u8 vgafont14alt[]; |
| 101 | extern u8 vgafont16alt[]; |
| 102 | |
Kevin O'Connor | dab0a74 | 2013-12-03 11:50:49 -0500 | [diff] [blame] | 103 | // vgainit.c |
| 104 | extern struct VideoSavePointer_s video_save_pointer_table; |
| 105 | |
Kevin O'Connor | e1e000b | 2011-12-31 03:30:40 -0500 | [diff] [blame] | 106 | // vgabios.c |
Kevin O'Connor | 8cf8f8e | 2012-01-16 19:05:27 -0500 | [diff] [blame] | 107 | extern int VgaBDF; |
Kevin O'Connor | cfd7ef9 | 2012-02-02 22:52:17 -0500 | [diff] [blame] | 108 | extern int HaveRunInit; |
Kevin O'Connor | f376037 | 2011-12-23 22:41:08 -0500 | [diff] [blame] | 109 | #define SET_VGA(var, val) SET_FARVAR(get_global_seg(), (var), (val)) |
Kevin O'Connor | 0926241 | 2009-05-25 11:44:11 -0400 | [diff] [blame] | 110 | struct carattr { |
Kevin O'Connor | 6ee837b | 2012-02-13 20:09:02 -0500 | [diff] [blame] | 111 | u8 car, attr, use_attr, pad; |
Kevin O'Connor | 0926241 | 2009-05-25 11:44:11 -0400 | [diff] [blame] | 112 | }; |
Kevin O'Connor | 918b156 | 2009-05-25 11:05:18 -0400 | [diff] [blame] | 113 | struct cursorpos { |
Kevin O'Connor | 6ee837b | 2012-02-13 20:09:02 -0500 | [diff] [blame] | 114 | u8 x, y, page, pad; |
Kevin O'Connor | 918b156 | 2009-05-25 11:05:18 -0400 | [diff] [blame] | 115 | }; |
Kevin O'Connor | 3876b53 | 2012-01-24 00:07:44 -0500 | [diff] [blame] | 116 | int vga_bpp(struct vgamode_s *vmode_g); |
Kevin O'Connor | 83047be | 2012-01-07 18:27:19 -0500 | [diff] [blame] | 117 | u16 calc_page_size(u8 memmodel, u16 width, u16 height); |
Kevin O'Connor | 20dc419 | 2014-02-05 20:52:25 -0500 | [diff] [blame] | 118 | int bda_save_restore(int cmd, u16 seg, void *data); |
Kevin O'Connor | 4a73f93 | 2012-01-21 11:08:35 -0500 | [diff] [blame] | 119 | struct vgamode_s *get_current_mode(void); |
Kevin O'Connor | e6bc4c1 | 2012-01-21 11:26:37 -0500 | [diff] [blame] | 120 | int vga_set_mode(int mode, int flags); |
Kevin O'Connor | c0c7df6 | 2009-05-17 18:11:33 -0400 | [diff] [blame] | 121 | |
| 122 | // vgafb.c |
Kevin O'Connor | 7c79029 | 2014-02-11 15:34:58 -0500 | [diff] [blame] | 123 | void init_gfx_op(struct gfx_op *op, struct vgamode_s *vmode_g); |
| 124 | void handle_gfx_op(struct gfx_op *op); |
Kevin O'Connor | a02d418 | 2014-04-05 22:48:05 -0400 | [diff] [blame] | 125 | void *text_address(struct cursorpos cp); |
Kevin O'Connor | 7217ae7 | 2014-10-17 21:47:10 -0400 | [diff] [blame^] | 126 | void vgafb_move_chars(struct cursorpos dest |
Kevin O'Connor | 7fd2af6 | 2014-03-20 21:16:28 -0400 | [diff] [blame] | 127 | , struct cursorpos src, struct cursorpos movesize); |
Kevin O'Connor | 7217ae7 | 2014-10-17 21:47:10 -0400 | [diff] [blame^] | 128 | void vgafb_clear_chars(struct cursorpos dest |
Kevin O'Connor | 7fd2af6 | 2014-03-20 21:16:28 -0400 | [diff] [blame] | 129 | , struct carattr ca, struct cursorpos movesize); |
Kevin O'Connor | d3b3815 | 2009-05-26 00:05:37 -0400 | [diff] [blame] | 130 | void vgafb_write_char(struct cursorpos cp, struct carattr ca); |
| 131 | struct carattr vgafb_read_char(struct cursorpos cp); |
Kevin O'Connor | 227a2bb | 2009-05-31 22:00:20 -0400 | [diff] [blame] | 132 | void vgafb_write_pixel(u8 color, u16 x, u16 y); |
| 133 | u8 vgafb_read_pixel(u16 x, u16 y); |
Kevin O'Connor | c0c7df6 | 2009-05-17 18:11:33 -0400 | [diff] [blame] | 134 | |
Julian Pidancet | 87879e2 | 2011-12-19 05:08:00 +0000 | [diff] [blame] | 135 | // vbe.c |
Kevin O'Connor | 31f67ae | 2012-01-29 11:37:01 -0500 | [diff] [blame] | 136 | extern u32 VBE_total_memory; |
| 137 | extern u32 VBE_capabilities; |
| 138 | extern u32 VBE_framebuffer; |
| 139 | extern u16 VBE_win_granularity; |
Julian Pidancet | 87879e2 | 2011-12-19 05:08:00 +0000 | [diff] [blame] | 140 | #define VBE_OEM_STRING "SeaBIOS VBE(C) 2011" |
| 141 | #define VBE_VENDOR_STRING "SeaBIOS Developers" |
| 142 | #define VBE_PRODUCT_STRING "SeaBIOS VBE Adapter" |
| 143 | #define VBE_REVISION_STRING "Rev. 1" |
Kevin O'Connor | 4040195 | 2011-12-31 03:43:12 -0500 | [diff] [blame] | 144 | struct bregs; |
| 145 | void handle_104f(struct bregs *regs); |
| 146 | |
Kevin O'Connor | e1e000b | 2011-12-31 03:30:40 -0500 | [diff] [blame] | 147 | #endif // vgabios.h |