Remove the references to DuetPkg.  Copy the files from revision
ffea0a2ce2 of DuetPkg into
CorebootModulePkg.  The components include:
* PciBusNoEnumerationDxe
* PciRootBridgeNoEnumerationDxe
* SataControllerDxe
TEST=Build and run on Galileo Gen2
Change-Id: Id07185f7e226749e5f7c6b6cb427bcef7eac8496
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Lee Leahy <leroy.p.leahy@intel.com>
Reviewed-by: Maurice Ma <maurice.ma@intel.com>
Reviewed-by: Prince Agyeman <prince.agyeman@intel.com>
		
	
		
			
				
	
	
		
			450 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			450 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*++
 | 
						|
 | 
						|
Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
 | 
						|
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:
 | 
						|
 | 
						|
    DeviceIo.h
 | 
						|
    
 | 
						|
Abstract:
 | 
						|
 | 
						|
    Private Data definition for Device IO driver
 | 
						|
 | 
						|
--*/
 | 
						|
 | 
						|
#ifndef _DEVICE_IO_H
 | 
						|
#define _DEVICE_IO_H
 | 
						|
 | 
						|
 | 
						|
 | 
						|
#define DEVICE_IO_PRIVATE_DATA_SIGNATURE  SIGNATURE_32 ('d', 'e', 'v', 'I')
 | 
						|
 | 
						|
#define MAX_COMMON_BUFFER                 0x00000000FFFFFFFF
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINTN                           Signature;
 | 
						|
  EFI_HANDLE                      Handle;
 | 
						|
  EFI_DEVICE_IO_PROTOCOL          DeviceIo;
 | 
						|
  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo;
 | 
						|
  EFI_DEVICE_PATH_PROTOCOL        *DevicePath;
 | 
						|
  UINT16                          PrimaryBus;
 | 
						|
  UINT16                          SubordinateBus;
 | 
						|
} DEVICE_IO_PRIVATE_DATA;
 | 
						|
 | 
						|
#define DEVICE_IO_PRIVATE_DATA_FROM_THIS(a) CR (a, DEVICE_IO_PRIVATE_DATA, DeviceIo, DEVICE_IO_PRIVATE_DATA_SIGNATURE)
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
DeviceIoConstructor (
 | 
						|
  IN EFI_HANDLE                      Handle,
 | 
						|
  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL        *DevicePath,
 | 
						|
  IN UINT16                          PrimaryBus,
 | 
						|
  IN UINT16                          SubordinateBus
 | 
						|
  )
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
 | 
						|
  Initialize and install a Device IO protocol on a empty device path handle.
 | 
						|
 | 
						|
Arguments:
 | 
						|
 | 
						|
  Handle               - Handle of PCI RootBridge IO instance
 | 
						|
  PciRootBridgeIo      - PCI RootBridge IO instance
 | 
						|
  DevicePath           - Device Path of PCI RootBridge IO instance
 | 
						|
  PrimaryBus           - Primary Bus
 | 
						|
  SubordinateBus       - Subordinate Bus
 | 
						|
 | 
						|
Returns:
 | 
						|
 | 
						|
  EFI_SUCCESS          -  This driver is added to ControllerHandle.  
 | 
						|
  EFI_ALREADY_STARTED  -  This driver is already running on ControllerHandle.   
 | 
						|
  Others               -  This driver does not support this device.
 | 
						|
 | 
						|
--*/
 | 
						|
;
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
DeviceIoMemRead (
 | 
						|
  IN     EFI_DEVICE_IO_PROTOCOL *This,
 | 
						|
  IN     EFI_IO_WIDTH           Width,
 | 
						|
  IN     UINT64                 Address,
 | 
						|
  IN     UINTN                  Count,
 | 
						|
  IN OUT VOID                   *Buffer
 | 
						|
  )
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
  
 | 
						|
  Perform reading memory mapped I/O space of device.
 | 
						|
 | 
						|
Arguments:
 | 
						|
  
 | 
						|
  This     -  A pointer to EFI_DEVICE_IO protocol instance.  
 | 
						|
  Width    -  Width of I/O operations.
 | 
						|
  Address  -  The base address of I/O operations.  
 | 
						|
  Count    -  The number of I/O operations to perform. 
 | 
						|
              Bytes moves is Width size * Count, starting at Address.           
 | 
						|
  Buffer   -  The destination buffer to store results.
 | 
						|
 | 
						|
Returns:
 | 
						|
    
 | 
						|
  EFI_SUCCESS            -  The data was read from the device.  
 | 
						|
  EFI_INVALID_PARAMETER  -  Width is invalid.
 | 
						|
  EFI_OUT_OF_RESOURCES   -  The request could not be completed due to lack of resources.
 | 
						|
 | 
						|
