Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / include / ipxe / console.h
diff --git a/qemu/roms/ipxe/src/include/ipxe/console.h b/qemu/roms/ipxe/src/include/ipxe/console.h
new file mode 100644 (file)
index 0000000..4b90c9c
--- /dev/null
@@ -0,0 +1,219 @@
+#ifndef _IPXE_CONSOLE_H
+#define _IPXE_CONSOLE_H
+
+#include <stddef.h>
+#include <stdio.h>
+#include <ipxe/tables.h>
+
+/** @file
+ *
+ * User interaction.
+ *
+ * Various console devices can be selected via the build options
+ * CONSOLE_FIRMWARE, CONSOLE_SERIAL etc.  The console functions
+ * putchar(), getchar() and iskey() delegate to the individual console
+ * drivers.
+ *
+ */
+
+FILE_LICENCE ( GPL2_OR_LATER );
+
+struct pixel_buffer;
+
+/** A console configuration */
+struct console_configuration {
+       /** Width */
+       unsigned int width;
+       /** Height */
+       unsigned int height;
+       /** Colour depth */
+       unsigned int depth;
+       /** Left margin */
+       unsigned int left;
+       /** Right margin */
+       unsigned int right;
+       /** Top margin */
+       unsigned int top;
+       /** Bottom margin */
+       unsigned int bottom;
+       /** Background picture, if any */
+       struct pixel_buffer *pixbuf;
+};
+
+/**
+ * A console driver
+ *
+ * Defines the functions that implement a particular console type.
+ * Must be made part of the console drivers table by using
+ * #__console_driver.
+ *
+ * @note Consoles that cannot be used before their initialisation
+ * function has completed should set #disabled initially.  This allows
+ * other console devices to still be used to print out early debugging
+ * messages.
+ */
+struct console_driver {
+       /**
+        * Console disabled flags
+        *
+        * This is the bitwise OR of zero or more console disabled
+        * flags.
+        */
+       int disabled;
+       /**
+        * Write a character to the console
+        *
+        * @v character         Character to be written
+        */
+       void ( * putchar ) ( int character );
+       /**
+        * Read a character from the console
+        *
+        * @ret character       Character read
+        *
+        * If no character is available to be read, this method will
+        * block.  The character read should not be echoed back to the
+        * console.
+        */
+       int ( * getchar ) ( void );
+       /**
+        * Check for available input
+        *
+        * @ret is_available    Input is available
+        *
+        * This should return true if a subsequent call to getchar()
+        * will not block.
+        */
+       int ( * iskey ) ( void );
+       /**
+        * Configure console
+        *
+        * @v config            Console configuration, or NULL to reset
+        * @ret rc              Return status code
+        */
+       int ( * configure ) ( struct console_configuration *config );
+       /**
+        * Console usage bitmask
+        *
+        * This is the bitwise OR of zero or more @c CONSOLE_USAGE_XXX
+        * values.
+        */
+       int usage;
+};
+
+/** Console is disabled for input */
+#define CONSOLE_DISABLED_INPUT 0x0001
+
+/** Console is disabled for output */
+#define CONSOLE_DISABLED_OUTPUT 0x0002
+
+/** Console is disabled for all uses */
+#define CONSOLE_DISABLED ( CONSOLE_DISABLED_INPUT | CONSOLE_DISABLED_OUTPUT )
+
+/** Console driver table */
+#define CONSOLES __table ( struct console_driver, "consoles" )
+
+/**
+ * Mark a <tt> struct console_driver </tt> as being part of the
+ * console drivers table.
+ *
+ * Use as e.g.
+ *
+ * @code
+ *
+ *   struct console_driver my_console __console_driver = {
+ *      .putchar = my_putchar,
+ *     .getchar = my_getchar,
+ *     .iskey = my_iskey,
+ *   };
+ *
+ * @endcode
+ *
+ */
+#define __console_driver __table_entry ( CONSOLES, 01 )
+
+/**
+ * @defgroup consoleusage Console usages
+ * @{
+ */
+
+/** Standard output */
+#define CONSOLE_USAGE_STDOUT 0x0001
+
+/** Debug messages */
+#define CONSOLE_USAGE_DEBUG 0x0002
+
+/** Text-based user interface */
+#define CONSOLE_USAGE_TUI 0x0004
+
+/** Log messages */
+#define CONSOLE_USAGE_LOG 0x0008
+
+/** All console usages */
+#define CONSOLE_USAGE_ALL ( CONSOLE_USAGE_STDOUT | CONSOLE_USAGE_DEBUG | \
+                           CONSOLE_USAGE_TUI | CONSOLE_USAGE_LOG )
+
+/** @} */
+
+/**
+ * Test to see if console has an explicit usage
+ *
+ * @v console          Console definition (e.g. CONSOLE_PCBIOS)
+ * @ret explicit       Console has an explicit usage
+ *
+ * This relies upon the trick that the expression ( 2 * N + 1 ) will
+ * be valid even if N is defined to be empty, since it will then
+ * evaluate to give ( 2 * + 1 ) == ( 2 * +1 ) == 2.
+ */
+#define CONSOLE_EXPLICIT( console ) ( ( 2 * console + 1 ) != 2 )
+
+/** Default console width */
+#define CONSOLE_DEFAULT_WIDTH 80
+
+/** Default console height */
+#define CONSOLE_DEFAULT_HEIGHT 25
+
+extern int console_usage;
+extern unsigned int console_width;
+extern unsigned int console_height;
+
+/**
+ * Set console usage
+ *
+ * @v usage            New console usage
+ * @ret old_usage      Previous console usage
+ */
+static inline __attribute__ (( always_inline )) int
+console_set_usage ( int usage ) {
+       int old_usage = console_usage;
+
+       console_usage = usage;
+       return old_usage;
+}
+
+/**
+ * Set console size
+ *
+ * @v width            Width, in characters
+ * @v height           Height, in characters
+ */
+static inline __attribute__ (( always_inline )) void
+console_set_size ( unsigned int width, unsigned int height ) {
+       console_width = width;
+       console_height = height;
+}
+
+extern int iskey ( void );
+extern int getkey ( unsigned long timeout );
+extern int console_configure ( struct console_configuration *config );
+
+/**
+ * Reset console
+ *
+ */
+static inline __attribute__ (( always_inline )) void console_reset ( void ) {
+
+       console_configure ( NULL );
+}
+
+#endif /* _IPXE_CONSOLE_H */