mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-10-31 10:40:34 +00:00 
			
		
		
		
	 412fb9ef2d
			
		
	
	
		412fb9ef2d
		
	
	
	
	
		
			
			git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8709 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			235 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			235 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | ||
|   This file declares PlatfromOpRom protocols which provides the interface between 
 | ||
|   the PCI bus driver/PCI Host Bridge Resource Allocation driver and a platform-specific 
 | ||
|   driver to describe the unique features of a platform. This
 | ||
|   protocol is optional.
 | ||
|   
 | ||
|   Copyright (c) 2007 - 2009, 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.
 | ||
| 
 | ||
|   @par Revision Reference:
 | ||
|   This protocol is defined in PCI Platform Support Specification
 | ||
|   Version 0.9
 | ||
| 
 | ||
| **/
 | ||
| 
 | ||
| #ifndef _PCI_PLATFORM_H_
 | ||
| #define _PCI_PLATFORM_H_
 | ||
| 
 | ||
| #include <PiDxe.h>
 | ||
| #include <Protocol/PciHostBridgeResourceAllocation.h>
 | ||
| 
 | ||
| //
 | ||
| // Protocol for GUID.
 | ||
| //
 | ||
| 
 | ||
| #define EFI_PCI_PLATFORM_PROTOCOL_GUID \
 | ||
| { 0x7d75280, 0x27d4, 0x4d69, {0x90, 0xd0, 0x56, 0x43, 0xe2, 0x38, 0xb3, 0x41} }
 | ||
| 
 | ||
| typedef struct _EFI_PCI_PLATFORM_PROTOCOL EFI_PCI_PLATFORM_PROTOCOL;
 | ||
| 
 | ||
| typedef    UINT32   EFI_PCI_PLATFORM_POLICY;
 | ||
| 
 | ||
| //
 | ||
| // There are 4 legal combinations of following bit values:
 | ||
| // EFI_RESERVE_NONE_IO_ALIAS,
 | ||
| // EFI_RESERVE_ISA_IO_ALIAS | EFI_RESERVE_VGA_IO_ALIAS,
 | ||
| // EFI_RESERVE_ISA_IO_NO_ALIAS | EFI_RESERVE_VGA_IO_ALIAS,
 | ||
| // EFI_RESERVE_ISA_IO_NO_ALIAS | EFI_RESERVE_VGA_IO_NO_ALIAS
 | ||
| //
 | ||
| #define     EFI_RESERVE_NONE_IO_ALIAS        0x0000
 | ||
| #define     EFI_RESERVE_ISA_IO_ALIAS         0x0001
 | ||
| #define     EFI_RESERVE_ISA_IO_NO_ALIAS      0x0002
 | ||
| #define     EFI_RESERVE_VGA_IO_ALIAS         0x0004
 | ||
| #define     EFI_RESERVE_VGA_IO_NO_ALIAS      0x0008
 | ||
| 
 | ||
| ///
 | ||
| /// EFI_PCI_CHIPSET_EXECUTION_PHASE is used to call a platform protocol and execute
 | ||
| /// platform-specific code.
 | ||
| ///
 | ||
| typedef enum {
 | ||
|   ///
 | ||
|   /// The phase that indicates the entry point to the PCI Bus Notify phase. This
 | ||
|   /// platform hook is called before the PCI bus driver calls the
 | ||
|   /// EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL driver.
 | ||
|   ///
 | ||
|   ChipsetEntry,
 | ||
|   ///
 | ||
|   /// The phase that indicates the exit point to the Chipset Notify phase before
 | ||
|   /// returning to the PCI Bus Driver Notify phase. This platform hook is called after
 | ||
|   /// the PCI bus driver calls the EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
 | ||
|   /// driver.
 | ||
|   ///
 | ||
|   ChipsetExit,
 | ||
|   MaximumChipsetPhase
 | ||
| } EFI_PCI_CHIPSET_EXECUTION_PHASE;
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|   The notification from the PCI bus enumerator to the platform that it is
 | ||
|   about to enter a certain phase during the enumeration process.
 | ||
| 
 | ||
|   The PlatformNotify() function can be used to notify the platform driver so that
 | ||
|   it can perform platform-specific actions. No specific actions are required.
 | ||
|   Eight notification points are defined at this time. More synchronization points
 | ||
|   may be added as required in the future. The PCI bus driver calls the platform driver
 | ||
|   twice for every Phase-once before the PCI Host Bridge Resource Allocation Protocol
 | ||
|   driver is notified, and once after the PCI Host Bridge Resource Allocation Protocol
 | ||