--*/
 | 
						|
;
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
DeviceIoMemWrite (
 | 
						|
  IN     EFI_DEVICE_IO_PROTOCOL *This,
 | 
						|
  IN     EFI_IO_WIDTH           Width,
 | 
						|
  IN     UINT64                 Address,
 | 
						|
  IN     UINTN                  Count,
 | 
						|
  IN OUT VOID                   *Buffer
 | 
						|
  )
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
  
 | 
						|
  Perform writing memory mapped I/O space of device.
 | 
						|
 | 
						|
Arguments:
 | 
						|
  
 | 
						|
  This     -  A pointer to EFI_DEVICE_IO protocol instance.  
 | 
						|
  Width    -  Width of I/O operations.  
 | 
						|
  Address  -  The base address of I/O operations.   
 | 
						|
  Count    -  The number of I/O operations to perform. 
 | 
						|
              Bytes moves is Width size * Count, starting at Address.            
 | 
						|
  Buffer   -  The source buffer of data to be written.
 | 
						|
 | 
						|
Returns:
 | 
						|
    
 | 
						|
  EFI_SUCCESS            -  The data was written to the device.
 | 
						|
  EFI_INVALID_PARAMETER  -  Width is invalid.
 | 
						|
  EFI_OUT_OF_RESOURCES   -  The request could not be completed due to lack of resources.
 | 
						|
 | 
						|
--*/
 | 
						|
;
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
DeviceIoIoRead (
 | 
						|
  IN     EFI_DEVICE_IO_PROTOCOL *This,
 | 
						|
  IN     EFI_IO_WIDTH           Width,
 | 
						|
  IN     UINT64                 Address,
 | 
						|
  IN     UINTN                  Count,
 | 
						|
  IN OUT VOID                   *Buffer
 | 
						|
  )
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
  
 | 
						|
  Perform reading I/O space of device.
 | 
						|
 | 
						|
Arguments:
 | 
						|
  
 | 
						|
  This     -  A pointer to EFI_DEVICE_IO protocol instance.  
 | 
						|
  Width    -  Width of I/O operations.
 | 
						|
  Address  -  The base address of I/O operations. 
 | 
						|
  Count    -  The number of I/O operations to perform. 
 | 
						|
              Bytes moves is Width size * Count, starting at Address.          
 | 
						|
  Buffer   -  The destination buffer to store results.
 | 
						|
 | 
						|
Returns:
 | 
						|
    
 | 
						|
  EFI_SUCCESS            -  The data was read from the device.
 | 
						|
  EFI_INVALID_PARAMETER  -  Width is invalid.
 | 
						|
  EFI_OUT_OF_RESOURCES   -  The request could not be completed due to lack of resources.
 | 
						|
 | 
						|
--*/
 | 
						|
;
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
DeviceIoIoWrite (
 | 
						|
  IN     EFI_DEVICE_IO_PROTOCOL *This,
 | 
						|
  IN     EFI_IO_WIDTH           Width,
 | 
						|
  IN     UINT64                 Address,
 | 
						|
  IN     UINTN                  Count,
 | 
						|
  IN OUT VOID                   *Buffer
 | 
						|
  )
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
  
 | 
						|
  Perform writing I/O space of device.
 | 
						|
 | 
						|
Arguments:
 | 
						|
  
 | 
						|
  This     -  A pointer to EFI_DEVICE_IO protocol instance.  
 | 
						|
  Width    -  Width of I/O operations.
 | 
						|
  Address  -  The base address of I/O operations.
 | 
						|
  Count    -  The number of I/O operations to perform. 
 | 
						|
              Bytes moves is Width size * Count, starting at Address.        
 | 
						|
  Buffer   -  The source buffer of data to be written.
 | 
						|
 | 
						|
Returns:
 | 
						|
    
 | 
						|
  EFI_SUCCESS            -  The data was written to the device.
 | 
						|
  EFI_INVALID_PARAMETER  -  Width is invalid.
 | 
						|
  EFI_OUT_OF_RESOURCES   -  The request could not be completed due to lack of resources.
 | 
						|
 | 
						|
--*/
 | 
						|
;
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
DeviceIoPciRead (
 | 
						|
  IN     EFI_DEVICE_IO_PROTOCOL *This,
 | 
						|
  IN     EFI_IO_WIDTH           Width,
 | 
						|
  IN     UINT64                 Address,
 | 
						|
  IN     UINTN                  Count,
 | 
						|
  IN OUT VOID                   *Buffer
 | 
						|
  )
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
  
 | 
						|
  Perform reading PCI configuration space of device
 | 
						|
 | 
						|
