Home | History | Annotate | Download | only in DeviceIo
      1 /*++
      2 
      3 Copyright (c) 2004, Intel Corporation. All rights reserved.<BR>
      4 This program and the accompanying materials
      5 are licensed and made available under the terms and conditions of the BSD License
      6 which accompanies this distribution.  The full text of the license may be found at
      7 http://opensource.org/licenses/bsd-license.php
      8 
      9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     11 
     12 Module Name:
     13 
     14   DeviceIo.h
     15 
     16 Abstract:
     17 
     18   Device IO protocol as defined in the EFI 1.0 specification.
     19 
     20   Device IO is used to abstract hardware access to devices. It includes
     21   memory mapped IO, IO, PCI Config space, and DMA.
     22 
     23 
     24 --*/
     25 
     26 #ifndef _DEVICE_IO_H_
     27 #define _DEVICE_IO_H_
     28 
     29 #define EFI_DEVICE_IO_PROTOCOL_GUID \
     30   { \
     31     0xaf6ac311, 0x84c3, 0x11d2, {0x8e, 0x3c, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b} \
     32   }
     33 
     34 EFI_FORWARD_DECLARATION (EFI_DEVICE_IO_PROTOCOL);
     35 
     36 typedef enum {
     37   IO_UINT8,
     38   IO_UINT16,
     39   IO_UINT32,
     40   IO_UINT64,
     41   MMIO_COPY_UINT8,
     42   MMIO_COPY_UINT16,
     43   MMIO_COPY_UINT32,
     44   MMIO_COPY_UINT64
     45 } EFI_IO_WIDTH;
     46 
     47 typedef
     48 EFI_STATUS
     49 (EFIAPI *EFI_DEVICE_IO) (
     50   IN EFI_DEVICE_IO_PROTOCOL         * This,
     51   IN EFI_IO_WIDTH                   Width,
     52   IN UINT64                         Address,
     53   IN UINTN                          Count,
     54   IN OUT VOID                       *Buffer
     55   );
     56 
     57 typedef struct {
     58   EFI_DEVICE_IO Read;
     59   EFI_DEVICE_IO Write;
     60 } EFI_IO_ACCESS;
     61 
     62 typedef
     63 EFI_STATUS
     64 (EFIAPI *EFI_PCI_DEVICE_PATH) (
     65   IN EFI_DEVICE_IO_PROTOCOL           * This,
     66   IN UINT64                           Address,
     67   IN OUT EFI_DEVICE_PATH_PROTOCOL     **PciDevicePath
     68   );
     69 
     70 typedef enum {
     71   EfiBusMasterRead,
     72   EfiBusMasterWrite,
     73   EfiBusMasterCommonBuffer
     74 } EFI_IO_OPERATION_TYPE;
     75 
     76 typedef
     77 EFI_STATUS
     78 (EFIAPI *EFI_IO_MAP) (
     79   IN EFI_DEVICE_IO_PROTOCOL           * This,
     80   IN EFI_IO_OPERATION_TYPE            Operation,
     81   IN EFI_PHYSICAL_ADDRESS             * HostAddress,
     82   IN OUT UINTN                        *NumberOfBytes,
     83   OUT EFI_PHYSICAL_ADDRESS            * DeviceAddress,
     84   OUT VOID                            **Mapping
     85   );
     86 
     87 typedef
     88 EFI_STATUS
     89 (EFIAPI *EFI_IO_UNMAP) (
     90   IN EFI_DEVICE_IO_PROTOCOL           * This,
     91   IN VOID                             *Mapping
     92   );
     93 
     94 typedef
     95 EFI_STATUS
     96 (EFIAPI *EFI_IO_ALLOCATE_BUFFER) (
     97   IN EFI_DEVICE_IO_PROTOCOL           * This,
     98   IN EFI_ALLOCATE_TYPE                Type,
     99   IN EFI_MEMORY_TYPE                  MemoryType,
    100   IN UINTN                            Pages,
    101   IN OUT EFI_PHYSICAL_ADDRESS         * HostAddress
    102   );
    103 
    104 typedef
    105 EFI_STATUS
    106 (EFIAPI *EFI_IO_FLUSH) (
    107   IN EFI_DEVICE_IO_PROTOCOL  * This
    108   );
    109 
    110 typedef
    111 EFI_STATUS
    112 (EFIAPI *EFI_IO_FREE_BUFFER) (
    113   IN EFI_DEVICE_IO_PROTOCOL           * This,
    114   IN UINTN                            Pages,
    115   IN EFI_PHYSICAL_ADDRESS             HostAddress
    116   );
    117 
    118 struct _EFI_DEVICE_IO_PROTOCOL {
    119   EFI_IO_ACCESS           Mem;
    120   EFI_IO_ACCESS           Io;
    121   EFI_IO_ACCESS           Pci;
    122   EFI_IO_MAP              Map;
    123   EFI_PCI_DEVICE_PATH     PciDevicePath;
    124   EFI_IO_UNMAP            Unmap;
    125   EFI_IO_ALLOCATE_BUFFER  AllocateBuffer;
    126   EFI_IO_FLUSH            Flush;
    127   EFI_IO_FREE_BUFFER      FreeBuffer;
    128 };
    129 
    130 extern EFI_GUID gEfiDeviceIoProtocolGuid;
    131 
    132 #endif
    133