REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the MdePkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
		
			
				
	
	
		
			263 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			263 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Device IO protocol as defined in the EFI 1.10 specification.
 | 
						|
 | 
						|
  Device IO is used to abstract hardware access to devices. It includes
 | 
						|
  memory mapped IO, IO, PCI Config space, and DMA.
 | 
						|
 | 
						|
  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef __DEVICE_IO_H__
 | 
						|
#define __DEVICE_IO_H__
 | 
						|
 | 
						|
#define EFI_DEVICE_IO_PROTOCOL_GUID \
 | 
						|
  { \
 | 
						|
    0xaf6ac311, 0x84c3, 0x11d2, {0x8e, 0x3c, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \
 | 
						|
  }
 | 
						|
 | 
						|
typedef struct _EFI_DEVICE_IO_PROTOCOL EFI_DEVICE_IO_PROTOCOL;
 | 
						|
 | 
						|
///
 | 
						|
/// Protocol GUID name defined in EFI1.1.
 | 
						|
///
 | 
						|
#define DEVICE_IO_PROTOCOL  EFI_DEVICE_IO_PROTOCOL_GUID
 | 
						|
 | 
						|
///
 | 
						|
/// Protocol defined in EFI1.1.
 | 
						|
///
 | 
						|
typedef EFI_DEVICE_IO_PROTOCOL EFI_DEVICE_IO_INTERFACE;
 | 
						|
 | 
						|
///
 | 
						|
/// Device IO Access Width
 | 
						|
///
 | 
						|
typedef enum {
 | 
						|
  IO_UINT8  = 0,
 | 
						|
  IO_UINT16 = 1,
 | 
						|
  IO_UINT32 = 2,
 | 
						|
  IO_UINT64 = 3,
 | 
						|
  //
 | 
						|
  // Below enumerations are added in "Extensible Firmware Interface Specification,
 | 
						|
  // Version 1.10, Specification Update, Version 001".
 | 
						|
  //
 | 
						|
  MMIO_COPY_UINT8  = 4,
 | 
						|
  MMIO_COPY_UINT16 = 5,
 | 
						|
  MMIO_COPY_UINT32 = 6,
 | 
						|
  MMIO_COPY_UINT64 = 7
 | 
						|
} EFI_IO_WIDTH;
 | 
						|
 | 
						|
/**
 | 
						|
  Enables a driver to access device registers in the appropriate memory or I/O space.
 | 
						|
 | 
						|
  @param  This                  A pointer to the EFI_DEVICE_IO_INTERFACE instance.
 | 
						|
  @param  Width                 Signifies the width of the I/O operations.
 | 
						|
  @param  Address               The base address of the I/O operations.
 | 
						|
  @param  Count                 The number of I/O operations to perform.
 | 
						|
  @param  Buffer                For read operations, the destination buffer to store the results. For write
 | 
						|
                                operations, the source buffer to write data from. If
 | 
						|
                                Width is MMIO_COPY_UINT8, MMIO_COPY_UINT16,
 | 
						|
                                MMIO_COPY_UINT32, or MMIO_COPY_UINT64, then
 | 
						|
                                Buffer is interpreted as a base address of an I/O operation such as Address.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The data was read from or written to the device.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.
 | 
						|
  @retval EFI_INVALID_PARAMETER Width is invalid.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DEVICE_IO)(
 | 
						|
  IN EFI_DEVICE_IO_PROTOCOL         *This,
 | 
						|
  IN EFI_IO_WIDTH                   Width,
 | 
						|
  IN UINT64                         Address,
 | 
						|
  IN UINTN                          Count,
 | 
						|
  IN OUT VOID                       *Buffer
 | 
						|
  );
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  EFI_DEVICE_IO    Read;
 | 
						|
  EFI_DEVICE_IO    Write;
 | 
						|
} EFI_IO_ACCESS;
 | 
						|
 | 
						|
/**
 | 
						|
  Provides an EFI Device Path for a PCI device with the given PCI configuration space address.
 | 
						|
 | 
						|
  @param  This                  A pointer to the EFI_DEVICE_IO_INTERFACE instance.
 | 
						|
  @param  PciAddress            The PCI configuration space address of the device whose Device Path
 | 
						|
                                is going to be returned.
 | 
						|
  @param  PciDevicePath         A pointer to the pointer for the EFI Device Path for PciAddress.
 | 
						|
                                Memory for the Device Path is allocated from the pool.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The PciDevicePath returns a pointer to a valid EFI Device Path.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.
 | 
						|
  @retval EFI_UNSUPPORTED       The PciAddress does not map to a valid EFI Device Path.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PCI_DEVICE_PATH)(
 | 
						|
  IN EFI_DEVICE_IO_PROTOCOL           *This,
 | 
						|
  IN UINT64                           PciAddress,
 | 
						|
  IN OUT EFI_DEVICE_PATH_PROTOCOL     **PciDevicePath
 | 
						|
  );
 | 
						|
 | 
						|
typedef enum {
 | 
						|
  ///
 | 
						|
  /// A read operation from system memory by a bus master.
 | 
						|
  ///
 | 
						|
  EfiBusMasterRead,
 | 
						|
 | 
						|
  ///
 | 
						|
  /// A write operation to system memory by a bus master.
 | 
						|
  ///
 | 
						|
  EfiBusMasterWrite,
 | 
						|
 | 
						|
  ///
 | 
						|
  /// Provides both read and write access to system memory
 | 
						|
  /// by both the processor and a bus master. The buffer is
 | 
						|
  /// coherent from both the processor's and the bus master's
 | 
						|
  /// point of view.
 | 
						|
  ///
 | 
						|
  EfiBusMasterCommonBuffer
 | 
						|
} EFI_IO_OPERATION_TYPE;
 | 
						|
 | 
						|
/**
 | 
						|
  Provides the device-specific addresses needed to access system memory.
 | 
						|
 | 
						|
  @param  This                  A pointer to the EFI_DEVICE_IO_INTERFACE instance.
 | 
						|
  @param  Operation             Indicates if the bus master is going to read or write to system memory.
 | 
						|
  @param  HostAddress           The system memory address to map to the device.
 | 
						|
  @param  NumberOfBytes         On input, the number of bytes to map.
 | 
						|
                                On output, the number of bytes that were mapped.
 | 
						|
  @param  DeviceAddress         The resulting map address for the bus master device to use to access the
 | 
						|
                                hosts HostAddress.
 | 
						|
  @param  Mapping               A resulting value to pass to Unmap().
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The range was mapped for the returned NumberOfBytes.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.
 | 
						|
  @retval EFI_UNSUPPORTED       The HostAddress cannot be mapped as a common buffer.
 | 
						|
  @retval EFI_INVALID_PARAMETER The Operation or HostAddress is undefined.
 | 
						|
  @retval EFI_DEVICE_ERROR      The system hardware could not map the requested address.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_IO_MAP)(
 | 
						|
  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
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Completes the Map() operation and releases any corresponding resources.
 | 
						|
 | 
						|
  @param  This                  A pointer to the EFI_DEVICE_IO_INTERFACE instance.
 | 
						|
  @param  Mapping               A resulting value to pass to Unmap().
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The range was mapped for the returned NumberOfBytes.
 | 
						|
  @retval EFI_DEVICE_ERROR      The system hardware could not map the requested address.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_IO_UNMAP)(
 | 
						|
  IN EFI_DEVICE_IO_PROTOCOL           *This,
 | 
						|
  IN VOID                             *Mapping
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Allocates pages that are suitable for an EFIBusMasterCommonBuffer mapping.
 | 
						|
 | 
						|
  @param  This                  A pointer to the EFI_DEVICE_IO_INTERFACE instance.
 | 
						|
  @param  Type                  The type allocation to perform.
 | 
						|
  @param  MemoryType            The type of memory to allocate, EfiBootServicesData or
 | 
						|
                                EfiRuntimeServicesData.
 | 
						|
  @param  Pages                 The number of pages to allocate.
 | 
						|
  @param  HostAddress           A pointer to store the base address of the allocated range.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The requested memory pages were allocated.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  The memory pages could not be allocated.
 | 
						|
  @retval EFI_INVALID_PARAMETER The requested memory type is invalid.
 | 
						|
  @retval EFI_UNSUPPORTED       The requested HostAddress is not supported on
 | 
						|
                                this platform.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_IO_ALLOCATE_BUFFER)(
 | 
						|
  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
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Flushes any posted write data to the device.
 | 
						|
 | 
						|
  @param  This                  A pointer to the EFI_DEVICE_IO_INTERFACE instance.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The buffers were flushed.
 | 
						|
  @retval EFI_DEVICE_ERROR      The buffers were not flushed due to a hardware error.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_IO_FLUSH)(
 | 
						|
  IN EFI_DEVICE_IO_PROTOCOL  *This
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Frees pages that were allocated with AllocateBuffer().
 | 
						|
 | 
						|
  @param  This                  A pointer to the EFI_DEVICE_IO_INTERFACE instance.
 | 
						|
  @param  Pages                 The number of pages to free.
 | 
						|
  @param  HostAddress           The base address of the range to free.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The requested memory pages were allocated.
 | 
						|
  @retval EFI_NOT_FOUND         The requested memory pages were not allocated with
 | 
						|
                                AllocateBuffer().
 | 
						|
  @retval EFI_INVALID_PARAMETER HostAddress is not page aligned or Pages is invalid.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_IO_FREE_BUFFER)(
 | 
						|
  IN EFI_DEVICE_IO_PROTOCOL           *This,
 | 
						|
  IN UINTN                            Pages,
 | 
						|
  IN EFI_PHYSICAL_ADDRESS             HostAddress
 | 
						|
  );
 | 
						|
 | 
						|
///
 | 
						|
/// This protocol provides the basic Memory, I/O, and PCI interfaces that
 | 
						|
/// are used to abstract accesses to devices.
 | 
						|
///
 | 
						|
struct _EFI_DEVICE_IO_PROTOCOL {
 | 
						|
  ///
 | 
						|
  /// Allows reads and writes to memory mapped I/O space.
 | 
						|
  ///
 | 
						|
  EFI_IO_ACCESS             Mem;
 | 
						|
  ///
 | 
						|
  /// Allows reads and writes to I/O space.
 | 
						|
  ///
 | 
						|
  EFI_IO_ACCESS             Io;
 | 
						|
  ///
 | 
						|
  /// Allows reads and writes to PCI configuration space.
 | 
						|
  ///
 | 
						|
  EFI_IO_ACCESS             Pci;
 | 
						|
  EFI_IO_MAP                Map;
 | 
						|
  EFI_PCI_DEVICE_PATH       PciDevicePath;
 | 
						|
  EFI_IO_UNMAP              Unmap;
 | 
						|
  EFI_IO_ALLOCATE_BUFFER    AllocateBuffer;
 | 
						|
  EFI_IO_FLUSH              Flush;
 | 
						|
  EFI_IO_FREE_BUFFER        FreeBuffer;
 | 
						|
};
 | 
						|
 | 
						|
extern EFI_GUID  gEfiDeviceIoProtocolGuid;
 | 
						|
 | 
						|
#endif
 |