13eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
23eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
33e99020dbf0a159e34b84e7ae9125f2e368d5390lgaoCopyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>
4f57387d54bd8f2c0261834b2ad16155f1db63291hhtianThis program and the accompanying materials
53eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangare licensed and made available under the terms and conditions of the BSD License
63eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangwhich accompanies this distribution.  The full text of the license may be found at
73eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwanghttp://opensource.org/licenses/bsd-license.php
83eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
93eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangModule Name:
133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EfiPciCfg.h
153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangAbstract:
173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Abstract the common fields of PciCfg definition between Framework 0.9x
193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  and PI 1.0.
203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#ifndef _EFI_PCI_CFG_H_
243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define _EFI_PCI_CFG_H_
253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Framework specification 0.9x definition.
283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef enum {
303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  PeiPciCfgWidthUint8   = 0,
313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  PeiPciCfgWidthUint16  = 1,
323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  PeiPciCfgWidthUint32  = 2,
333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  PeiPciCfgWidthUint64  = 3,
343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  PeiPciCfgWidthMaximum
353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} PEI_PCI_CFG_PPI_WIDTH;
363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define PEI_PCI_CFG_ADDRESS(bus, dev, func, reg)  ( \
383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang      (UINT64) ((((UINTN) bus) << 24) + (((UINTN) dev) << 16) + (((UINTN) func) << 8) + ((UINTN) reg)) \
393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    ) & 0x00000000ffffffff
403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// PI 1.0 definition.
433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef enum {
453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiPeiPciCfgWidthUint8   = 0,
463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiPeiPciCfgWidthUint16  = 1,
473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiPeiPciCfgWidthUint32  = 2,
483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiPeiPciCfgWidthUint64  = 3,
493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiPeiPciCfgWidthMaximum
503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_PEI_PCI_CFG_PPI_WIDTH;
513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_PEI_PCI_CFG_ADDRESS(bus, dev, func, reg)   \
533e99020dbf0a159e34b84e7ae9125f2e368d5390lgao      (UINT64) ((((UINTN) (bus)) << 24) | \
543e99020dbf0a159e34b84e7ae9125f2e368d5390lgao                (((UINTN) (dev)) << 16) | \
553e99020dbf0a159e34b84e7ae9125f2e368d5390lgao                (((UINTN) (func)) << 8) | \
563e99020dbf0a159e34b84e7ae9125f2e368d5390lgao                ((reg) < 256 ? ((UINTN) (reg)): ((UINT64) (reg) << 32)))
573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#if (PI_SPECIFICATION_VERSION < 0x00010000)
593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct {
613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8 Register;
623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8 Function;
633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8 Device;
643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8 Bus;
653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8 Reserved[4];
663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} PEI_PCI_CFG_PPI_PCI_ADDRESS;
673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef PEI_PCI_CFG_PPI_PCI_ADDRESS        EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS;
693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#else
713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct {
733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8 Register;
743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8 Function;
753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8 Device;
763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8 Bus;
773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32 ExtendedRegister;
783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS;
793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#endif
803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#endif
82