aboutsummaryrefslogtreecommitdiffstats
path: root/src/include/ipxe/fbcon.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/ipxe/fbcon.h')
-rw-r--r--src/include/ipxe/fbcon.h160
1 files changed, 160 insertions, 0 deletions
diff --git a/src/include/ipxe/fbcon.h b/src/include/ipxe/fbcon.h
new file mode 100644
index 000000000..913a7feaf
--- /dev/null
+++ b/src/include/ipxe/fbcon.h
@@ -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 */