mirror of
https://git.proxmox.com/git/grub2
synced 2025-05-17 23:45:12 +00:00
162 lines
4.3 KiB
C
162 lines
4.3 KiB
C
/*
|
|
* GRUB -- GRand Unified Bootloader
|
|
* Copyright (C) 2010 Free Software Foundation, Inc.
|
|
*
|
|
* GRUB is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* GRUB is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef GRUB_VGA_HEADER
|
|
#define GRUB_VGA_HEADER 1
|
|
|
|
enum
|
|
{
|
|
GRUB_VGA_IO_SR_INDEX = 0x3c4,
|
|
GRUB_VGA_IO_SR_DATA = 0x3c5,
|
|
GRUB_VGA_IO_PIXEL_MASK = 0x3c6,
|
|
GRUB_VGA_IO_PALLETTE_READ_INDEX = 0x3c7,
|
|
GRUB_VGA_IO_PALLETTE_WRITE_INDEX = 0x3c8,
|
|
GRUB_VGA_IO_PALLETTE_DATA = 0x3c9,
|
|
GRUB_VGA_IO_GR_INDEX = 0x3ce,
|
|
GRUB_VGA_IO_GR_DATA = 0x3cf,
|
|
GRUB_VGA_IO_CR_INDEX = 0x3d4,
|
|
GRUB_VGA_IO_CR_DATA = 0x3d5,
|
|
GRUB_VGA_IO_INPUT_STATUS1_REGISTER = 0x3da
|
|
};
|
|
|
|
#define GRUB_VGA_IO_INPUT_STATUS1_VERTR_BIT 0x08
|
|
|
|
enum
|
|
{
|
|
GRUB_VGA_CR_WIDTH = 0x01,
|
|
GRUB_VGA_CR_OVERFLOW = 0x07,
|
|
GRUB_VGA_CR_CELL_HEIGHT = 0x09,
|
|
GRUB_VGA_CR_CURSOR = 0x0a,
|
|
GRUB_VGA_CR_START_ADDR_HIGH_REGISTER = 0x0c,
|
|
GRUB_VGA_CR_START_ADDR_LOW_REGISTER = 0x0d,
|
|
GRUB_VGA_CR_CURSOR_ADDR_HIGH = 0x0e,
|
|
GRUB_VGA_CR_CURSOR_ADDR_LOW = 0x0f,
|
|
GRUB_VGA_CR_VSYNC_END = 0x11,
|
|
GRUB_VGA_CR_HEIGHT = 0x12,
|
|
GRUB_VGA_CR_PITCH = 0x13,
|
|
GRUB_VGA_CR_MODE = 0x17,
|
|
GRUB_VGA_CR_LINE_COMPARE = 0x18,
|
|
};
|
|
|
|
#define GRUB_VGA_CR_WIDTH_DIVISOR 8
|
|
#define GRUB_VGA_CR_OVERFLOW_HEIGHT1_SHIFT 7
|
|
#define GRUB_VGA_CR_OVERFLOW_HEIGHT1_MASK 0x02
|
|
#define GRUB_VGA_CR_OVERFLOW_HEIGHT2_SHIFT 3
|
|
#define GRUB_VGA_CR_OVERFLOW_HEIGHT2_MASK 0xc0
|
|
#define GRUB_VGA_CR_OVERFLOW_LINE_COMPARE_SHIFT 4
|
|
#define GRUB_VGA_CR_OVERFLOW_LINE_COMPARE_MASK 0x10
|
|
|
|
#define GRUB_VGA_CR_CELL_HEIGHT_LINE_COMPARE_MASK 0x40
|
|
#define GRUB_VGA_CR_CELL_HEIGHT_LINE_COMPARE_SHIFT 3
|
|
|
|
#define GRUB_VGA_CR_CURSOR_DISABLE (1 << 5)
|
|
|
|
#define GRUB_VGA_CR_PITCH_DIVISOR 8
|
|
|
|
#define GRUB_VGA_CR_MODE_TIMING_ENABLE 0x80
|
|
#define GRUB_VGA_CR_MODE_BYTE_MODE 0x40
|
|
#define GRUB_VGA_CR_MODE_NO_HERCULES 0x02
|
|
#define GRUB_VGA_CR_MODE_NO_CGA 0x01
|
|
|
|
enum
|
|
{
|
|
GRUB_VGA_SR_MAP_MASK_REGISTER = 0x02,
|
|
GRUB_VGA_SR_MEMORY_MODE = 0x04,
|
|
};
|
|
|
|
#define GRUB_VGA_SR_MEMORY_MODE_CHAIN4 8
|
|
#define GRUB_VGA_SR_MEMORY_MODE_NORMAL 0
|
|
|
|
enum
|
|
{
|
|
GRUB_VGA_GR_READ_MAP_REGISTER = 0x04,
|
|
GRUB_VGA_GR_MODE = 5,
|
|
GRUB_VGA_GR_GR6 = 6,
|
|
GRUB_VGA_GR_MAX
|
|
};
|
|
|
|
#define GRUB_VGA_GR_GR6_GRAPHICS_MODE 1
|
|
|
|
#define GRUB_VGA_GR_MODE_256_COLOR 0x40
|
|
#define GRUB_VGA_GR_MODE_READ_MODE1 0x08
|
|
|
|
static inline void
|
|
grub_vga_gr_write (grub_uint8_t val, grub_uint8_t addr)
|
|
{
|
|
grub_outb (addr, GRUB_VGA_IO_GR_INDEX);
|
|
grub_outb (val, GRUB_VGA_IO_GR_DATA);
|
|
}
|
|
|
|
static inline grub_uint8_t
|
|
grub_vga_gr_read (grub_uint8_t addr)
|
|
{
|
|
grub_outb (addr, GRUB_VGA_IO_GR_INDEX);
|
|
return grub_inb (GRUB_VGA_IO_GR_DATA);
|
|
}
|
|
|
|
static inline void
|
|
grub_vga_cr_write (grub_uint8_t val, grub_uint8_t addr)
|
|
{
|
|
grub_outb (addr, GRUB_VGA_IO_CR_INDEX);
|
|
grub_outb (val, GRUB_VGA_IO_CR_DATA);
|
|
}
|
|
|
|
static inline grub_uint8_t
|
|
grub_vga_cr_read (grub_uint8_t addr)
|
|
{
|
|
grub_outb (addr, GRUB_VGA_IO_CR_INDEX);
|
|
return grub_inb (GRUB_VGA_IO_CR_DATA);
|
|
}
|
|
|
|
static inline void
|
|
grub_vga_sr_write (grub_uint8_t val, grub_uint8_t addr)
|
|
{
|
|
grub_outb (addr, GRUB_VGA_IO_SR_INDEX);
|
|
grub_outb (val, GRUB_VGA_IO_SR_DATA);
|
|
}
|
|
|
|
static inline grub_uint8_t
|
|
grub_vga_sr_read (grub_uint8_t addr)
|
|
{
|
|
grub_outb (addr, GRUB_VGA_IO_SR_INDEX);
|
|
return grub_inb (GRUB_VGA_IO_SR_DATA);
|
|
}
|
|
|
|
static inline void
|
|
grub_vga_palette_read (grub_uint8_t addr, grub_uint8_t *r, grub_uint8_t *g,
|
|
grub_uint8_t *b)
|
|
{
|
|
grub_outb (addr, GRUB_VGA_IO_PALLETTE_READ_INDEX);
|
|
*r = grub_inb (GRUB_VGA_IO_PALLETTE_DATA);
|
|
*g = grub_inb (GRUB_VGA_IO_PALLETTE_DATA);
|
|
*b = grub_inb (GRUB_VGA_IO_PALLETTE_DATA);
|
|
}
|
|
|
|
static inline void
|
|
grub_vga_palette_write (grub_uint8_t addr, grub_uint8_t r, grub_uint8_t g,
|
|
grub_uint8_t b)
|
|
{
|
|
grub_outb (addr, GRUB_VGA_IO_PALLETTE_READ_INDEX);
|
|
grub_outb (r, GRUB_VGA_IO_PALLETTE_DATA);
|
|
grub_outb (g, GRUB_VGA_IO_PALLETTE_DATA);
|
|
grub_outb (b, GRUB_VGA_IO_PALLETTE_DATA);
|
|
}
|
|
|
|
|
|
#endif
|