[tables] Incorporate table data type information into table definition
[people/mcb30/gpxe.git] / src / include / console.h
1 #ifndef CONSOLE_H
2 #define CONSOLE_H
3
4 #include <gpxe/tables.h>
5
6 /** @file
7  *
8  * User interaction.
9  *
10  * Various console devices can be selected via the build options
11  * CONSOLE_FIRMWARE, CONSOLE_SERIAL etc.  The console functions
12  * putchar(), getchar() and iskey() delegate to the individual console
13  * drivers.
14  *
15  */
16
17 /**
18  * A console driver
19  *
20  * Defines the functions that implement a particular console type.
21  * Must be made part of the console drivers table by using
22  * #__console_driver.
23  *
24  * @note Consoles that cannot be used before their initialisation
25  * function has completed should set #disabled=1 initially.  This
26  * allows other console devices to still be used to print out early
27  * debugging messages.
28  *
29  */
30 struct console_driver {
31         /** Console is disabled.
32          *
33          * The console's putchar(), putline(), getchar() and iskey()
34          * methods will not be called while #disabled==1. Typically
35          * the console's initialisation functions will set #disabled=0
36          * upon completion.
37          *
38          */
39         int disabled;
40
41         /** Write a character to the console.
42          *
43          * @v character         Character to be written
44          * @ret None            -
45          * @err None            -
46          *
47          */
48         void ( *putchar ) ( int character );
49
50         /** Write an entire line to the console.
51          * This is intended to be used by line-oriented output media,
52          * like system logging facilities or line printers.
53          * Line output will not contain non-printable characters.
54          *
55          * @v linebuffer        Pointer to the \0-terminated line
56          * @ret None            -
57          * @err None            -
58          */
59         void ( * putline ) ( unsigned char * linebuffer );
60
61         /** Read a character from the console.
62          *
63          * @v None              -
64          * @ret character       Character read
65          * @err None            -
66          *
67          * If no character is available to be read, this method will
68          * block.  The character read should not be echoed back to the
69          * console.
70          *
71          */
72         int ( *getchar ) ( void );
73
74         /** Check for available input.
75          *
76          * @v None              -
77          * @ret True            Input is available
78          * @ret False           Input is not available
79          * @err None            -
80          *
81          * This should return True if a subsequent call to getchar()
82          * will not block.
83          *
84          */
85         int ( *iskey ) ( void );
86 };
87
88 /** Console driver table */
89 #define CONSOLES __table ( struct console_driver, "consoles" )
90
91 /**
92  * Mark a <tt> struct console_driver </tt> as being part of the
93  * console drivers table.
94  *
95  * Use as e.g.
96  *
97  * @code
98  *
99  *   struct console_driver my_console __console_driver = {
100  *      .putchar = my_putchar,
101  *      .getchar = my_getchar,
102  *      .iskey = my_iskey,
103  *   };
104  *
105  * @endcode
106  *
107  */
108 #define __console_driver __table_entry ( CONSOLES, 01 )
109
110 /* Function prototypes */
111
112 extern void putchar ( int character );
113 extern int getchar ( void );
114 extern int iskey ( void );
115 extern int getkey ( void );
116
117 #endif /* CONSOLE_H */