|   driver has been notified.
 | ||
|   This member function may not perform any error checking on the input parameters. It
 | ||
|   also does not return any error codes. If this member function detects any error condition,
 | ||
|   it needs to handle those errors on its own because there is no way to surface any
 | ||
|   errors to the caller.
 | ||
| 
 | ||
|   @param  This                  Pointer to the EFI_PCI_PLATFORM_PROTOCOL instance.
 | ||
|   @param  HostBridge            The handle of the host bridge controller.
 | ||
|   @param  Phase                 The phase of the PCI bus enumeration.
 | ||
|   @param  ChipsetPhase          Defines the execution phase of the PCI chipset driver.
 | ||
| 
 | ||
|   @retval EFI_SUCCESS           The function completed successfully.
 | ||
| 
 | ||
| **/
 | ||
| typedef
 | ||
| EFI_STATUS
 | ||
| (EFIAPI *EFI_PCI_PLATFORM_PHASE_NOTIFY)(
 | ||
|   IN  EFI_PCI_PLATFORM_PROTOCOL                      *This,
 | ||
|   IN  EFI_HANDLE                                     HostBridge,
 | ||
|   IN  EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE  Phase,
 | ||
|   IN  EFI_PCI_CHIPSET_EXECUTION_PHASE                ChipsetPhase
 | ||
| );
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|   The notification from the PCI bus enumerator to the platform for each PCI
 | ||
|   controller at several predefined points during PCI controller initialization.
 | ||
| 
 | ||
|   The PlatformPrepController() function can be used to notify the platform driver so that
 | ||
|   it can perform platform-specific actions. No specific actions are required.
 | ||
|   Several notification points are defined at this time. More synchronization points may be
 | ||
|   added as required in the future. The PCI bus driver calls the platform driver twice for
 | ||
|   every PCI controller-once before the PCI Host Bridge Resource Allocation Protocol driver
 | ||
|   is notified, and once after the PCI Host Bridge Resource Allocation Protocol driver has
 | ||
|   been notified.
 | ||
|   This member function may not perform any error checking on the input parameters. It also
 | ||
|   does not return any error codes. If this member function detects any error condition, it
 | ||
|   needs to handle those errors on its own because there is no way to surface any errors to
 | ||
|   the caller.
 | ||
| 
 | ||
|   @param  This                  Pointer to the EFI_PCI_PLATFORM_PROTOCOL instance.
 | ||
|   @param  HostBridge            The associated PCI host bridge handle.
 | ||
|   @param  RootBridge            The associated PCI root bridge handle.
 | ||
|   @param  PciAddress            The address of the PCI device on the PCI bus.
 | ||
|   @param  Phase                 The phase of the PCI controller enumeration.
 | ||
|   @param  ChipsetPhase          Defines the execution phase of the PCI chipset driver.
 | ||
| 
 | ||
|   @retval EFI_SUCCESS           The function completed successfully.
 | ||
| 
 | ||
| **/
 | ||
| typedef
 | ||
| EFI_STATUS
 | ||
| (EFIAPI *EFI_PCI_PLATFORM_PREPROCESS_CONTROLLER)(
 | ||
|   IN  EFI_PCI_PLATFORM_PROTOCOL                      *This,
 | ||
|   IN  EFI_HANDLE                                     HostBridge,
 | ||
|   IN  EFI_HANDLE                                     RootBridge,
 | ||
|   IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS    PciAddress,
 | ||
|   IN  EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE   Phase,
 | ||
|   IN  EFI_PCI_CHIPSET_EXECUTION_PHASE                ChipsetPhase
 | ||
| );
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|   Retrieves the platform policy regarding enumeration.
 | ||
| 
 | ||
|   The GetPlatformPolicy() function retrieves the platform policy regarding PCI
 | ||
|   enumeration. The PCI bus driver and the PCI Host Bridge Resource Allocation Protocol
 | ||
|   driver can call this member function to retrieve the policy.
 | ||
| 
 | ||
|   @param  This                  Pointer to the EFI_PCI_PLATFORM_PROTOCOL instance.
 | ||
|   @param  PciPolicy             The platform policy with respect to VGA and ISA aliasing.
 | ||
| 
 | ||
|   @retval EFI_SUCCESS           The function completed successfully.
 | ||
|   @retval EFI_INVALID_PARAMETER PciPolicy is NULL.
 | ||
| 
 | ||
| **/
 | ||
| typedef
 | ||
| EFI_STATUS
 | ||
