Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:05

0001 /* $FreeBSD$ */
0002 #ifndef _EFI_CON_H
0003 #define _EFI_CON_H
0004 
0005 /*++
0006 
0007 Copyright (c)  1999 - 2002 Intel Corporation. All rights reserved
0008 This software and associated documentation (if any) is furnished
0009 under a license and may only be used or copied in accordance
0010 with the terms of the license. Except as permitted by such
0011 license, no part of this software or documentation may be
0012 reproduced, stored in a retrieval system, or transmitted in any
0013 form or by any means without the express written consent of
0014 Intel Corporation.
0015 
0016 Module Name:
0017 
0018     eficon.h
0019 
0020 Abstract:
0021 
0022     EFI console protocols
0023 
0024 
0025 
0026 Revision History
0027 
0028 --*/
0029 
0030 //
0031 // Text output protocol
0032 //
0033 
0034 #define SIMPLE_TEXT_OUTPUT_PROTOCOL \
0035     { 0x387477c2, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
0036 
0037 INTERFACE_DECL(_SIMPLE_TEXT_OUTPUT_INTERFACE);
0038 
0039 typedef
0040 EFI_STATUS
0041 (EFIAPI *EFI_TEXT_RESET) (
0042     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
0043     IN BOOLEAN                      ExtendedVerification
0044     );
0045 
0046 typedef
0047 EFI_STATUS
0048 (EFIAPI *EFI_TEXT_OUTPUT_STRING) (
0049     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
0050     IN CHAR16                       *String
0051     );
0052 
0053 typedef
0054 EFI_STATUS
0055 (EFIAPI *EFI_TEXT_TEST_STRING) (
0056     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
0057     IN CHAR16                       *String
0058     );
0059 
0060 typedef
0061 EFI_STATUS
0062 (EFIAPI *EFI_TEXT_QUERY_MODE) (
0063     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
0064     IN UINTN                        ModeNumber,
0065     OUT UINTN                       *Columns,
0066     OUT UINTN                       *Rows
0067     );
0068 
0069 typedef
0070 EFI_STATUS
0071 (EFIAPI *EFI_TEXT_SET_MODE) (
0072     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
0073     IN UINTN                        ModeNumber
0074     );
0075 
0076 typedef
0077 EFI_STATUS
0078 (EFIAPI *EFI_TEXT_SET_ATTRIBUTE) (
0079     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
0080     IN UINTN                        Attribute
0081     );
0082 
0083 #define EFI_BLACK   0x00
0084 #define EFI_BLUE    0x01
0085 #define EFI_GREEN   0x02
0086 #define EFI_CYAN            (EFI_BLUE | EFI_GREEN)
0087 #define EFI_RED     0x04
0088 #define EFI_MAGENTA         (EFI_BLUE | EFI_RED)
0089 #define EFI_BROWN           (EFI_GREEN | EFI_RED)
0090 #define EFI_LIGHTGRAY       (EFI_BLUE | EFI_GREEN | EFI_RED)
0091 #define EFI_BRIGHT  0x08
0092 #define EFI_DARKGRAY        (EFI_BRIGHT)
0093 #define EFI_LIGHTBLUE       (EFI_BLUE | EFI_BRIGHT)
0094 #define EFI_LIGHTGREEN      (EFI_GREEN | EFI_BRIGHT)
0095 #define EFI_LIGHTCYAN       (EFI_CYAN | EFI_BRIGHT)
0096 #define EFI_LIGHTRED        (EFI_RED | EFI_BRIGHT)
0097 #define EFI_LIGHTMAGENTA    (EFI_MAGENTA | EFI_BRIGHT)
0098 #define EFI_YELLOW          (EFI_BROWN | EFI_BRIGHT)
0099 #define EFI_WHITE           (EFI_BLUE | EFI_GREEN | EFI_RED | EFI_BRIGHT)
0100 
0101 #define EFI_TEXT_ATTR(f,b)  ((f) | ((b) << 4))
0102 
0103 #define EFI_BACKGROUND_BLACK        0x00
0104 #define EFI_BACKGROUND_BLUE         0x10
0105 #define EFI_BACKGROUND_GREEN        0x20
0106 #define EFI_BACKGROUND_CYAN         (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_GREEN)
0107 #define EFI_BACKGROUND_RED          0x40
0108 #define EFI_BACKGROUND_MAGENTA      (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_RED)
0109 #define EFI_BACKGROUND_BROWN        (EFI_BACKGROUND_GREEN | EFI_BACKGROUND_RED)
0110 #define EFI_BACKGROUND_LIGHTGRAY    (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_GREEN | EFI_BACKGROUND_RED)
0111 
0112 
0113 typedef
0114 EFI_STATUS
0115 (EFIAPI *EFI_TEXT_CLEAR_SCREEN) (
0116     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This
0117     );
0118 
0119 typedef
0120 EFI_STATUS
0121 (EFIAPI *EFI_TEXT_SET_CURSOR_POSITION) (
0122     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
0123     IN UINTN                        Column,
0124     IN UINTN                        Row
0125     );
0126 
0127 typedef
0128 EFI_STATUS
0129 (EFIAPI *EFI_TEXT_ENABLE_CURSOR) (
0130     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
0131     IN BOOLEAN                      Enable
0132     );
0133 
0134 typedef struct {
0135     INT32                           MaxMode;
0136     // current settings
0137     INT32                           Mode;
0138     INT32                           Attribute;
0139     INT32                           CursorColumn;
0140     INT32                           CursorRow;
0141     BOOLEAN                         CursorVisible;
0142 } SIMPLE_TEXT_OUTPUT_MODE;
0143 
0144 typedef struct _SIMPLE_TEXT_OUTPUT_INTERFACE {
0145     EFI_TEXT_RESET                  Reset;
0146 
0147     EFI_TEXT_OUTPUT_STRING          OutputString;
0148     EFI_TEXT_TEST_STRING            TestString;
0149 
0150     EFI_TEXT_QUERY_MODE             QueryMode;
0151     EFI_TEXT_SET_MODE               SetMode;
0152     EFI_TEXT_SET_ATTRIBUTE          SetAttribute;
0153 
0154     EFI_TEXT_CLEAR_SCREEN           ClearScreen;
0155     EFI_TEXT_SET_CURSOR_POSITION    SetCursorPosition;
0156     EFI_TEXT_ENABLE_CURSOR          EnableCursor;
0157 
0158     // Current mode
0159     SIMPLE_TEXT_OUTPUT_MODE         *Mode;
0160 } SIMPLE_TEXT_OUTPUT_INTERFACE;
0161 
0162 //
0163 // Define's for required EFI Unicode Box Draw character
0164 //
0165 
0166 #define BOXDRAW_HORIZONTAL                  0x2500
0167 #define BOXDRAW_VERTICAL                    0x2502
0168 #define BOXDRAW_DOWN_RIGHT                  0x250c
0169 #define BOXDRAW_DOWN_LEFT                   0x2510
0170 #define BOXDRAW_UP_RIGHT                    0x2514
0171 #define BOXDRAW_UP_LEFT                     0x2518
0172 #define BOXDRAW_VERTICAL_RIGHT              0x251c
0173 #define BOXDRAW_VERTICAL_LEFT               0x2524
0174 #define BOXDRAW_DOWN_HORIZONTAL             0x252c
0175 #define BOXDRAW_UP_HORIZONTAL               0x2534
0176 #define BOXDRAW_VERTICAL_HORIZONTAL         0x253c
0177 
0178 #define BOXDRAW_DOUBLE_HORIZONTAL           0x2550
0179 #define BOXDRAW_DOUBLE_VERTICAL             0x2551
0180 #define BOXDRAW_DOWN_RIGHT_DOUBLE           0x2552
0181 #define BOXDRAW_DOWN_DOUBLE_RIGHT           0x2553
0182 #define BOXDRAW_DOUBLE_DOWN_RIGHT           0x2554
0183 
0184 #define BOXDRAW_DOWN_LEFT_DOUBLE            0x2555
0185 #define BOXDRAW_DOWN_DOUBLE_LEFT            0x2556
0186 #define BOXDRAW_DOUBLE_DOWN_LEFT            0x2557
0187 
0188 #define BOXDRAW_UP_RIGHT_DOUBLE             0x2558
0189 #define BOXDRAW_UP_DOUBLE_RIGHT             0x2559
0190 #define BOXDRAW_DOUBLE_UP_RIGHT             0x255a
0191 
0192 #define BOXDRAW_UP_LEFT_DOUBLE              0x255b
0193 #define BOXDRAW_UP_DOUBLE_LEFT              0x255c
0194 #define BOXDRAW_DOUBLE_UP_LEFT              0x255d
0195 
0196 #define BOXDRAW_VERTICAL_RIGHT_DOUBLE       0x255e
0197 #define BOXDRAW_VERTICAL_DOUBLE_RIGHT       0x255f
0198 #define BOXDRAW_DOUBLE_VERTICAL_RIGHT       0x2560
0199 
0200 #define BOXDRAW_VERTICAL_LEFT_DOUBLE        0x2561
0201 #define BOXDRAW_VERTICAL_DOUBLE_LEFT        0x2562
0202 #define BOXDRAW_DOUBLE_VERTICAL_LEFT        0x2563
0203 
0204 #define BOXDRAW_DOWN_HORIZONTAL_DOUBLE      0x2564
0205 #define BOXDRAW_DOWN_DOUBLE_HORIZONTAL      0x2565
0206 #define BOXDRAW_DOUBLE_DOWN_HORIZONTAL      0x2566
0207 
0208 #define BOXDRAW_UP_HORIZONTAL_DOUBLE        0x2567
0209 #define BOXDRAW_UP_DOUBLE_HORIZONTAL        0x2568
0210 #define BOXDRAW_DOUBLE_UP_HORIZONTAL        0x2569
0211 
0212 #define BOXDRAW_VERTICAL_HORIZONTAL_DOUBLE  0x256a
0213 #define BOXDRAW_VERTICAL_DOUBLE_HORIZONTAL  0x256b
0214 #define BOXDRAW_DOUBLE_VERTICAL_HORIZONTAL  0x256c
0215 
0216 //
0217 // EFI Required Block Elements Code Chart
0218 //
0219 
0220 #define BLOCKELEMENT_FULL_BLOCK             0x2588
0221 #define BLOCKELEMENT_LIGHT_SHADE            0x2591
0222 //
0223 // EFI Required Geometric Shapes Code Chart
0224 //
0225 
0226 #define GEOMETRICSHAPE_UP_TRIANGLE           0x25b2
0227 #define GEOMETRICSHAPE_RIGHT_TRIANGLE        0x25ba
0228 #define GEOMETRICSHAPE_DOWN_TRIANGLE         0x25bc
0229 #define GEOMETRICSHAPE_LEFT_TRIANGLE         0x25c4
0230 
0231 //
0232 // EFI Required Arrow shapes
0233 //
0234 
0235 #define ARROW_UP                            0x2191
0236 #define ARROW_DOWN                          0x2193
0237 
0238 //
0239 // Text input protocol
0240 //
0241 
0242 #define SIMPLE_TEXT_INPUT_PROTOCOL \
0243     { 0x387477c1, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
0244 
0245 INTERFACE_DECL(_SIMPLE_INPUT_INTERFACE);
0246 
0247 typedef struct {
0248     UINT16                              ScanCode;
0249     CHAR16                              UnicodeChar;
0250 } EFI_INPUT_KEY;
0251 
0252 //
0253 // Baseline unicode control chars
0254 //
0255 
0256 #define CHAR_NULL                       0x0000
0257 #define CHAR_BACKSPACE                  0x0008
0258 #define CHAR_TAB                        0x0009
0259 #define CHAR_LINEFEED                   0x000A
0260 #define CHAR_CARRIAGE_RETURN            0x000D
0261 
0262 //
0263 // Scan codes for base line keys
0264 //
0265 
0266 #define SCAN_NULL       0x0000
0267 #define SCAN_UP         0x0001
0268 #define SCAN_DOWN       0x0002
0269 #define SCAN_RIGHT      0x0003
0270 #define SCAN_LEFT       0x0004
0271 #define SCAN_HOME       0x0005
0272 #define SCAN_END        0x0006
0273 #define SCAN_INSERT     0x0007
0274 #define SCAN_DELETE     0x0008
0275 #define SCAN_PAGE_UP        0x0009
0276 #define SCAN_PAGE_DOWN      0x000A
0277 #define SCAN_F1         0x000B
0278 #define SCAN_F2         0x000C
0279 #define SCAN_F3         0x000D
0280 #define SCAN_F4         0x000E
0281 #define SCAN_F5         0x000F
0282 #define SCAN_F6         0x0010
0283 #define SCAN_F7         0x0011
0284 #define SCAN_F8         0x0012
0285 #define SCAN_F9         0x0013
0286 #define SCAN_F10        0x0014
0287 #define SCAN_ESC        0x0017
0288 
0289 //
0290 // EFI Scan code Ex
0291 //
0292 #define SCAN_F11        0x0015
0293 #define SCAN_F12        0x0016
0294 #define SCAN_F13        0x0068
0295 #define SCAN_F14        0x0069
0296 #define SCAN_F15        0x006A
0297 #define SCAN_F16        0x006B
0298 #define SCAN_F17        0x006C
0299 #define SCAN_F18        0x006D
0300 #define SCAN_F19        0x006E
0301 #define SCAN_F20        0x006F
0302 #define SCAN_F21        0x0070
0303 #define SCAN_F22        0x0071
0304 #define SCAN_F23        0x0072
0305 #define SCAN_F24        0x0073
0306 #define SCAN_MUTE       0x007F
0307 #define SCAN_VOLUME_UP      0x0080
0308 #define SCAN_VOLUME_DOWN    0x0081
0309 #define SCAN_BRIGHTNESS_UP  0x0100
0310 #define SCAN_BRIGHTNESS_DOWN    0x0101
0311 #define SCAN_SUSPEND        0x0102
0312 #define SCAN_HIBERNATE      0x0103
0313 #define SCAN_TOGGLE_DISPLAY 0x0104
0314 #define SCAN_RECOVERY       0x0105
0315 #define SCAN_EJECT      0x0106
0316 
0317 typedef
0318 EFI_STATUS
0319 (EFIAPI *EFI_INPUT_RESET) (
0320     IN struct _SIMPLE_INPUT_INTERFACE   *This,
0321     IN BOOLEAN                          ExtendedVerification
0322     );
0323 
0324 typedef
0325 EFI_STATUS
0326 (EFIAPI *EFI_INPUT_READ_KEY) (
0327     IN struct _SIMPLE_INPUT_INTERFACE   *This,
0328     OUT EFI_INPUT_KEY                   *Key
0329     );
0330 
0331 typedef struct _SIMPLE_INPUT_INTERFACE {
0332     EFI_INPUT_RESET                     Reset;
0333     EFI_INPUT_READ_KEY                  ReadKeyStroke;
0334     EFI_EVENT                           WaitForKey;
0335 } SIMPLE_INPUT_INTERFACE;
0336 
0337 #define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID \
0338   {0xdd9e7534, 0x7762, 0x4698, {0x8c, 0x14, 0xf5, 0x85, \
0339   0x17, 0xa6, 0x25, 0xaa} }
0340 
0341 INTERFACE_DECL(_EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL);
0342 
0343 typedef UINT8          EFI_KEY_TOGGLE_STATE;
0344 //
0345 // Any Shift or Toggle State that is valid should have
0346 // high order bit set.
0347 //
0348 typedef struct EFI_KEY_STATE {
0349   UINT32               KeyShiftState;
0350   EFI_KEY_TOGGLE_STATE KeyToggleState;
0351 } EFI_KEY_STATE;
0352 
0353 typedef struct {
0354   EFI_INPUT_KEY        Key;
0355   EFI_KEY_STATE        KeyState;
0356 } EFI_KEY_DATA;
0357 
0358 //
0359 // Shift state
0360 //
0361 #define EFI_SHIFT_STATE_VALID     0x80000000
0362 #define EFI_RIGHT_SHIFT_PRESSED   0x00000001
0363 #define EFI_LEFT_SHIFT_PRESSED    0x00000002
0364 #define EFI_RIGHT_CONTROL_PRESSED 0x00000004
0365 #define EFI_LEFT_CONTROL_PRESSED  0x00000008
0366 #define EFI_RIGHT_ALT_PRESSED     0x00000010
0367 #define EFI_LEFT_ALT_PRESSED      0x00000020
0368 #define EFI_RIGHT_LOGO_PRESSED    0x00000040
0369 #define EFI_LEFT_LOGO_PRESSED     0x00000080
0370 #define EFI_MENU_KEY_PRESSED      0x00000100
0371 #define EFI_SYS_REQ_PRESSED       0x00000200
0372 
0373 //
0374 // Toggle state
0375 //
0376 #define EFI_TOGGLE_STATE_VALID    0x80
0377 #define EFI_KEY_STATE_EXPOSED     0x40
0378 #define EFI_SCROLL_LOCK_ACTIVE    0x01
0379 #define EFI_NUM_LOCK_ACTIVE       0x02
0380 #define EFI_CAPS_LOCK_ACTIVE      0x04
0381 
0382 //
0383 // EFI Key Notfication Function
0384 //
0385 typedef
0386 EFI_STATUS
0387 (EFIAPI *EFI_KEY_NOTIFY_FUNCTION) (
0388   IN  EFI_KEY_DATA                      *KeyData
0389   );
0390 
0391 typedef
0392 EFI_STATUS
0393 (EFIAPI *EFI_INPUT_RESET_EX) (
0394   IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL  *This,
0395   IN BOOLEAN                            ExtendedVerification
0396   )
0397 /*++
0398 
0399   Routine Description:
0400     Reset the input device and optionaly run diagnostics
0401 
0402   Arguments:
0403     This                  - Protocol instance pointer.
0404     ExtendedVerification  - Driver may perform diagnostics on reset.
0405 
0406   Returns:
0407     EFI_SUCCESS           - The device was reset.
0408     EFI_DEVICE_ERROR      - The device is not functioning properly and could
0409                             not be reset.
0410 
0411 --*/
0412 ;
0413 
0414 typedef
0415 EFI_STATUS
0416 (EFIAPI *EFI_INPUT_READ_KEY_EX) (
0417   IN  struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
0418   OUT EFI_KEY_DATA                      *KeyData
0419   )
0420 /*++
0421 
0422   Routine Description:
0423     Reads the next keystroke from the input device. The WaitForKey Event can
0424     be used to test for existence of a keystroke via WaitForEvent () call.
0425 
0426   Arguments:
0427     This       - Protocol instance pointer.
0428     KeyData    - A pointer to a buffer that is filled in with the keystroke
0429                  state data for the key that was pressed.
0430 
0431   Returns:
0432     EFI_SUCCESS           - The keystroke information was returned.
0433     EFI_NOT_READY         - There was no keystroke data availiable.
0434     EFI_DEVICE_ERROR      - The keystroke information was not returned due to
0435                             hardware errors.
0436     EFI_INVALID_PARAMETER - KeyData is NULL.
0437 --*/
0438 ;
0439 
0440 typedef
0441 EFI_STATUS
0442 (EFIAPI *EFI_SET_STATE) (
0443   IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL  *This,
0444   IN EFI_KEY_TOGGLE_STATE               *KeyToggleState
0445   )
0446 /*++
0447 
0448   Routine Description:
0449     Set certain state for the input device.
0450 
0451   Arguments:
0452     This              - Protocol instance pointer.
0453     KeyToggleState    - A pointer to the EFI_KEY_TOGGLE_STATE to set the
0454                         state for the input device.
0455 
0456   Returns:
0457     EFI_SUCCESS           - The device state was set successfully.
0458     EFI_DEVICE_ERROR      - The device is not functioning correctly and could
0459                             not have the setting adjusted.
0460     EFI_UNSUPPORTED       - The device does not have the ability to set its state.
0461     EFI_INVALID_PARAMETER - KeyToggleState is NULL.
0462 
0463 --*/
0464 ;
0465 
0466 typedef
0467 EFI_STATUS
0468 (EFIAPI *EFI_REGISTER_KEYSTROKE_NOTIFY) (
0469   IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL  *This,
0470   IN EFI_KEY_DATA                       *KeyData,
0471   IN EFI_KEY_NOTIFY_FUNCTION            KeyNotificationFunction,
0472   OUT EFI_HANDLE                        *NotifyHandle
0473   )
0474 /*++
0475 
0476   Routine Description:
0477     Register a notification function for a particular keystroke for the input device.
0478 
0479   Arguments:
0480     This                    - Protocol instance pointer.
0481     KeyData                 - A pointer to a buffer that is filled in with the keystroke
0482                               information data for the key that was pressed.
0483     KeyNotificationFunction - Points to the function to be called when the key
0484                               sequence is typed specified by KeyData.
0485     NotifyHandle            - Points to the unique handle assigned to the registered notification.
0486 
0487   Returns:
0488     EFI_SUCCESS             - The notification function was registered successfully.
0489     EFI_OUT_OF_RESOURCES    - Unable to allocate resources for necesssary data structures.
0490     EFI_INVALID_PARAMETER   - KeyData or NotifyHandle is NULL.
0491 
0492 --*/
0493 ;
0494 
0495 typedef
0496 EFI_STATUS
0497 (EFIAPI *EFI_UNREGISTER_KEYSTROKE_NOTIFY) (
0498   IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL  *This,
0499   IN EFI_HANDLE                         NotificationHandle
0500   )
0501 /*++
0502 
0503   Routine Description:
0504     Remove a registered notification function from a particular keystroke.
0505 
0506   Arguments:
0507     This                    - Protocol instance pointer.
0508     NotificationHandle      - The handle of the notification function being unregistered.
0509 
0510   Returns:
0511     EFI_SUCCESS             - The notification function was unregistered successfully.
0512     EFI_INVALID_PARAMETER   - The NotificationHandle is invalid.
0513     EFI_NOT_FOUND           - Can not find the matching entry in database.
0514 
0515 --*/
0516 ;
0517 
0518 typedef struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL {
0519   EFI_INPUT_RESET_EX                    Reset;
0520   EFI_INPUT_READ_KEY_EX                 ReadKeyStrokeEx;
0521   EFI_EVENT                             WaitForKeyEx;
0522   EFI_SET_STATE                         SetState;
0523   EFI_REGISTER_KEYSTROKE_NOTIFY         RegisterKeyNotify;
0524   EFI_UNREGISTER_KEYSTROKE_NOTIFY       UnregisterKeyNotify;
0525 } EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL;
0526 
0527 #endif