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
 |