Arguments:
 | 
						|
  
 | 
						|
  This     -  A pointer to EFI_DEVICE_IO protocol instance.  
 | 
						|
  Width    -  Width of I/O operations. 
 | 
						|
  Address  -  The base address of I/O operations. 
 | 
						|
  Count    -  The number of I/O operations to perform. 
 | 
						|
              Bytes moves is Width size * Count, starting at Address.           
 | 
						|
  Buffer   -  The destination buffer to store results.
 | 
						|
 | 
						|
Returns:
 | 
						|
    
 | 
						|
  EFI_SUCCESS            -  The data was read from the device.
 | 
						|
  EFI_INVALID_PARAMETER  -  Width is invalid.
 | 
						|
  EFI_OUT_OF_RESOURCES   -  The request could not be completed due to lack of resources.
 | 
						|
 | 
						|
--*/
 | 
						|
;
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
DeviceIoPciWrite (
 | 
						|
  IN     EFI_DEVICE_IO_PROTOCOL *This,
 | 
						|
  IN     EFI_IO_WIDTH           Width,
 | 
						|
  IN     UINT64                 Address,
 | 
						|
  IN     UINTN                  Count,
 | 
						|
  IN OUT VOID                   *Buffer
 | 
						|
  )
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
  
 | 
						|
  Perform writing PCI configuration space of device.
 | 
						|
 | 
						|
Arguments:
 | 
						|
  
 | 
						|
  This     -  A pointer to EFI_DEVICE_IO protocol instance.   
 | 
						|
  Width    -  Width of I/O operations. 
 | 
						|
  Address  -  The base address of I/O operations. 
 | 
						|
  Count    -  The number of I/O operations to perform. 
 | 
						|
              Bytes moves is Width size * Count, starting at Address.         
 | 
						|
  Buffer   -  The source buffer of data to be written.
 | 
						|
 | 
						|
Returns:
 | 
						|
    
 | 
						|
  EFI_SUCCESS            -  The data was written to the device.
 | 
						|
  EFI_INVALID_PARAMETER  -  Width is invalid.
 | 
						|
  EFI_OUT_OF_RESOURCES   -  The request could not be completed due to lack of resources.
 | 
						|
 | 
						|
--*/
 | 
						|
;
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
DeviceIoPciDevicePath (
 | 
						|
  IN     EFI_DEVICE_IO_PROTOCOL        *This,
 | 
						|
  IN     UINT64                        Address,
 | 
						|
  IN OUT EFI_DEVICE_PATH_PROTOCOL      **PciDevicePath
 | 
						|
  )
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
  
 | 
						|
  Append a PCI device path node to another device path.
 | 
						|
 | 
						|
Arguments:
 | 
						|
  
 | 
						|
  This                  -  A pointer to EFI_DEVICE_IO_PROTOCOL.  
 | 
						|
  Address               -  PCI bus,device, function.
 | 
						|
  PciDevicePath         -  PCI device path.
 | 
						|
 | 
						|
Returns:
 | 
						|
  
 | 
						|
  Pointer to the appended PCI device path.
 | 
						|
 | 
						|
--*/
 | 
						|
;
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
DeviceIoMap (
 | 
						|
  IN     EFI_DEVICE_IO_PROTOCOL   *This,
 | 
						|
  IN     EFI_IO_OPERATION_TYPE    Operation,
 | 
						|
  IN     EFI_PHYSICAL_ADDRESS     *HostAddress,
 | 
						|
  IN OUT UINTN                    *NumberOfBytes,
 | 
						|
  OUT    EFI_PHYSICAL_ADDRESS     *DeviceAddress,
 | 
						|
  OUT    VOID                     **Mapping
 | 
						|
  )
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
  
 | 
						|
  Provides the device-specific addresses needed to access system memory.
 | 
						|
 | 
						|
Arguments:
 | 
						|
  
 | 
						|
  This           -  A pointer to the EFI_DEVICE_IO_INTERFACE instance. 
 | 
						|
  Operation      -  Indicates if the bus master is going to read or write to system memory.  
 | 
						|
  HostAddress    -  The system memory address to map to the device.
 | 
						|
  NumberOfBytes  -  On input the number of bytes to map. On output the number of bytes
 | 
						|
                    that were mapped.
 | 
						|
  DeviceAddress  -  The resulting map address for the bus master device to use to access the
 | 
						|
                    hosts HostAddress.
 | 
						|
  Mapping        -  A resulting value to pass to Unmap().
 | 
						|
 | 
						|
Returns:
 | 
						|
  
 | 
						|
  EFI_SUCCESS            -  The range was mapped for the returned NumberOfBytes. 
 | 
						|
  EFI_INVALID_PARAMETER  -  The Operation or HostAddress is undefined. 
 | 
						|
  EFI_UNSUPPORTED        -  The HostAddress cannot be mapped as a common buffer.
 | 
						|
  EFI_DEVICE_ERROR       -  The system hardware could not map the requested address. 
 | 
						|
  EFI_OUT_OF_RESOURCES   -  The request could not be completed due to a lack of resources.
 | 
						|
 | 
						|