| (EFIAPI *EFI_PCI_PLATFORM_GET_PLATFORM_POLICY)(
 | ||
|   IN  EFI_PCI_PLATFORM_PROTOCOL           *This,
 | ||
|   OUT EFI_PCI_PLATFORM_POLICY             *PciPolicy
 | ||
| );
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|   Gets the PCI device's option ROM from a platform-specific location.
 | ||
| 
 | ||
|   The GetPciRom() function gets the PCI device's option ROM from a platform-specific location.
 | ||
|   The option ROM will be loaded into memory. This member function is used to return an image
 | ||
|   that is packaged as a PCI 2.2 option ROM. The image may contain both legacy and EFI option
 | ||
|   ROMs. See the UEFI 2.0 Specification for details. This member function can be used to return
 | ||
|   option ROM images for embedded controllers. Option ROMs for embedded controllers are typically
 | ||
|   stored in platform-specific storage, and this member function can retrieve it from that storage
 | ||
|   and return it to the PCI bus driver. The PCI bus driver will call this member function before
 | ||
|   scanning the ROM that is attached to any controller, which allows a platform to specify a ROM
 | ||
|   image that is different from the ROM image on a PCI card.
 | ||
| 
 | ||
|   @param  This                  Pointer to the EFI_PCI_PLATFORM_PROTOCOL instance.
 | ||
|   @param  PciHandle             The handle of the PCI device.
 | ||
|   @param  RomImage              If the call succeeds, the pointer to the pointer to the option ROM image.
 | ||
|                                 Otherwise, this field is undefined. The memory for RomImage is allocated
 | ||
|                                 by EFI_PCI_PLATFORM_PROTOCOL.GetPciRom() using the EFI Boot Service AllocatePool().
 | ||
|                                 It is the caller's responsibility to free the memory using the EFI Boot Service
 | ||
|                                 FreePool(), when the caller is done with the option ROM.
 | ||
|   @param  RomSize               If the call succeeds, a pointer to the size of the option ROM size. Otherwise,
 | ||
|                                 this field is undefined.
 | ||
| 
 | ||
|   @retval EFI_SUCCESS           The option ROM was available for this device and loaded into memory.
 | ||
|   @retval EFI_NOT_FOUND         No option ROM was available for this device.
 | ||
|   @retval EFI_OUT_OF_RESOURCES  No memory was available to load the option ROM.
 | ||
|   @retval EFI_DEVICE_ERROR      An error occurred in getting the option ROM.
 | ||
| 
 | ||
| **/
 | ||
| typedef
 | ||
| EFI_STATUS
 | ||
| (EFIAPI *EFI_PCI_PLATFORM_GET_PCI_ROM)(
 | ||
|   IN   EFI_PCI_PLATFORM_PROTOCOL    *This,
 | ||
|   IN   EFI_HANDLE                   PciHandle,
 | ||
|   OUT  VOID                         **RomImage,
 | ||
|   OUT  UINTN                        *RomSize
 | ||
| );
 | ||
| 
 | ||
| ///
 | ||
| /// This protocol provides the interface between the PCI bus driver/PCI Host
 | ||
| /// Bridge Resource Allocation driver and a platform-specific driver to describe
 | ||
| /// the unique features of a platform.
 | ||
| ///
 | ||
| struct _EFI_PCI_PLATFORM_PROTOCOL {
 | ||
|   ///
 | ||
|   /// The notification from the PCI bus enumerator to the platform that it is about to 
 | ||
|   /// enter a certain phase during the enumeration process.
 | ||
|   ///
 | ||
|   EFI_PCI_PLATFORM_PHASE_NOTIFY          PlatformNotify;
 | ||
|   ///
 | ||
|   /// The notification from the PCI bus enumerator to the platform for each PCI 
 | ||
|   /// controller at several predefined points during PCI controller initialization.
 | ||
|   /// 
 | ||
|   EFI_PCI_PLATFORM_PREPROCESS_CONTROLLER PlatformPrepController;
 | ||
|   /// 
 | ||
|   /// Retrieves the platform policy regarding enumeration.
 | ||
|   ///
 | ||
|   EFI_PCI_PLATFORM_GET_PLATFORM_POLICY   GetPlatformPolicy;
 | ||
|   ///
 | ||
|   /// Gets the PCI device<63>s option ROM from a platform-specific location.
 | ||
|   ///
 | ||
|   EFI_PCI_PLATFORM_GET_PCI_ROM           GetPciRom;
 | ||
| };
 | ||
| 
 | ||
| extern EFI_GUID   gEfiPciPlatformProtocolGuid;
 | ||
| 
 | ||
| #endif
 |