root/headers/private/kernel/arch/x86/vesa.h
/*
** Copyright 2001, Travis Geiselbrecht. All rights reserved.
** Distributed under the terms of the NewOS License.
*/
#ifndef _STAGE2_VESA_H
#define _STAGE2_VESA_H


#include <SupportDefs.h>


struct VBEInfoBlock {
        char   signature[4]; // should be 'VESA'
        uint16 version;
        uint32 oem_ptr;
        uint32 capabilities;
        uint32 video_ptr;
        uint16 total_memory;
        // VESA 2.x stuff
        uint16 oem_software_rev;
        uint32 oem_vendor_name_ptr;
        uint32 oem_product_name_ptr;
        uint32 oem_product_rev_ptr;
        uint8  reserved[222];
        uint8  oem_data[256];
} _PACKED;

struct VBEModeInfoBlock {
        uint16 attributes;
        uint8  wina_attributes;
        uint8  winb_attributes;
        uint16 win_granulatiry;
        uint16 win_size;
        uint16 wina_segment;
        uint16 winb_segment;
        uint32 win_function_ptr;
        uint16 bytes_per_scanline;

        uint16 x_resolution;
        uint16 y_resolution;
        uint8  x_charsize;
        uint8  y_charsize;
        uint8  num_planes;
        uint8  bits_per_pixel;
        uint8  num_banks;
        uint8  memory_model;
        uint8  bank_size;
        uint8  num_image_pages;
        uint8  _reserved;

        uint8  red_mask_size;
        uint8  red_field_position;
        uint8  green_mask_size;
        uint8  green_field_position;
        uint8  blue_mask_size;
        uint8  blue_field_position;
        uint8  reserved_mask_size;
        uint8  reserved_field_position;
        uint8  direct_color_mode_info;

        uint32 phys_base_ptr;
        uint32 offscreen_mem_offset;
        uint16 offscreen_mem_size;
        uint8  _reserved2[206];
} _PACKED;

#endif