david/ipxe
david
/
ipxe
Archived
1
0
Fork 0
This repository has been archived on 2020-12-06. You can view files and clone it, but cannot push or open issues or pull requests.
ipxe/src/include/ipxe/fbcon.h

158 lines
3.5 KiB
C

#ifndef _IPXE_FBCON_H
#define _IPXE_FBCON_H
/** @file
*
* Frame buffer console
*
*/
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#include <stdint.h>
#include <ipxe/ansiesc.h>
#include <ipxe/uaccess.h>
#include <ipxe/console.h>
/** Character width, in pixels */
#define FBCON_CHAR_WIDTH 9
/** Bold colour modifier (RGB value) */
#define FBCON_BOLD 0x555555
/** Transparent background magic colour (raw colour value) */
#define FBCON_TRANSPARENT 0xffffffff
/** A font glyph */
struct fbcon_font_glyph {
/** Row bitmask */
uint8_t bitmask[0];
};
/** A font definition */
struct fbcon_font {
/** Character height (in pixels) */
unsigned int height;
/**
* Get character glyph
*
* @v character Character
* @v glyph Character glyph to fill in
*/
void ( * glyph ) ( unsigned int character, uint8_t *glyph );
};
/** A frame buffer geometry
*
* The geometry is defined in terms of "entities" (which can be either
* pixels or characters).
*/
struct fbcon_geometry {
/** Width (number of entities per displayed row) */
unsigned int width;
/** Height (number of entities per displayed column) */
unsigned int height;
/** Length of a single entity */
size_t len;
/** Stride (offset between vertically adjacent entities) */
size_t stride;
};
/** A frame buffer margin */
struct fbcon_margin {
/** Left margin */
unsigned int left;
/** Right margin */
unsigned int right;
/** Top margin */
unsigned int top;
/** Bottom margin */
unsigned int bottom;
};
/** A frame buffer colour mapping */
struct fbcon_colour_map {
/** Red scale (right shift amount from 24-bit RGB) */
uint8_t red_scale;
/** Green scale (right shift amount from 24-bit RGB) */
uint8_t green_scale;
/** Blue scale (right shift amount from 24-bit RGB) */
uint8_t blue_scale;
/** Red LSB */
uint8_t red_lsb;
/** Green LSB */
uint8_t green_lsb;
/** Blue LSB */
uint8_t blue_lsb;
};
/** A frame buffer text cell */
struct fbcon_text_cell {
/** Foreground colour */
uint32_t foreground;
/** Background colour */
uint32_t background;
/** Character */
unsigned int character;
};
/** A frame buffer text array */
struct fbcon_text {
/** Stored text cells */
userptr_t start;
};
/** A frame buffer background picture */
struct fbcon_picture {
/** Start address */
userptr_t start;
};
/** A frame buffer console */
struct fbcon {
/** Start address */
userptr_t start;
/** Length of one complete displayed screen */
size_t len;
/** Pixel geometry */
struct fbcon_geometry *pixel;
/** Character geometry */
struct fbcon_geometry character;
/** Margin */
struct fbcon_margin margin;
/** Indent to first character (in bytes) */
size_t indent;
/** Colour mapping */
struct fbcon_colour_map *map;
/** Font definition */
struct fbcon_font *font;
/** Text foreground raw colour */
uint32_t foreground;
/** Text background raw colour */
uint32_t background;
/** Bold colour modifier raw colour */
uint32_t bold;
/** Text cursor X position */
unsigned int xpos;
/** Text cursor Y position */
unsigned int ypos;
/** ANSI escape sequence context */
struct ansiesc_context ctx;
/** Text array */
struct fbcon_text text;
/** Background picture */
struct fbcon_picture picture;
/** Display cursor */
int show_cursor;
};
extern int fbcon_init ( struct fbcon *fbcon, userptr_t start,
struct fbcon_geometry *pixel,
struct fbcon_colour_map *map,
struct fbcon_font *font,
struct console_configuration *config );
extern void fbcon_fini ( struct fbcon *fbcon );
extern void fbcon_putchar ( struct fbcon *fbcon, int character );
#endif /* _IPXE_FBCON_H */