--*/
 | 
						|
;
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
DeviceIoUnmap (
 | 
						|
  IN EFI_DEVICE_IO_PROTOCOL   *This,
 | 
						|
  IN VOID                     *Mapping
 | 
						|
  )
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
  
 | 
						|
  Completes the Map() operation and releases any corresponding resources.
 | 
						|
 | 
						|
Arguments:
 | 
						|
  
 | 
						|
  This     -  A pointer to the EFI_DEVICE_IO_INTERFACE instance.
 | 
						|
  Mapping  -  The mapping value returned from Map().
 | 
						|
 | 
						|
Returns:
 | 
						|
  
 | 
						|
  EFI_SUCCESS       -  The range was unmapped.
 | 
						|
  EFI_DEVICE_ERROR  -  The data was not committed to the target system memory.
 | 
						|
 | 
						|
--*/
 | 
						|
;
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
DeviceIoAllocateBuffer (
 | 
						|
  IN     EFI_DEVICE_IO_PROTOCOL    *This,
 | 
						|
  IN     EFI_ALLOCATE_TYPE         Type,
 | 
						|
  IN     EFI_MEMORY_TYPE           MemoryType,
 | 
						|
  IN     UINTN                     Pages,
 | 
						|
  IN OUT EFI_PHYSICAL_ADDRESS      *HostAddress
 | 
						|
  )
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
  
 | 
						|
  Allocates pages that are suitable for an EFIBusMasterCommonBuffer mapping.
 | 
						|
 | 
						|
Arguments:
 | 
						|
  
 | 
						|
  This             -  A pointer to the EFI_DEVICE_IO_INTERFACE instance.
 | 
						|
  Type             -  The type allocation to perform.
 | 
						|
  MemoryType       -  The type of memory to allocate, EfiBootServicesData or
 | 
						|
                      EfiRuntimeServicesData.
 | 
						|
  Pages            -  The number of pages to allocate.
 | 
						|
  HostAddress      -  A pointer to store the base address of the allocated range.
 | 
						|
 | 
						|
Returns:
 | 
						|
  
 | 
						|
  EFI_SUCCESS            -  The requested memory pages were allocated.
 | 
						|
  EFI_OUT_OF_RESOURCES   -  The memory pages could not be allocated.
 | 
						|
  EFI_INVALID_PARAMETER  -  The requested memory type is invalid.
 | 
						|
  EFI_UNSUPPORTED        -  The requested PhysicalAddress is not supported on
 | 
						|
                            this platform.
 | 
						|
 | 
						|
--*/
 | 
						|
;
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
DeviceIoFlush (
 | 
						|
  IN EFI_DEVICE_IO_PROTOCOL  *This
 | 
						|
  )
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
  
 | 
						|
  Flushes any posted write data to the device.
 | 
						|
 | 
						|
Arguments:
 | 
						|
  
 | 
						|
  This  -  A pointer to the EFI_DEVICE_IO_INTERFACE instance.
 | 
						|
 | 
						|
Returns:
 | 
						|
  
 | 
						|
  EFI_SUCCESS       -  The buffers were flushed.
 | 
						|
  EFI_DEVICE_ERROR  -  The buffers were not flushed due to a hardware error.
 | 
						|
 | 
						|
--*/
 | 
						|
;
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
DeviceIoFreeBuffer (
 | 
						|
  IN EFI_DEVICE_IO_PROTOCOL   *This,
 | 
						|
  IN UINTN                    Pages,
 | 
						|
  IN EFI_PHYSICAL_ADDRESS     HostAddress
 | 
						|
  )
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
  
 | 
						|
  Frees pages that were allocated with AllocateBuffer().
 | 
						|
 | 
						|
Arguments:
 | 
						|
  
 | 
						|
  This         -  A pointer to the EFI_DEVICE_IO_INTERFACE instance.
 | 
						|
  Pages        -  The number of pages to free.
 | 
						|
  HostAddress  -  The base address of the range to free.
 | 
						|
 | 
						|
Returns:
 | 
						|
  
 | 
						|
  EFI_SUCCESS            -  The requested memory pages were freed.
 | 
						|
  EFI_NOT_FOUND          -  The requested memory pages were not allocated with
 | 
						|
                            AllocateBuffer().               
 | 
						|
  EFI_INVALID_PARAMETER  -  HostAddress is not page aligned or Pages is invalid.
 | 
						|
 | 
						|
--*/
 | 
						|
;
 | 
						|
 | 
						|
#endif
 | 
						|
 |