^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /* ----------------------------------------------------------------------- *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Copyright 1999-2007 H. Peter Anvin - All Rights Reserved
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * ----------------------------------------------------------------------- */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #ifndef BOOT_VESA_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #define BOOT_VESA_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) u16 off, seg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) } far_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) /* VESA General Information table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) struct vesa_general_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) u32 signature; /* 0 Magic number = "VESA" */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) u16 version; /* 4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) far_ptr vendor_string; /* 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) u32 capabilities; /* 10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) far_ptr video_mode_ptr; /* 14 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) u16 total_memory; /* 18 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) u8 reserved[236]; /* 20 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) } __attribute__ ((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) #define VESA_MAGIC ('V' + ('E' << 8) + ('S' << 16) + ('A' << 24))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) struct vesa_mode_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) u16 mode_attr; /* 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) u8 win_attr[2]; /* 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) u16 win_grain; /* 4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) u16 win_size; /* 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) u16 win_seg[2]; /* 8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) far_ptr win_scheme; /* 12 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) u16 logical_scan; /* 16 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) u16 h_res; /* 18 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) u16 v_res; /* 20 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) u8 char_width; /* 22 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) u8 char_height; /* 23 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) u8 memory_planes; /* 24 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) u8 bpp; /* 25 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) u8 banks; /* 26 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) u8 memory_layout; /* 27 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) u8 bank_size; /* 28 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) u8 image_planes; /* 29 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) u8 page_function; /* 30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) u8 rmask; /* 31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) u8 rpos; /* 32 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) u8 gmask; /* 33 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) u8 gpos; /* 34 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) u8 bmask; /* 35 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) u8 bpos; /* 36 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) u8 resv_mask; /* 37 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) u8 resv_pos; /* 38 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) u8 dcm_info; /* 39 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) u32 lfb_ptr; /* 40 Linear frame buffer address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) u32 offscreen_ptr; /* 44 Offscreen memory address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) u16 offscreen_size; /* 48 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) u8 reserved[206]; /* 50 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) } __attribute__ ((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) #endif /* LIB_SYS_VESA_H */