diff -uNr elilo-3.6-orig/efi110/efiConsoleControl.h elilo-3.6/efi110/efiConsoleControl.h --- elilo-3.6-orig/efi110/efiConsoleControl.h 1970-01-01 01:00:00.000000000 +0100 +++ elilo-3.6/efi110/efiConsoleControl.h 2006-04-30 18:02:51.000000000 +0100 @@ -0,0 +1,122 @@ +/*++ + +Copyright (c) 2004, Intel Corporation +All rights reserved. This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +Module Name: + +ConsoleControl.h + +Abstract: + +Abstraction of a Text mode or UGA screen + +--*/ + +#ifndef __CONSOLE_CONTROL_H__ +#define __CONSOLE_CONTROL_H__ + +#define EFI_CONSOLE_CONTROL_PROTOCOL_GUID \ +{ 0xf42f7782, 0x12e, 0x4c12, { 0x99, 0x56, 0x49, 0xf9, 0x43, 0x4, 0xf7, 0x21 } } + +/* typedef struct _EFI_CONSOLE_CONTROL_PROTOCOL EFI_CONSOLE_CONTROL_PROTOCOL; */ +struct _EFI_CONSOLE_CONTROL_PROTOCOL; + + +typedef enum { + EfiConsoleControlScreenText, + EfiConsoleControlScreenGraphics, + EfiConsoleControlScreenMaxValue +} EFI_CONSOLE_CONTROL_SCREEN_MODE; + + +typedef +EFI_STATUS +(EFIAPI *EFI_CONSOLE_CONTROL_PROTOCOL_GET_MODE) ( + IN struct _EFI_CONSOLE_CONTROL_PROTOCOL *This, + OUT EFI_CONSOLE_CONTROL_SCREEN_MODE *Mode, + OUT BOOLEAN *UgaExists, OPTIONAL + OUT BOOLEAN *StdInLocked OPTIONAL + ) +/*++ + +Routine Description: +Return the current video mode information. Also returns info about existence +of UGA Draw devices in system, and if the Std In device is locked. All the +arguments are optional and only returned if a non NULL pointer is passed in. + +Arguments: +This - Protocol instance pointer. +Mode - Are we in text of grahics mode. +UgaExists - TRUE if UGA Spliter has found a UGA device +StdInLocked - TRUE if StdIn device is keyboard locked + +Returns: +EFI_SUCCESS - Mode information returned. + +--*/ +; + + +typedef +EFI_STATUS +(EFIAPI *EFI_CONSOLE_CONTROL_PROTOCOL_SET_MODE) ( + IN struct _EFI_CONSOLE_CONTROL_PROTOCOL *This, + OUT EFI_CONSOLE_CONTROL_SCREEN_MODE Mode + ) +/*++ + +Routine Description: +Set the current mode to either text or graphics. Graphics is +for Quiet Boot. + +Arguments: +This - Protocol instance pointer. +Mode - Mode to set the + +Returns: +EFI_SUCCESS - Mode information returned. + +--*/ +; + + +typedef +EFI_STATUS +(EFIAPI *EFI_CONSOLE_CONTROL_PROTOCOL_LOCK_STD_IN) ( + IN struct _EFI_CONSOLE_CONTROL_PROTOCOL *This, + IN CHAR16 *Password + ) +/*++ + +Routine Description: +Lock Std In devices until Password is typed. + +Arguments: +This - Protocol instance pointer. +Password - Password needed to unlock screen. NULL means unlock keyboard + +Returns: +EFI_SUCCESS - Mode information returned. +EFI_DEVICE_ERROR - Std In not locked + +--*/ +; + + + +typedef struct _EFI_CONSOLE_CONTROL_PROTOCOL { + EFI_CONSOLE_CONTROL_PROTOCOL_GET_MODE GetMode; + EFI_CONSOLE_CONTROL_PROTOCOL_SET_MODE SetMode; + EFI_CONSOLE_CONTROL_PROTOCOL_LOCK_STD_IN LockStdIn; +} EFI_CONSOLE_CONTROL_PROTOCOL; + +extern EFI_GUID gEfiConsoleControlProtocolGuid; + +#endif diff -uNr elilo-3.6-orig/efi110/efiUgaDraw.h elilo-3.6/efi110/efiUgaDraw.h --- elilo-3.6-orig/efi110/efiUgaDraw.h 1970-01-01 01:00:00.000000000 +0100 +++ elilo-3.6/efi110/efiUgaDraw.h 2006-04-30 18:02:51.000000000 +0100 @@ -0,0 +1,182 @@ +/*++ + +Copyright (c) 2004, Intel Corporation +All rights reserved. This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +Module Name: + +UgaDraw.h + +Abstract: + +UGA Draw protocol from the EFI 1.1 specification. + +Abstraction of a very simple graphics device. + +--*/ + +#ifndef __UGA_DRAW_H__ +#define __UGA_DRAW_H__ + +#define EFI_UGA_DRAW_PROTOCOL_GUID \ +{ \ + 0x982c298b, 0xf4fa, 0x41cb, { 0xb8, 0x38, 0x77, 0xaa, 0x68, 0x8f, 0xb8, 0x39 } \ +} + +/* typedef struct _EFI_UGA_DRAW_PROTOCOL EFI_UGA_DRAW_PROTOCOL; */ +struct _EFI_UGA_DRAW_PROTOCOL; + +typedef +EFI_STATUS +(EFIAPI *EFI_UGA_DRAW_PROTOCOL_GET_MODE) ( + IN struct _EFI_UGA_DRAW_PROTOCOL * This, + OUT UINT32 *HorizontalResolution, + OUT UINT32 *VerticalResolution, + OUT UINT32 *ColorDepth, + OUT UINT32 *RefreshRate + ) +/*++ + +Routine Description: +Return the current video mode information. + +Arguments: +This - Protocol instance pointer. +HorizontalResolution - Current video horizontal resolution in pixels +VerticalResolution - Current video vertical resolution in pixels +ColorDepth - Current video color depth in bits per pixel +RefreshRate - Current video refresh rate in Hz. + +Returns: +EFI_SUCCESS - Mode information returned. +EFI_NOT_STARTED - Video display is not initialized. Call SetMode () +EFI_INVALID_PARAMETER - One of the input args was NULL. + +--*/ +; + +typedef +EFI_STATUS +(EFIAPI *EFI_UGA_DRAW_PROTOCOL_SET_MODE) ( + IN struct _EFI_UGA_DRAW_PROTOCOL * This, + IN UINT32 HorizontalResolution, + IN UINT32 VerticalResolution, + IN UINT32 ColorDepth, + IN UINT32 RefreshRate + ) +/*++ + +Routine Description: +Return the current video mode information. + +Arguments: +This - Protocol instance pointer. +HorizontalResolution - Current video horizontal resolution in pixels +VerticalResolution - Current video vertical resolution in pixels +ColorDepth - Current video color depth in bits per pixel +RefreshRate - Current video refresh rate in Hz. + +Returns: +EFI_SUCCESS - Mode information returned. +EFI_NOT_STARTED - Video display is not initialized. Call SetMode () + +--*/ +; + +typedef struct { + UINT8 Blue; + UINT8 Green; + UINT8 Red; + UINT8 Reserved; +} EFI_UGA_PIXEL; + +typedef union { + EFI_UGA_PIXEL Pixel; + UINT32 Raw; +} EFI_UGA_PIXEL_UNION; + +typedef enum { + EfiUgaVideoFill, + EfiUgaVideoToBltBuffer, + EfiUgaBltBufferToVideo, + EfiUgaVideoToVideo, + EfiUgaBltMax +} EFI_UGA_BLT_OPERATION; + +typedef +EFI_STATUS +(EFIAPI *EFI_UGA_DRAW_PROTOCOL_BLT) ( + IN struct _EFI_UGA_DRAW_PROTOCOL * This, + IN EFI_UGA_PIXEL * BltBuffer, OPTIONAL + IN EFI_UGA_BLT_OPERATION BltOperation, + IN UINTN SourceX, + IN UINTN SourceY, + IN UINTN DestinationX, + IN UINTN DestinationY, + IN UINTN Width, + IN UINTN Height, + IN UINTN Delta OPTIONAL + ); + +/*++ + +Routine Description: +The following table defines actions for BltOperations: +EfiUgaVideoFill - Write data from the BltBuffer pixel (SourceX, SourceY) +directly to every pixel of the video display rectangle +(DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height). +Only one pixel will be used from the BltBuffer. Delta is NOT used. +EfiUgaVideoToBltBuffer - Read data from the video display rectangle +(SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in +the BltBuffer rectangle (DestinationX, DestinationY ) +(DestinationX + Width, DestinationY + Height). If DestinationX or +DestinationY is not zero then Delta must be set to the length in bytes +of a row in the BltBuffer. +EfiUgaBltBufferToVideo - Write data from the BltBuffer rectangle +(SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the +video display rectangle (DestinationX, DestinationY) +(DestinationX + Width, DestinationY + Height). If SourceX or SourceY is +not zero then Delta must be set to the length in bytes of a row in the +BltBuffer. +EfiUgaVideoToVideo - Copy from the video display rectangle (SourceX, SourceY) +(SourceX + Width, SourceY + Height) .to the video display rectangle +(DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height). +The BltBuffer and Delta are not used in this mode. + +Arguments: +This - Protocol instance pointer. +BltBuffer - Buffer containing data to blit into video buffer. This +buffer has a size of Width*Height*sizeof(EFI_UGA_PIXEL) +BltOperation - Operation to perform on BlitBuffer and video memory +SourceX - X coordinate of source for the BltBuffer. +SourceY - Y coordinate of source for the BltBuffer. +DestinationX - X coordinate of destination for the BltBuffer. +DestinationY - Y coordinate of destination for the BltBuffer. +Width - Width of rectangle in BltBuffer in pixels. +Height - Hight of rectangle in BltBuffer in pixels. +Delta - + +Returns: +EFI_SUCCESS - The Blt operation completed. +EFI_INVALID_PARAMETER - BltOperation is not valid. +EFI_DEVICE_ERROR - A hardware error occured writting to the video +buffer. + +--*/ +; + +typedef struct _EFI_UGA_DRAW_PROTOCOL { + EFI_UGA_DRAW_PROTOCOL_GET_MODE GetMode; + EFI_UGA_DRAW_PROTOCOL_SET_MODE SetMode; + EFI_UGA_DRAW_PROTOCOL_BLT Blt; +} EFI_UGA_DRAW_PROTOCOL; + +extern EFI_GUID gEfiUgaDrawProtocolGuid; + +#endif --- elilo-3.6-orig/elilo.c 2006-05-28 15:54:55.000000000 +0100 +++ elilo-3.6/elilo.c 2006-05-28 15:56:03.000000000 +0100 @@ -31,6 +31,7 @@ #include #include +#include #include "elilo.h" #include "vars.h" @@ -444,6 +445,16 @@ /* initialize memory allocator */ if (alloc_init() == -1) return EFI_LOAD_ERROR; + { + EFI_GUID console_guid = EFI_CONSOLE_CONTROL_PROTOCOL_GUID; + EFI_CONSOLE_CONTROL_PROTOCOL *cons; + EFI_CONSOLE_CONTROL_SCREEN_MODE mode; + if (EFI_SUCCESS == LibLocateProtocol(&console_guid, (VOID**)&cons)) { + cons->GetMode(cons, &mode, NULL, NULL); + cons->SetMode(cons, EfiConsoleControlScreenText); + } + } + status = BS->HandleProtocol(image, &LoadedImageProtocol, (VOID **) &info); if (EFI_ERROR(status)) { ERR_PRT((L"image handle does not support LOADED_IMAGE protocol"));