-/*++\r
+/**@file\r
+ This driver produces a VGA console.\r
+\r
+Copyright (c) 2006, Intel Corporation \r
+All rights reserved. This program and the accompanying materials \r
+are licensed and made available under the terms and conditions of the BSD License \r
+which accompanies this distribution. The full text of the license may be found at \r
+http://opensource.org/licenses/bsd-license.php \r
+ \r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
\r
-Copyright (c) 2006, Intel Corporation. All rights reserved. <BR> \r
-This software and associated documentation (if any) is furnished\r
-under a license and may only be used or copied in accordance\r
-with the terms of the license. Except as permitted by such\r
-license, no part of this software or documentation may be\r
-reproduced, stored in a retrieval system, or transmitted in any\r
-form or by any means without the express written consent of\r
-Intel Corporation.\r
-\r
-\r
-Module Name:\r
-\r
- VgaClass.c\r
- \r
-Abstract: \r
- This driver produces a VGA console.\r
- \r
---*/\r
+**/\r
\r
#include "VgaClass.h"\r
\r
//\r
// Install driver model protocol(s).\r
//\r
- Status = EfiLibInstallAllDriverProtocols (\r
+ Status = EfiLibInstallDriverBindingComponentName2 (\r
ImageHandle,\r
SystemTable,\r
&gVgaClassDriverBinding,\r
ImageHandle,\r
&gVgaClassComponentName,\r
- NULL,\r
- NULL\r
+ &gVgaClassComponentName2\r
);\r
ASSERT_EFI_ERROR (Status);\r
\r
//\r
// Local variables\r
//\r
-static CHAR16 CrLfString[3] = { CHAR_CARRIAGE_RETURN, CHAR_LINEFEED, CHAR_NULL };\r
+CHAR16 CrLfString[3] = { CHAR_CARRIAGE_RETURN, CHAR_LINEFEED, CHAR_NULL };\r
\r
typedef struct {\r
CHAR16 Unicode;\r
// ASCII. The ASCII mapping we just made up.\r
//\r
//\r
-STATIC UNICODE_TO_CHAR UnicodeToPcAnsiOrAscii[] = {\r
+UNICODE_TO_CHAR UnicodeToPcAnsiOrAscii[] = {\r
{\r
BOXDRAW_HORIZONTAL,\r
0xc4,\r
//\r
// Private worker functions\r
//\r
-STATIC\r
VOID\r
SetVideoCursorPosition (\r
IN VGA_CLASS_DEV *VgaClassDev,\r
IN UINTN MaxColumn\r
);\r
\r
-STATIC\r
VOID\r
WriteCrtc (\r
IN VGA_CLASS_DEV *VgaClassDev,\r
IN UINT8 Data\r
);\r
\r
-STATIC\r
BOOLEAN\r
LibIsValidTextGraphics (\r
IN CHAR16 Graphic,\r
OUT CHAR8 *Ascii OPTIONAL\r
);\r
\r
-STATIC\r
BOOLEAN\r
IsValidAscii (\r
IN CHAR16 Ascii\r
);\r
\r
-STATIC\r
BOOLEAN\r
IsValidEfiCntlChar (\r
IN CHAR16 c\r
);\r
\r
+/**\r
+ Test to see if this driver supports ControllerHandle. Any ControllerHandle\r
+ than contains a VgaMiniPort and PciIo protocol can be supported.\r
+\r
+ @param This Protocol instance pointer.\r
+ @param ControllerHandle Handle of device to test\r
+ @param RemainingDevicePath Optional parameter use to pick a specific child\r
+ device to start.\r
+\r
+ @retval EFI_SUCCESS This driver supports this device\r
+ @retval EFI_ALREADY_STARTED This driver is already running on this device\r
+ @retval other This driver does not support this device\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
VgaClassDriverBindingSupported (\r
IN EFI_HANDLE Controller,\r
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
)\r
-/*++\r
- \r
- Routine Description:\r
- \r
- Supported.\r
- \r
- Arguments:\r
- \r
- (Standard DriverBinding Protocol Supported() function)\r
- \r
- Returns:\r
- \r
- EFI_STATUS\r
- \r
---*/\r
-// GC_TODO: This - add argument and description to function comment\r
-// GC_TODO: Controller - add argument and description to function comment\r
-// GC_TODO: RemainingDevicePath - add argument and description to function comment\r
{\r
EFI_STATUS Status;\r
EFI_VGA_MINI_PORT_PROTOCOL *VgaMiniPort;\r
return Status;\r
}\r
\r
+/**\r
+ Start this driver on ControllerHandle by opening a PciIo and VgaMiniPort\r
+ protocol, creating VGA_CLASS_DEV device and install gEfiSimpleTextOutProtocolGuid\r
+ finnally.\r
+\r
+ @param This Protocol instance pointer.\r
+ @param ControllerHandle Handle of device to bind driver to\r
+ @param RemainingDevicePath Optional parameter use to pick a specific child\r
+ device to start.\r
+\r
+ @retval EFI_SUCCESS This driver is added to ControllerHandle\r
+ @retval EFI_ALREADY_STARTED This driver is already running on ControllerHandle\r
+ @retval other This driver does not support this device\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
VgaClassDriverBindingStart (\r
IN EFI_HANDLE Controller,\r
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
)\r
-/*++\r
- \r
- Routine Description:\r
- \r
- Layers the Simple Text Output Protocol on top of the \r
- VGA Mini Port Protocol\r
- \r
- Arguments:\r
- \r
- (Standard DriverBinding Protocol Start() function)\r
- \r
- Returns:\r
- \r
- EFI_STATUS\r
- \r
---*/\r
-// GC_TODO: This - add argument and description to function comment\r
-// GC_TODO: Controller - add argument and description to function comment\r
-// GC_TODO: RemainingDevicePath - add argument and description to function comment\r
-// GC_TODO: EFI_OUT_OF_RESOURCES - add return value to function comment\r
{\r
EFI_STATUS Status;\r
EFI_VGA_MINI_PORT_PROTOCOL *VgaMiniPort;\r
\r
}\r
\r
+/**\r
+ Stop this driver on ControllerHandle. Support stoping any child handles\r
+ created by this driver.\r
+\r
+ @param This Protocol instance pointer.\r
+ @param ControllerHandle Handle of device to stop driver on\r
+ @param NumberOfChildren Number of Handles in ChildHandleBuffer. If number of\r
+ children is zero stop the entire bus driver.\r
+ @param ChildHandleBuffer List of Child Handles to Stop.\r
+\r
+ @retval EFI_SUCCESS This driver is removed ControllerHandle\r
+ @retval other This driver was not removed from this device\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
VgaClassDriverBindingStop (\r
IN UINTN NumberOfChildren,\r
IN EFI_HANDLE *ChildHandleBuffer\r
)\r
-/*++\r
- \r
- Routine Description:\r
- \r
- Stop.\r
- \r
- Arguments:\r
- \r
- (Standard DriverBinding Protocol Stop() function)\r
- \r
- Returns:\r
- \r
- EFI_STATUS\r
- \r
---*/\r
-// GC_TODO: This - add argument and description to function comment\r
-// GC_TODO: Controller - add argument and description to function comment\r
-// GC_TODO: NumberOfChildren - add argument and description to function comment\r
-// GC_TODO: ChildHandleBuffer - add argument and description to function comment\r
-// GC_TODO: EFI_SUCCESS - add return value to function comment\r
{\r
EFI_STATUS Status;\r
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *SimpleTextOut;\r
\r
return EFI_SUCCESS;\r
}\r
-//\r
-// Simple Text Output Protocol Functions\r
-//\r
+\r
+/**\r
+ Reset VgaClass device and clear output.\r
+ \r
+ @param This Pointer to EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.\r
+ @param ExtendedVerification Whether need additional judgement\r
+**/\r
EFI_STATUS\r
EFIAPI\r
VgaClassReset (\r
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
IN BOOLEAN ExtendedVerification\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- GC_TODO: Add function description\r
-\r
-Arguments:\r
-\r
- This - GC_TODO: add argument description\r
- ExtendedVerification - GC_TODO: add argument description\r
-\r
-Returns:\r
-\r
- GC_TODO: add return values\r
-\r
---*/\r
{\r
EFI_STATUS Status;\r
VGA_CLASS_DEV *VgaClassPrivate;\r
return This->ClearScreen (This);\r
}\r
\r
+/**\r
+ Output a string to VgaClass device.\r
+ \r
+ @param This Pointer to EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.\r
+ @param WString wide chars.\r
+**/\r
EFI_STATUS\r
EFIAPI\r
VgaClassOutputString (\r
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
IN CHAR16 *WString\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- GC_TODO: Add function description\r
-\r
-Arguments:\r
-\r
- This - GC_TODO: add argument description\r
- WString - GC_TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - GC_TODO: Add description for return value\r
-\r
---*/\r
{\r
EFI_STATUS Status;\r
VGA_CLASS_DEV *VgaClassDev;\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ Detects if a Unicode char is for Box Drawing text graphics.\r
+ \r
+ @param This Pointer of EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL\r
+ @param WString Unicode chars\r
+ \r
+ @return if a Unicode char is for Box Drawing text graphics.\r
+**/\r
EFI_STATUS\r
EFIAPI\r
VgaClassTestString (\r
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
IN CHAR16 *WString\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- GC_TODO: Add function description\r
-\r
-Arguments:\r
-\r
- This - GC_TODO: add argument description\r
- WString - GC_TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_UNSUPPORTED - GC_TODO: Add description for return value\r
- EFI_SUCCESS - GC_TODO: Add description for return value\r
-\r
---*/\r
{\r
while (*WString != 0x0000) {\r
if (!(IsValidAscii (*WString) || IsValidEfiCntlChar (*WString) || LibIsValidTextGraphics (*WString, NULL, NULL))) {\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ Clear Screen via VgaClass device\r
+ \r
+ @param This Pointer of EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL \r
+ \r
+ @retval EFI_SUCESS Success to clear screen\r
+ @retval Others Wrong displaying mode.\r
+**/\r
EFI_STATUS\r
EFIAPI\r
VgaClassClearScreen (\r
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- GC_TODO: Add function description\r
-\r
-Arguments:\r
-\r
- This - GC_TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - GC_TODO: Add description for return value\r
-\r
---*/\r
{\r
EFI_STATUS Status;\r
VGA_CLASS_DEV *VgaClassDev;\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ Set displaying mode's attribute\r
+ \r
+ @param This Pointer of EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL \r
+ @param Attribute Mode's attribute\r
+ \r
+ @param EFI_SUCCESS Success to set attribute\r
+ @param EFI_UNSUPPORTED Wrong mode's attribute wanted to be set\r
+**/\r
EFI_STATUS\r
EFIAPI\r
VgaClassSetAttribute (\r
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
IN UINTN Attribute\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- GC_TODO: Add function description\r
-\r
-Arguments:\r
-\r
- This - GC_TODO: add argument description\r
- Attribute - GC_TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - GC_TODO: Add description for return value\r
- EFI_UNSUPPORTED - GC_TODO: Add description for return value\r
-\r
---*/\r
{\r
if (Attribute <= EFI_MAX_ATTRIBUTE) {\r
This->Mode->Attribute = (INT32) Attribute;\r
return EFI_UNSUPPORTED;\r
}\r
\r
+/**\r
+ Set cursor position.\r
+ \r
+ @param This Pointer of EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL \r
+ @param Column Column of new cursor position.\r
+ @param Row Row of new cursor position.\r
+ \r
+ @retval EFI_SUCCESS Sucess to set cursor's position.\r
+ @retval Others Wrong current displaying mode.\r
+**/\r
EFI_STATUS\r
EFIAPI\r
VgaClassSetCursorPosition (\r
IN UINTN Column,\r
IN UINTN Row\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- GC_TODO: Add function description\r
-\r
-Arguments:\r
-\r
- This - GC_TODO: add argument description\r
- Column - GC_TODO: add argument description\r
- Row - GC_TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_UNSUPPORTED - GC_TODO: Add description for return value\r
- EFI_SUCCESS - GC_TODO: Add description for return value\r
-\r
---*/\r
{\r
EFI_STATUS Status;\r
VGA_CLASS_DEV *VgaClassDev;\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ Enable cursor to display or not.\r
+ \r
+ @param This Pointer of EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL \r
+ @param Visible Display cursor or not.\r
+ \r
+ @retval EFI_SUCESS Success to display the cursor or not.\r
+**/\r
EFI_STATUS\r
EFIAPI\r
VgaClassEnableCursor (\r
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
IN BOOLEAN Visible\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- GC_TODO: Add function description\r
-\r
-Arguments:\r
-\r
- This - GC_TODO: add argument description\r
- Visible - GC_TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - GC_TODO: Add description for return value\r
-\r
---*/\r
{\r
VGA_CLASS_DEV *VgaClassDev;\r
\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ Query colum and row according displaying mode number\r
+ The mode:\r
+ 0: 80 * 25\r
+ 1: 80 * 50\r
+ \r
+ @param This Pointer of EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL\r
+ @param ModeNumber Mode number\r
+ @param Columns return the columen in current mode number\r
+ @param Rows return the row in current mode number.\r
+ \r
+ @return EFI_SUCCESS Sucess to get columns and rows according to mode number\r
+ @return EFI_UNSUPPORTED Unsupported mode number\r
+**/\r
EFI_STATUS\r
EFIAPI\r
VgaClassQueryMode (\r
OUT UINTN *Columns,\r
OUT UINTN *Rows\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- GC_TODO: Add function description\r
-\r
-Arguments:\r
-\r
- This - GC_TODO: add argument description\r
- ModeNumber - GC_TODO: add argument description\r
- Columns - GC_TODO: add argument description\r
- Rows - GC_TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_UNSUPPORTED - GC_TODO: Add description for return value\r
- EFI_UNSUPPORTED - GC_TODO: Add description for return value\r
- EFI_SUCCESS - GC_TODO: Add description for return value\r
-\r
---*/\r
{\r
if ((INT32) ModeNumber >= This->Mode->MaxMode) {\r
*Columns = 0;\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ Set displaying mode number\r
+ \r
+ @param This Pointer of EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL\r
+ @param ModeNumber mode number\r
+ \r
+ @retval EFI_UNSUPPORTED Unsupported mode number in parameter\r
+ @retval EFI_SUCCESS Success to set the mode number.\r
+**/\r
EFI_STATUS\r
EFIAPI\r
VgaClassSetMode (\r
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
IN UINTN ModeNumber\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- GC_TODO: Add function description\r
-\r
-Arguments:\r
-\r
- This - GC_TODO: add argument description\r
- ModeNumber - GC_TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_UNSUPPORTED - GC_TODO: Add description for return value\r
-\r
---*/\r
{\r
EFI_STATUS Status;\r
VGA_CLASS_DEV *VgaClassDev;\r
\r
return Status;\r
}\r
-//\r
-// Private Worker Functions\r
-//\r
-STATIC\r
+\r
+/**\r
+ Set logic cursor's position to VgaClass device\r
+ \r
+ @param VgaClassDev device instance object\r
+ @param Column cursor logic position.\r
+ @param Row cursor logic position.\r
+ @param MaxColumn max logic column\r
+ \r
+**/\r
VOID\r
SetVideoCursorPosition (\r
IN VGA_CLASS_DEV *VgaClassDev,\r
IN UINTN Row,\r
IN UINTN MaxColumn\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- GC_TODO: Add function description\r
-\r
-Arguments:\r
-\r
- VgaClassDev - GC_TODO: add argument description\r
- Column - GC_TODO: add argument description\r
- Row - GC_TODO: add argument description\r
- MaxColumn - GC_TODO: add argument description\r
-\r
-Returns:\r
-\r
- GC_TODO: add return values\r
-\r
---*/\r
{\r
Column = Column & 0xff;\r
Row = Row & 0xff;\r
);\r
}\r
\r
-STATIC\r
+/**\r
+ Program CRTC register via PCI IO.\r
+ \r
+ @param VgaClassDev device instance object\r
+ @param Address address\r
+ @param Data data\r
+**/\r
VOID\r
WriteCrtc (\r
IN VGA_CLASS_DEV *VgaClassDev,\r
IN UINT16 Address,\r
IN UINT8 Data\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- GC_TODO: Add function description\r
-\r
-Arguments:\r
-\r
- VgaClassDev - GC_TODO: add argument description\r
- Address - GC_TODO: add argument description\r
- Data - GC_TODO: add argument description\r
-\r
-Returns:\r
-\r
- GC_TODO: add return values\r
-\r
---*/\r
{\r
VgaClassDev->PciIo->Io.Write (\r
VgaClassDev->PciIo,\r
);\r
}\r
\r
-STATIC\r
+/**\r
+ Detects if a Unicode char is for Box Drawing text graphics.\r
+\r
+ @param Grphic Unicode char to test.\r
+ @param PcAnsi Optional pointer to return PCANSI equivalent of Graphic.\r
+ @param Asci Optional pointer to return Ascii equivalent of Graphic.\r
+\r
+ @return TRUE if Gpaphic is a supported Unicode Box Drawing character.\r
+\r
+**/\r
BOOLEAN\r
LibIsValidTextGraphics (\r
IN CHAR16 Graphic,\r
OUT CHAR8 *PcAnsi, OPTIONAL\r
OUT CHAR8 *Ascii OPTIONAL\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Detects if a Unicode char is for Box Drawing text graphics.\r
-\r
-Arguments:\r
-\r
- Grphic - Unicode char to test.\r
-\r
- PcAnsi - Optional pointer to return PCANSI equivalent of Graphic.\r
-\r
- Asci - Optional pointer to return Ascii equivalent of Graphic.\r
-\r
-Returns:\r
-\r
- TRUE if Gpaphic is a supported Unicode Box Drawing character.\r
-\r
---*/\r
-// GC_TODO: Graphic - add argument and description to function comment\r
{\r
UNICODE_TO_CHAR *Table;\r
\r
return FALSE;\r
}\r
\r
-STATIC\r
+/**\r
+ Judge whether is an ASCII char.\r
+ \r
+ @param Ascii character\r
+ @return whether is an ASCII char.\r
+**/\r
BOOLEAN\r
IsValidAscii (\r
IN CHAR16 Ascii\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- GC_TODO: Add function description\r
-\r
-Arguments:\r
-\r
- Ascii - GC_TODO: add argument description\r
-\r
-Returns:\r
-\r
- GC_TODO: add return values\r
-\r
---*/\r
{\r
if ((Ascii >= 0x20) && (Ascii <= 0x7f)) {\r
return TRUE;\r
return FALSE;\r
}\r
\r
-STATIC\r
+/**\r
+ Judge whether is diplaying control character.\r
+ \r
+ @param c character\r
+ @return whether is diplaying control character.\r
+**/\r
BOOLEAN\r
IsValidEfiCntlChar (\r
IN CHAR16 c\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- GC_TODO: Add function description\r
-\r
-Arguments:\r
-\r
- c - GC_TODO: add argument description\r
-\r
-Returns:\r
-\r
- GC_TODO: add return values\r
-\r
---*/\r
{\r
if (c == CHAR_NULL || c == CHAR_BACKSPACE || c == CHAR_LINEFEED || c == CHAR_CARRIAGE_RETURN) {\r
return TRUE;\r
\r
return FALSE;\r
}\r
+\r