From: qwang12 Date: Fri, 13 Jul 2007 12:53:35 +0000 (+0000) Subject: Add in VgaMiniPortDxe X-Git-Tag: edk2-stable201903~22723 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=bbcf90a9af35b1892b2f6a3942dd7e3cbddf6cda;hp=5db09a6d881e7e7c356602fd2280a0cffaa7adcd Add in VgaMiniPortDxe git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3238 6f19259b-4bc3-4df7-8a09-765794883524 --- diff --git a/IntelFrameworkModulePkg/Bus/Pci/VgaMiniPortDxe/ComponentName.c b/IntelFrameworkModulePkg/Bus/Pci/VgaMiniPortDxe/ComponentName.c new file mode 100644 index 0000000000..74954a5181 --- /dev/null +++ b/IntelFrameworkModulePkg/Bus/Pci/VgaMiniPortDxe/ComponentName.c @@ -0,0 +1,163 @@ +/** @file + +Copyright (c) 2006 - 2007 Intel Corporation. All rights reserved +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: + + ComponentName.c + +Abstract: + + +**/ + +#include "VgaMiniPort.h" + +// +// EFI Component Name Functions +// +EFI_STATUS +EFIAPI +PciVgaMiniPortComponentNameGetDriverName ( + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName + ); + +EFI_STATUS +EFIAPI +PciVgaMiniPortComponentNameGetControllerName ( + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName + ); + +// +// EFI Component Name Protocol +// +EFI_COMPONENT_NAME_PROTOCOL gPciVgaMiniPortComponentName = { + PciVgaMiniPortComponentNameGetDriverName, + PciVgaMiniPortComponentNameGetControllerName, + "eng" +}; + +static EFI_UNICODE_STRING_TABLE mPciVgaMiniPortDriverNameTable[] = { + { + "eng", + L"PCI VGA Mini Port Driver" + }, + { + NULL, + NULL + } +}; + +EFI_STATUS +EFIAPI +PciVgaMiniPortComponentNameGetDriverName ( + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName + ) +/*++ + + Routine Description: + Retrieves a Unicode string that is the user readable name of the EFI Driver. + + Arguments: + This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance. + Language - A pointer to a three character ISO 639-2 language identifier. + This is the language of the driver name that that the caller + is requesting, and it must match one of the languages specified + in SupportedLanguages. The number of languages supported by a + driver is up to the driver writer. + DriverName - A pointer to the Unicode string to return. This Unicode string + is the name of the driver specified by This in the language + specified by Language. + + Returns: + EFI_SUCCESS - The Unicode string for the Driver specified by This + and the language specified by Language was returned + in DriverName. + EFI_INVALID_PARAMETER - Language is NULL. + EFI_INVALID_PARAMETER - DriverName is NULL. + EFI_UNSUPPORTED - The driver specified by This does not support the + language specified by Language. + +--*/ +{ + return LookupUnicodeString ( + Language, + gPciVgaMiniPortComponentName.SupportedLanguages, + mPciVgaMiniPortDriverNameTable, + DriverName + ); +} + +EFI_STATUS +EFIAPI +PciVgaMiniPortComponentNameGetControllerName ( + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName + ) +/*++ + + Routine Description: + Retrieves a Unicode string that is the user readable name of the controller + that is being managed by an EFI Driver. + + Arguments: + This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance. + ControllerHandle - The handle of a controller that the driver specified by + This is managing. This handle specifies the controller + whose name is to be returned. + ChildHandle - The handle of the child controller to retrieve the name + of. This is an optional parameter that may be NULL. It + will be NULL for device drivers. It will also be NULL + for a bus drivers that wish to retrieve the name of the + bus controller. It will not be NULL for a bus driver + that wishes to retrieve the name of a child controller. + Language - A pointer to a three character ISO 639-2 language + identifier. This is the language of the controller name + that that the caller is requesting, and it must match one + of the languages specified in SupportedLanguages. The + number of languages supported by a driver is up to the + driver writer. + ControllerName - A pointer to the Unicode string to return. This Unicode + string is the name of the controller specified by + ControllerHandle and ChildHandle in the language + specified by Language from the point of view of the + driver specified by This. + + Returns: + EFI_SUCCESS - The Unicode string for the user readable name in the + language specified by Language for the driver + specified by This was returned in DriverName. + EFI_INVALID_PARAMETER - ControllerHandle is not a valid EFI_HANDLE. + EFI_INVALID_PARAMETER - ChildHandle is not NULL and it is not a valid + EFI_HANDLE. + EFI_INVALID_PARAMETER - Language is NULL. + EFI_INVALID_PARAMETER - ControllerName is NULL. + EFI_UNSUPPORTED - The driver specified by This is not currently + managing the controller specified by + ControllerHandle and ChildHandle. + EFI_UNSUPPORTED - The driver specified by This does not support the + language specified by Language. + +--*/ +{ + return EFI_UNSUPPORTED; +} diff --git a/IntelFrameworkModulePkg/Bus/Pci/VgaMiniPortDxe/VgaMiniPort.c b/IntelFrameworkModulePkg/Bus/Pci/VgaMiniPortDxe/VgaMiniPort.c new file mode 100644 index 0000000000..95d94dc592 --- /dev/null +++ b/IntelFrameworkModulePkg/Bus/Pci/VgaMiniPortDxe/VgaMiniPort.c @@ -0,0 +1,324 @@ +/** @file + +Copyright (c) 2006 Intel Corporation. All rights reserved +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: + + PciVgaMiniPort.c + +Abstract: + + +Revision History + +**/ + +#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 +// +//@MT: EFI_DRIVER_ENTRY_POINT (PciVgaMiniPortDriverEntryPoint) + +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), + &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; +} diff --git a/IntelFrameworkModulePkg/Bus/Pci/VgaMiniPortDxe/VgaMiniPort.h b/IntelFrameworkModulePkg/Bus/Pci/VgaMiniPortDxe/VgaMiniPort.h new file mode 100644 index 0000000000..24db611933 --- /dev/null +++ b/IntelFrameworkModulePkg/Bus/Pci/VgaMiniPortDxe/VgaMiniPort.h @@ -0,0 +1,105 @@ +/** @file + +Copyright (c) 2006 - 2007 Intel Corporation. All rights reserved +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: + + VgaClass.h + +Abstract: + + +Revision History + +**/ + +#ifndef _VGA_MINIPORT_H +#define _VGA_MINIPORT_H + +// +// The package level header files this module uses +// +#include +// +// The protocols, PPI and GUID defintions for this module +// +#include +#include +#include + + +// +// The Library classes this module consumes +// +#include +#include +#include +#include +#include + +#include + +// +// PCI VGA MiniPort Device Structure +// +#define PCI_VGA_MINI_PORT_DEV_SIGNATURE EFI_SIGNATURE_32('P','V','M','P') + +typedef struct { + UINTN Signature; + EFI_HANDLE Handle; + EFI_VGA_MINI_PORT_PROTOCOL VgaMiniPort; + EFI_PCI_IO_PROTOCOL *PciIo; +} PCI_VGA_MINI_PORT_DEV; + +#define PCI_VGA_MINI_PORT_DEV_FROM_THIS(a) CR(a, PCI_VGA_MINI_PORT_DEV, VgaMiniPort, PCI_VGA_MINI_PORT_DEV_SIGNATURE) + +// +// Global Variables +// +extern EFI_DRIVER_BINDING_PROTOCOL gPciVgaMiniPortDriverBinding; +extern EFI_COMPONENT_NAME_PROTOCOL gPciVgaMiniPortComponentName; + +// +// Driver Binding Protocol functions +// +EFI_STATUS +PciVgaMiniPortDriverBindingSupported ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + ); + +EFI_STATUS +PciVgaMiniPortDriverBindingStart ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + ); + +EFI_STATUS +PciVgaMiniPortDriverBindingStop ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer + ); + +// +// VGA Mini Port Protocol functions +// +EFI_STATUS +EFIAPI +PciVgaMiniPortSetMode ( + IN EFI_VGA_MINI_PORT_PROTOCOL *This, + IN UINTN ModeNumber + ); + +#endif diff --git a/IntelFrameworkModulePkg/Bus/Pci/VgaMiniPortDxe/VgaMiniPortDxe.inf b/IntelFrameworkModulePkg/Bus/Pci/VgaMiniPortDxe/VgaMiniPortDxe.inf new file mode 100644 index 0000000000..2e3479901f --- /dev/null +++ b/IntelFrameworkModulePkg/Bus/Pci/VgaMiniPortDxe/VgaMiniPortDxe.inf @@ -0,0 +1,90 @@ +#/** @file +# Component name for module VgaMiniPort +# +# FIX ME! +# Copyright (c) 2006, Intel Corporation. All right reserved. +# +# 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. +# +# +#**/ + +################################################################################ +# +# Defines Section - statements that will be processed to create a Makefile. +# +################################################################################ +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = VgaMiniPort + FILE_GUID = 15C5E761-58D8-461a-9173-CAB020916264 + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + EDK_RELEASE_VERSION = 0x00020000 + EFI_SPECIFICATION_VERSION = 0x00020000 + + ENTRY_POINT = PciVgaMiniPortDriverEntryPoint + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 IPF EBC +# + +################################################################################ +# +# Sources Section - list of files that are required for the build to succeed. +# +################################################################################ + +[Sources.common] + ComponentName.c + VgaMiniPort.c + VgaMiniPort.h + + +################################################################################ +# +# Package Dependency Section - list of Package files that are required for +# this module. +# +################################################################################ + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + IntelFrameworkPkg/IntelFrameworkPkg.dec + + +################################################################################ +# +# Library Class Section - list of Library Classes that are required for +# this module. +# +################################################################################ + +[LibraryClasses] + UefiLib + UefiBootServicesTableLib + UefiDriverEntryPoint + BaseMemoryLib + + +################################################################################ +# +# Protocol C Name Section - list of Protocol and Protocol Notify C Names +# that this module uses or produces. +# +################################################################################ + +[Protocols] + gEfiPciIoProtocolGuid # PROTOCOL ALWAYS_CONSUMED + gEfiComponentName2ProtocolGuid + gEfiVgaMiniPortProtocolGuid + diff --git a/IntelFrameworkModulePkg/Bus/Pci/VgaMiniPortDxe/VgaMiniPortDxe.msa b/IntelFrameworkModulePkg/Bus/Pci/VgaMiniPortDxe/VgaMiniPortDxe.msa new file mode 100644 index 0000000000..9767294b92 --- /dev/null +++ b/IntelFrameworkModulePkg/Bus/Pci/VgaMiniPortDxe/VgaMiniPortDxe.msa @@ -0,0 +1,59 @@ + + + VgaMiniPort + DXE_DRIVER + 15C5E761-58D8-461a-9173-CAB020916264 + 1.0 + Component name for module VgaMiniPort + FIX ME! + Copyright (c) 2006, Intel Corporation. All right reserved. + 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. + FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052 + + + IA32 X64 IPF EBC + false + VgaMiniPort + + + + BaseMemoryLib + + + UefiDriverEntryPoint + + + UefiBootServicesTableLib + + + UefiLib + + + + VgaMiniPort.h + VgaMiniPort.c + ComponentName.c + + + + + + + + gEfiPciIoProtocolGuid + + + + EFI_SPECIFICATION_VERSION 0x00020000 + EDK_RELEASE_VERSION 0x00020000 + + PciVgaMiniPortDriverEntryPoint + + + \ No newline at end of file