123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- #ifndef _IPXE_CONSOLE_H
- #define _IPXE_CONSOLE_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 );
-
- /**
- * 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=1 initially. This
- * allows other console devices to still be used to print out early
- * debugging messages.
- *
- */
- struct console_driver {
- /** Console is disabled.
- *
- * The console's putchar(), getchar() and iskey() methods will
- * not be called while #disabled==1. Typically the console's
- * initialisation functions will set #disabled=0 upon
- * completion.
- *
- */
- int disabled;
-
- /** Write a character to the console.
- *
- * @v character Character to be written
- * @ret None -
- * @err None -
- *
- */
- void ( *putchar ) ( int character );
-
- /** Read a character from the console.
- *
- * @v None -
- * @ret character Character read
- * @err None -
- *
- * 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.
- *
- * @v None -
- * @ret True Input is available
- * @ret False Input is not available
- * @err None -
- *
- * This should return True if a subsequent call to getchar()
- * will not block.
- *
- */
- int ( *iskey ) ( void );
-
- /** Console usage bitmask
- *
- * This is the bitwise OR of zero or more @c CONSOLE_USAGE_XXX
- * values.
- */
- int usage;
- };
-
- /** 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
-
- /** All console usages */
- #define CONSOLE_USAGE_ALL ( CONSOLE_USAGE_STDOUT | CONSOLE_USAGE_DEBUG )
-
- /** @} */
-
- /**
- * 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 )
-
- extern int console_usage;
-
- /**
- * 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;
- }
-
- extern int iskey ( void );
- extern int getkey ( unsigned long timeout );
-
- #endif /* _IPXE_CONSOLE_H */
|