mirror of
https://github.com/ipxe/ipxe
synced 2025-12-29 11:03:15 +03:00
[fbcon] Add generic concept of a frame buffer console
Add support for a simple frame buffer console, using single buffering and a fixed-width bitmap font. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -62,7 +62,7 @@ struct ansiesc_handler {
|
||||
};
|
||||
|
||||
/** Maximum number of parameters within a single escape sequence */
|
||||
#define ANSIESC_MAX_PARAMS 4
|
||||
#define ANSIESC_MAX_PARAMS 5
|
||||
|
||||
/**
|
||||
* ANSI escape sequence context
|
||||
|
||||
@@ -65,6 +65,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
||||
#define ERRFILE_pending ( ERRFILE_CORE | 0x00190000 )
|
||||
#define ERRFILE_null_reboot ( ERRFILE_CORE | 0x001a0000 )
|
||||
#define ERRFILE_pinger ( ERRFILE_CORE | 0x001b0000 )
|
||||
#define ERRFILE_fbcon ( ERRFILE_CORE | 0x001c0000 )
|
||||
|
||||
#define ERRFILE_eisa ( ERRFILE_DRIVER | 0x00000000 )
|
||||
#define ERRFILE_isa ( ERRFILE_DRIVER | 0x00010000 )
|
||||
|
||||
160
src/include/ipxe/fbcon.h
Normal file
160
src/include/ipxe/fbcon.h
Normal file
@@ -0,0 +1,160 @@
|
||||
#ifndef _IPXE_FBCON_H
|
||||
#define _IPXE_FBCON_H
|
||||
|
||||
/** @file
|
||||
*
|
||||
* Frame buffer console
|
||||
*
|
||||
*/
|
||||
|
||||
FILE_LICENCE ( GPL2_OR_LATER );
|
||||
|
||||
#include <stdint.h>
|
||||
#include <ipxe/ansiesc.h>
|
||||
#include <ipxe/uaccess.h>
|
||||
|
||||
struct pixel_buffer;
|
||||
|
||||
/** Character width, in pixels */
|
||||
#define FBCON_CHAR_WIDTH 9
|
||||
|
||||
/** Character height, in pixels */
|
||||
#define FBCON_CHAR_HEIGHT 16
|
||||
|
||||
/** 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[FBCON_CHAR_HEIGHT];
|
||||
} __attribute__ (( packed ));
|
||||
|
||||
/** A font definition */
|
||||
struct fbcon_font {
|
||||
/** Character glyphs */
|
||||
userptr_t start;
|
||||
} __attribute__ (( packed ));
|
||||
|
||||
/** 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;
|
||||
/** 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;
|
||||
};
|
||||
|
||||
/** 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;
|
||||
};
|
||||
|
||||
extern int fbcon_init ( struct fbcon *fbcon, userptr_t start,
|
||||
struct fbcon_geometry *pixel,
|
||||
struct fbcon_colour_map *map,
|
||||
struct fbcon_font *font,
|
||||
struct pixel_buffer *pixbuf );
|
||||
extern void fbcon_fini ( struct fbcon *fbcon );
|
||||
extern void fbcon_putchar ( struct fbcon *fbcon, int character );
|
||||
|
||||
#endif /* _IPXE_FBCON_H */
|
||||
Reference in New Issue
Block a user