Home | History | Annotate | Download | only in Ppi
      1 /** @file
      2   This file declares the PciCfg PPI used to access the PCI configuration space in PEI
      3 
      4 Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
      5 This program and the accompanying materials are licensed and made available under
      6 the terms and conditions of the BSD License that accompanies this distribution.
      7 The full text of the license may be found at
      8 http://opensource.org/licenses/bsd-license.php.
      9 
     10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13   @par Revision Reference:
     14   This PPI is defined in PEI CIS
     15   Version 0.91.
     16 
     17 **/
     18 
     19 #ifndef __PEI_PCI_CFG_H__
     20 #define __PEI_PCI_CFG_H__
     21 
     22 #include <Ppi/PciCfg2.h>
     23 //
     24 // Get the common definitions for EFI_PEI_PCI_CFG_PPI_WIDTH.
     25 //
     26 
     27 #define EFI_PEI_PCI_CFG_PPI_INSTALLED_GUID \
     28   { \
     29     0xe1f2eba0, 0xf7b9, 0x4a26, {0x86, 0x20, 0x13, 0x12, 0x21, 0x64, 0x2a, 0x90 } \
     30   }
     31 
     32 typedef struct _EFI_PEI_PCI_CFG_PPI   EFI_PEI_PCI_CFG_PPI;
     33 
     34 #define PEI_PCI_CFG_ADDRESS(bus, dev, func, reg)  ( \
     35       (UINT64) ((((UINTN) bus) << 24) + (((UINTN) dev) << 16) + (((UINTN) func) << 8) + ((UINTN) reg)) \
     36     ) & 0x00000000ffffffff
     37 
     38 /**
     39   PCI read and write operation.
     40 
     41   @param  PeiServices    An indirect pointer to the PEI Services Table
     42                          published by the PEI Foundation.
     43   @param  This           Pointer to local data for the interface.
     44   @param  Width          The width of the access. Enumerated in bytes.
     45   @param  Address        The physical address of the access.
     46   @param  Buffer         A pointer to the buffer of data.
     47 
     48   @retval EFI_SUCCESS           The function completed successfully.
     49   @retval EFI_NOT_YET_AVAILABLE The service has not been installed.
     50 
     51 **/
     52 typedef
     53 EFI_STATUS
     54 (EFIAPI *EFI_PEI_PCI_CFG_PPI_IO)(
     55   IN EFI_PEI_SERVICES             **PeiServices,
     56   IN EFI_PEI_PCI_CFG_PPI          *This,
     57   IN EFI_PEI_PCI_CFG_PPI_WIDTH    Width,
     58   IN UINT64                       Address,
     59   IN OUT VOID                     *Buffer
     60   );
     61 
     62 /**
     63   PCI read-modify-write operation.
     64 
     65   @param  PeiServices    An indirect pointer to the PEI Services Table
     66                          published by the PEI Foundation.
     67   @param  This           The pointer to local data for the interface.
     68   @param  Width          The width of the access. Enumerated in bytes.
     69   @param  Address        The physical address of the access.
     70   @param  SetBits        Value of the bits to set.
     71   @param  ClearBits      Value of the bits to clear.
     72 
     73   @retval EFI_SUCCESS           The function completed successfully.
     74 
     75 **/
     76 typedef
     77 EFI_STATUS
     78 (EFIAPI *EFI_PEI_PCI_CFG_PPI_RW)(
     79   IN EFI_PEI_SERVICES             **PeiServices,
     80   IN EFI_PEI_PCI_CFG_PPI          *This,
     81   IN EFI_PEI_PCI_CFG_PPI_WIDTH    Width,
     82   IN UINT64                       Address,
     83   IN UINTN                        SetBits,
     84   IN UINTN                        ClearBits
     85   );
     86 
     87 /**
     88   The EFI_PEI_PCI_CFG_PPI interfaces are used to abstract accesses to PCI
     89   controllers behind a PCI root bridge controller.
     90 **/
     91 struct _EFI_PEI_PCI_CFG_PPI {
     92   ///
     93   /// PCI read services.  See the Read() function description.
     94   ///
     95   EFI_PEI_PCI_CFG_PPI_IO  Read;
     96 
     97   ///
     98   /// PCI write services.  See the Write() function description.
     99   ///
    100   EFI_PEI_PCI_CFG_PPI_IO  Write;
    101 
    102   ///
    103   /// PCI read-modify-write services.  See the Modify() function description.
    104   ///
    105   EFI_PEI_PCI_CFG_PPI_RW  Modify;
    106 };
    107 
    108 extern EFI_GUID gEfiPciCfgPpiInServiceTableGuid;
    109 
    110 #endif
    111