-/** @file
-
-Copyright (c) 2006 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.
-
-**/
-
-#include "VgaMiniPort.h"
-
-//
-// EFI Driver Binding Protocol Instance
-//
-// This driver has a version value of 0x00000000. This is the
-// lowest possible priority for a driver. This is done on purpose to help
-// the developers of UGA drivers. This driver can bind if no UGA driver
-// is present, so a console is available. Then, when a UGA driver is loaded
-// this driver can be disconnected, and the UGA driver can be connected.
-// As long as the UGA driver has a version value greater than 0x00000000, it
-// will be connected first and will block this driver from connecting.
-//
-EFI_DRIVER_BINDING_PROTOCOL gPciVgaMiniPortDriverBinding = {
- PciVgaMiniPortDriverBindingSupported,
- PciVgaMiniPortDriverBindingStart,
- PciVgaMiniPortDriverBindingStop,
- 0x00000000,
- NULL,
- NULL
-};
-
-//
-// Driver Entry Point
-//
-EFI_STATUS
-EFIAPI
-PciVgaMiniPortDriverEntryPoint (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-/*++
-
- Routine Description:
- Driver Entry Point.
-
- Arguments:
- (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)
-
- Returns:
- EFI_STATUS
---*/
-{
- return EfiLibInstallAllDriverProtocols (
- ImageHandle,
- SystemTable,
- &gPciVgaMiniPortDriverBinding,
- ImageHandle,
- &gPciVgaMiniPortComponentName,
- NULL,
- NULL
- );
-}
-
-
-/**
- Supported.
-
- (Standard DriverBinding Protocol Supported() function)
-
- @return EFI_STATUS
-
-**/
-EFI_STATUS
-EFIAPI
-PciVgaMiniPortDriverBindingSupported (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
- )
-{
- EFI_STATUS Status;
- EFI_PCI_IO_PROTOCOL *PciIo;
- PCI_TYPE00 Pci;
-
- //
- // Open the IO Abstraction(s) needed to perform the supported test
- //
- Status = gBS->OpenProtocol (
- Controller,
- &gEfiPciIoProtocolGuid,
- (VOID **) &PciIo,
- This->DriverBindingHandle,
- Controller,
- EFI_OPEN_PROTOCOL_BY_DRIVER
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
- //
- // See if this is a PCI VGA Controller by looking at the Command register and
- // Class Code Register
- //
- Status = PciIo->Pci.Read (
- PciIo,
- EfiPciIoWidthUint32,
- 0,
- sizeof (Pci) / sizeof (UINT32),
- &Pci
- );
- if (EFI_ERROR (Status)) {
- goto Done;
- }
-
- Status = EFI_UNSUPPORTED;
- //
- // See if the device is an enabled VGA device.
- // Most systems can only have on VGA device on at a time.
- //
- if (((Pci.Hdr.Command & 0x03) == 0x03) && IS_PCI_VGA (&Pci)) {
- Status = EFI_SUCCESS;
- }
-
-Done:
- gBS->CloseProtocol (
- Controller,
- &gEfiPciIoProtocolGuid,
- This->DriverBindingHandle,
- Controller
- );
-
- return Status;
-}
-
-
-/**
- Install VGA Mini Port Protocol onto VGA device handles
-
- (Standard DriverBinding Protocol Start() function)
-
- @return EFI_STATUS
-
-**/
-EFI_STATUS
-EFIAPI
-PciVgaMiniPortDriverBindingStart (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
- )
-{
- EFI_STATUS Status;
- EFI_PCI_IO_PROTOCOL *PciIo;
- PCI_VGA_MINI_PORT_DEV *PciVgaMiniPortPrivate;
-
- PciVgaMiniPortPrivate = NULL;
- PciIo = NULL;
- //
- // Open the IO Abstraction(s) needed
- //
- Status = gBS->OpenProtocol (
- Controller,
- &gEfiPciIoProtocolGuid,
- (VOID **) &PciIo,
- This->DriverBindingHandle,
- Controller,
- EFI_OPEN_PROTOCOL_BY_DRIVER
- );
- if (EFI_ERROR (Status)) {
- goto Done;
- }
- //
- // Allocate the private device structure
- //
- Status = gBS->AllocatePool (
- EfiBootServicesData,
- sizeof (PCI_VGA_MINI_PORT_DEV),
- (VOID **) &PciVgaMiniPortPrivate
- );
- if (EFI_ERROR (Status)) {
- goto Done;
- }
-
- ZeroMem (PciVgaMiniPortPrivate, sizeof (PCI_VGA_MINI_PORT_DEV));
-
- //
- // Initialize the private device structure
- //
- PciVgaMiniPortPrivate->Signature = PCI_VGA_MINI_PORT_DEV_SIGNATURE;
- PciVgaMiniPortPrivate->Handle = Controller;
- PciVgaMiniPortPrivate->PciIo = PciIo;
-
- PciVgaMiniPortPrivate->VgaMiniPort.SetMode = PciVgaMiniPortSetMode;
- PciVgaMiniPortPrivate->VgaMiniPort.VgaMemoryOffset = 0xb8000;
- PciVgaMiniPortPrivate->VgaMiniPort.CrtcAddressRegisterOffset = 0x3d4;
- PciVgaMiniPortPrivate->VgaMiniPort.CrtcDataRegisterOffset = 0x3d5;
- PciVgaMiniPortPrivate->VgaMiniPort.VgaMemoryBar = EFI_PCI_IO_PASS_THROUGH_BAR;
- PciVgaMiniPortPrivate->VgaMiniPort.CrtcAddressRegisterBar = EFI_PCI_IO_PASS_THROUGH_BAR;
- PciVgaMiniPortPrivate->VgaMiniPort.CrtcDataRegisterBar = EFI_PCI_IO_PASS_THROUGH_BAR;
- PciVgaMiniPortPrivate->VgaMiniPort.MaxMode = 1;
-
- //
- // Install Vga Mini Port Protocol
- //
- Status = gBS->InstallMultipleProtocolInterfaces (
- &Controller,
- &gEfiVgaMiniPortProtocolGuid,
- &PciVgaMiniPortPrivate->VgaMiniPort,
- NULL
- );
-Done:
- if (EFI_ERROR (Status)) {
- gBS->CloseProtocol (
- Controller,
- &gEfiPciIoProtocolGuid,
- This->DriverBindingHandle,
- Controller
- );
- if (PciVgaMiniPortPrivate) {
- gBS->FreePool (PciVgaMiniPortPrivate);
- }
- }
-
- return Status;
-}
-
-
-/**
- Stop.
-
- (Standard DriverBinding Protocol Stop() function)
-
- @return EFI_STATUS
-
-**/
-EFI_STATUS
-EFIAPI
-PciVgaMiniPortDriverBindingStop (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN UINTN NumberOfChildren,
- IN EFI_HANDLE *ChildHandleBuffer
- )
-{
- EFI_STATUS Status;
- EFI_VGA_MINI_PORT_PROTOCOL *VgaMiniPort;
- PCI_VGA_MINI_PORT_DEV *PciVgaMiniPortPrivate;
-
- Status = gBS->OpenProtocol (
- Controller,
- &gEfiVgaMiniPortProtocolGuid,
- (VOID **) &VgaMiniPort,
- This->DriverBindingHandle,
- Controller,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- PciVgaMiniPortPrivate = PCI_VGA_MINI_PORT_DEV_FROM_THIS (VgaMiniPort);
-
- Status = gBS->UninstallProtocolInterface (
- Controller,
- &gEfiVgaMiniPortProtocolGuid,
- &PciVgaMiniPortPrivate->VgaMiniPort
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- gBS->CloseProtocol (
- Controller,
- &gEfiPciIoProtocolGuid,
- This->DriverBindingHandle,
- Controller
- );
-
- gBS->FreePool (PciVgaMiniPortPrivate);
-
- return EFI_SUCCESS;
-}
-//
-// VGA Mini Port Protocol Functions
-//
-
-/**
- GC_TODO: Add function description
-
- @param This GC_TODO: add argument description
- @param ModeNumber GC_TODO: add argument description
-
- @retval EFI_UNSUPPORTED GC_TODO: Add description for return value
- @retval EFI_SUCCESS GC_TODO: Add description for return value
-
-**/
-EFI_STATUS
-EFIAPI
-PciVgaMiniPortSetMode (
- IN EFI_VGA_MINI_PORT_PROTOCOL *This,
- IN UINTN ModeNumber
- )
-{
- if (ModeNumber > This->MaxMode) {
- return EFI_UNSUPPORTED;
- }
-
- return EFI_SUCCESS;
-}
+/** @file\r
+\r
+Copyright (c) 2006 Intel Corporation. All rights reserved\r
+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
+**/\r
+\r
+#include "VgaMiniPort.h"\r
+\r
+//\r
+// EFI Driver Binding Protocol Instance\r
+//\r
+// This driver has a version value of 0x00000000. This is the\r
+// lowest possible priority for a driver. This is done on purpose to help\r
+// the developers of UGA drivers. This driver can bind if no UGA driver\r
+// is present, so a console is available. Then, when a UGA driver is loaded\r
+// this driver can be disconnected, and the UGA driver can be connected.\r
+// As long as the UGA driver has a version value greater than 0x00000000, it\r
+// will be connected first and will block this driver from connecting.\r
+//\r
+EFI_DRIVER_BINDING_PROTOCOL gPciVgaMiniPortDriverBinding = {\r
+ PciVgaMiniPortDriverBindingSupported,\r
+ PciVgaMiniPortDriverBindingStart,\r
+ PciVgaMiniPortDriverBindingStop,\r
+ 0x00000000,\r
+ NULL,\r
+ NULL\r
+};\r
+\r
+//\r
+// Driver Entry Point\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+PciVgaMiniPortDriverEntryPoint (\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
+ )\r
+/*++\r
+\r
+ Routine Description:\r
+ Driver Entry Point.\r
+\r
+ Arguments:\r
+ (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)\r
+\r
+ Returns:\r
+ EFI_STATUS\r
+--*/\r
+{\r
+ return EfiLibInstallDriverBindingComponentName2 (\r
+ ImageHandle,\r
+ SystemTable,\r
+ &gPciVgaMiniPortDriverBinding,\r
+ ImageHandle,\r
+ &gPciVgaMiniPortComponentName,\r
+ &gPciVgaMiniPortComponentName2\r
+ );\r
+}\r
+\r
+\r
+/**\r
+ Supported.\r
+\r
+ (Standard DriverBinding Protocol Supported() function)\r
+\r
+ @return EFI_STATUS\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+PciVgaMiniPortDriverBindingSupported (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ EFI_PCI_IO_PROTOCOL *PciIo;\r
+ PCI_TYPE00 Pci;\r
+\r
+ //\r
+ // Open the IO Abstraction(s) needed to perform the supported test\r
+ //\r
+ Status = gBS->OpenProtocol (\r
+ Controller,\r
+ &gEfiPciIoProtocolGuid,\r
+ (VOID **) &PciIo,\r
+ This->DriverBindingHandle,\r
+ Controller,\r
+ EFI_OPEN_PROTOCOL_BY_DRIVER\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+ //\r
+ // See if this is a PCI VGA Controller by looking at the Command register and\r
+ // Class Code Register\r
+ //\r
+ Status = PciIo->Pci.Read (\r
+ PciIo,\r
+ EfiPciIoWidthUint32,\r
+ 0,\r
+ sizeof (Pci) / sizeof (UINT32),\r
+ &Pci\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ goto Done;\r
+ }\r
+\r
+ Status = EFI_UNSUPPORTED;\r
+ //\r
+ // See if the device is an enabled VGA device.\r
+ // Most systems can only have on VGA device on at a time.\r
+ //\r
+ if (((Pci.Hdr.Command & 0x03) == 0x03) && IS_PCI_VGA (&Pci)) {\r
+ Status = EFI_SUCCESS;\r
+ }\r
+\r
+Done:\r
+ gBS->CloseProtocol (\r
+ Controller,\r
+ &gEfiPciIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ Controller\r
+ );\r
+\r
+ return Status;\r
+}\r
+\r
+\r
+/**\r
+ Install VGA Mini Port Protocol onto VGA device handles\r
+\r
+ (Standard DriverBinding Protocol Start() function)\r
+\r
+ @return EFI_STATUS\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+PciVgaMiniPortDriverBindingStart (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ EFI_PCI_IO_PROTOCOL *PciIo;\r
+ PCI_VGA_MINI_PORT_DEV *PciVgaMiniPortPrivate;\r
+\r
+ PciVgaMiniPortPrivate = NULL;\r
+ PciIo = NULL;\r
+ //\r
+ // Open the IO Abstraction(s) needed\r
+ //\r
+ Status = gBS->OpenProtocol (\r
+ Controller,\r
+ &gEfiPciIoProtocolGuid,\r
+ (VOID **) &PciIo,\r
+ This->DriverBindingHandle,\r
+ Controller,\r
+ EFI_OPEN_PROTOCOL_BY_DRIVER\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ goto Done;\r
+ }\r
+ //\r
+ // Allocate the private device structure\r
+ //\r
+ Status = gBS->AllocatePool (\r
+ EfiBootServicesData,\r
+ sizeof (PCI_VGA_MINI_PORT_DEV),\r
+ (VOID **) &PciVgaMiniPortPrivate\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ goto Done;\r
+ }\r
+\r
+ ZeroMem (PciVgaMiniPortPrivate, sizeof (PCI_VGA_MINI_PORT_DEV));\r
+\r
+ //\r
+ // Initialize the private device structure\r
+ //\r
+ PciVgaMiniPortPrivate->Signature = PCI_VGA_MINI_PORT_DEV_SIGNATURE;\r
+ PciVgaMiniPortPrivate->Handle = Controller;\r
+ PciVgaMiniPortPrivate->PciIo = PciIo;\r
+\r
+ PciVgaMiniPortPrivate->VgaMiniPort.SetMode = PciVgaMiniPortSetMode;\r
+ PciVgaMiniPortPrivate->VgaMiniPort.VgaMemoryOffset = 0xb8000;\r
+ PciVgaMiniPortPrivate->VgaMiniPort.CrtcAddressRegisterOffset = 0x3d4;\r
+ PciVgaMiniPortPrivate->VgaMiniPort.CrtcDataRegisterOffset = 0x3d5;\r
+ PciVgaMiniPortPrivate->VgaMiniPort.VgaMemoryBar = EFI_PCI_IO_PASS_THROUGH_BAR;\r
+ PciVgaMiniPortPrivate->VgaMiniPort.CrtcAddressRegisterBar = EFI_PCI_IO_PASS_THROUGH_BAR;\r
+ PciVgaMiniPortPrivate->VgaMiniPort.CrtcDataRegisterBar = EFI_PCI_IO_PASS_THROUGH_BAR;\r
+ PciVgaMiniPortPrivate->VgaMiniPort.MaxMode = 1;\r
+\r
+ //\r
+ // Install Vga Mini Port Protocol\r
+ //\r
+ Status = gBS->InstallMultipleProtocolInterfaces (\r
+ &Controller,\r
+ &gEfiVgaMiniPortProtocolGuid,\r
+ &PciVgaMiniPortPrivate->VgaMiniPort,\r
+ NULL\r
+ );\r
+Done:\r
+ if (EFI_ERROR (Status)) {\r
+ gBS->CloseProtocol (\r
+ Controller,\r
+ &gEfiPciIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ Controller\r
+ );\r
+ if (PciVgaMiniPortPrivate) {\r
+ gBS->FreePool (PciVgaMiniPortPrivate);\r
+ }\r
+ }\r
+\r
+ return Status;\r
+}\r
+\r
+\r
+/**\r
+ Stop.\r
+\r
+ (Standard DriverBinding Protocol Stop() function)\r
+\r
+ @return EFI_STATUS\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+PciVgaMiniPortDriverBindingStop (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ EFI_VGA_MINI_PORT_PROTOCOL *VgaMiniPort;\r
+ PCI_VGA_MINI_PORT_DEV *PciVgaMiniPortPrivate;\r
+\r
+ Status = gBS->OpenProtocol (\r
+ Controller,\r
+ &gEfiVgaMiniPortProtocolGuid,\r
+ (VOID **) &VgaMiniPort,\r
+ This->DriverBindingHandle,\r
+ Controller,\r
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ PciVgaMiniPortPrivate = PCI_VGA_MINI_PORT_DEV_FROM_THIS (VgaMiniPort);\r
+\r
+ Status = gBS->UninstallProtocolInterface (\r
+ Controller,\r
+ &gEfiVgaMiniPortProtocolGuid,\r
+ &PciVgaMiniPortPrivate->VgaMiniPort\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ gBS->CloseProtocol (\r
+ Controller,\r
+ &gEfiPciIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ Controller\r
+ );\r
+\r
+ gBS->FreePool (PciVgaMiniPortPrivate);\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+//\r
+// VGA Mini Port Protocol Functions\r
+//\r
+\r
+/**\r
+ GC_TODO: Add function description\r
+\r
+ @param This GC_TODO: add argument description\r
+ @param ModeNumber GC_TODO: add argument description\r
+\r
+ @retval EFI_UNSUPPORTED GC_TODO: Add description for return value\r
+ @retval EFI_SUCCESS GC_TODO: Add description for return value\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+PciVgaMiniPortSetMode (\r
+ IN EFI_VGA_MINI_PORT_PROTOCOL *This,\r
+ IN UINTN ModeNumber\r
+ )\r
+{\r
+ if (ModeNumber > This->MaxMode) {\r
+ return EFI_UNSUPPORTED;\r
+ }\r
+\r
+ return EFI_SUCCESS;\r
+}\r