Upload BSD-licensed Vlv2TbltDevicePkg and Vlv2DeviceRefCodePkg to

https://svn.code.sf.net/p/edk2/code/trunk/edk2/, 

which are for MinnowBoard MAX open source project.


Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: David Wei <david.wei@intel.com>
Reviewed-by: Mike Wu <mike.wu@intel.com>
Reviewed-by: Hot Tian <hot.tian@intel.com>


git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16599 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
David Wei
2015-01-12 09:37:20 +00:00
committed by zwei4
parent 6f785cfcc3
commit 3cbfba02fe
518 changed files with 118538 additions and 0 deletions

View File

@@ -0,0 +1,98 @@
/*++
Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
PlatformBaseAddresses.h
Abstract:
Revision History
++*/
#ifndef _PLATFORM_BASE_ADDRESSES_H
#define _PLATFORM_BASE_ADDRESSES_H
//
// Define some fixed platform device location information
//
//
// Define platform base
//
//
// SIO
//
#define SIO_BASE_ADDRESS 0x0680
#define SIO_MONITORING_BASE_ADDRESS 0x0290
#define SIO_BASE_MASK 0xFFF0
#define WINDBOND_ECIR_BASE_ADDRESS 0x0810
#define SIO_MAILBOX_BASE_ADDRESS 0x0360 // Used by EC controller
#define SIO_EC_CHANNEL2 0x62 // Used by EC controller for offset 0x62 and 0x66
//
// South Cluster
//
#define ACPI_BASE_ADDRESS 0x0400
#define GPIO_BASE_ADDRESS 0x0500
#define SMBUS_BUS_DEV_FUNC 0x1F0300
#define SMBUS_BASE_ADDRESS 0xEFA0 // SMBus IO Base Address
#define SPI_BASE_ADDRESS 0xFED01000 // SPI Memory Base Address
#define PMC_BASE_ADDRESS 0xFED03000 // PMC Memory Base Address
#define SMBM_BASE_ADDRESS 0xFED04000 // SMBus Memory Base Address
#define IO_BASE_ADDRESS 0xFED0C000 // IO Memory Base Address
#define ILB_BASE_ADDRESS 0xFED08000 // ILB Memory Base Address
#define HPET_BASE_ADDRESS 0xFED00000 // HPET Base Address
#define RCBA_BASE_ADDRESS 0xFED1C000 // Root Complex Base Address
#define MPHY_BASE_ADDRESS 0xFEF00000 // MPHY Memory Base Address
#define PUNIT_BASE_ADDRESS 0xFED05000 // PUnit Memory Base Address
//
// GPIO GROUP OFFSET
//
#define GPIO_SCORE_OFFSET 0x0000
#define GPIO_NCORE_OFFSET 0x1000
#define GPIO_SSUS_OFFSET 0x2000
//
// MCH/CPU
//
#define DMI_BASE_ADDRESS 0xFED18000 // 4K, similar to IIO_RCBA // modify from bearlake -- cchew10
#define EP_BASE_ADDRESS 0xFED19000
#define MC_MMIO_BASE 0xFED14000 // Base Address for MMIO registers
//
// TPM
//
#define TPM_BASE_ADDRESS 0xFED40000 // Base address for TPM
//
// Local and I/O APIC addresses.
//
#define IO_APIC_ADDRESS 0xFEC00000
#define IIO_IOAPIC_ADDRESS 0xFEC90000
#define LOCAL_APIC_ADDRESS 0xFEE00000
#endif

View File

@@ -0,0 +1,66 @@
/*++
Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
Capsule.h
Abstract:
Capsule PPI definitions.
--*/
//
//
#ifndef _PEI_CAPSULE_PPI_H_
#define _PEI_CAPSULE_PPI_H_
#define PEI_CAPSULE_PPI_GUID \
{ \
0x3acf33ee, 0xd892, 0x40f4, 0xa2, 0xfc, 0x38, 0x54, 0xd2, 0xe1, 0x32, 0x3d \
}
EFI_FORWARD_DECLARATION (PEI_CAPSULE_PPI);
typedef
EFI_STATUS
(EFIAPI *PEI_CAPSULE_COALESCE) (
IN EFI_PEI_SERVICES **PeiServices,
IN OUT VOID **MemoryBase,
IN OUT UINTN *MemSize
);
typedef
EFI_STATUS
(EFIAPI *PEI_CAPSULE_CREATE_STATE) (
IN EFI_PEI_SERVICES **PeiServices,
IN VOID *CapsuleBase, // returned from coalesce
IN UINTN CapsuleSize // returned from coalesce
);
typedef
EFI_STATUS
(EFIAPI *PEI_CAPSULE_CHECK_CAPSULE_UPDATE) (
IN EFI_PEI_SERVICES **PeiServices
);
typedef struct _PEI_CAPSULE_PPI {
PEI_CAPSULE_COALESCE Coalesce;
PEI_CAPSULE_CHECK_CAPSULE_UPDATE CheckCapsuleUpdate;
PEI_CAPSULE_CREATE_STATE CreateState;
} PEI_CAPSULE_PPI;
extern EFI_GUID gPeiCapsulePpiGuid;
#endif // #ifndef _PEI_CAPSULE_PPI_H_

View File

@@ -0,0 +1,150 @@
/*++
Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
PlatformMemoryRange.h
Abstract:
Platform Memory Range PPI as defined in EFI 2.0
PPI for reserving special purpose memory ranges.
--*/
//
//
#ifndef _PEI_PLATFORM_MEMORY_RANGE_H_
#define _PEI_PLATFORM_MEMORY_RANGE_H_
#define PEI_PLATFORM_MEMORY_RANGE_PPI_GUID \
{ \
0x30eb2979, 0xb0f7, 0x4d60, 0xb2, 0xdc, 0x1a, 0x2c, 0x96, 0xce, 0xb1, 0xf4 \
}
typedef struct _PEI_PLATFORM_MEMORY_RANGE_PPI PEI_PLATFORM_MEMORY_RANGE_PPI ;
#define PEI_MEMORY_RANGE_OPTION_ROM UINT32
#define PEI_MR_OPTION_ROM_ALL 0xFFFFFFFF
#define PEI_MR_OPTION_ROM_NONE 0x00000000
#define PEI_MR_OPTION_ROM_C0000_16K 0x00000001
#define PEI_MR_OPTION_ROM_C4000_16K 0x00000002
#define PEI_MR_OPTION_ROM_C8000_16K 0x00000004
#define PEI_MR_OPTION_ROM_CC000_16K 0x00000008
#define PEI_MR_OPTION_ROM_D0000_16K 0x00000010
#define PEI_MR_OPTION_ROM_D4000_16K 0x00000020
#define PEI_MR_OPTION_ROM_D8000_16K 0x00000040
#define PEI_MR_OPTION_ROM_DC000_16K 0x00000080
#define PEI_MR_OPTION_ROM_E0000_16K 0x00000100
#define PEI_MR_OPTION_ROM_E4000_16K 0x00000200
#define PEI_MR_OPTION_ROM_E8000_16K 0x00000400
#define PEI_MR_OPTION_ROM_EC000_16K 0x00000800
#define PEI_MR_OPTION_ROM_F0000_16K 0x00001000
#define PEI_MR_OPTION_ROM_F4000_16K 0x00002000
#define PEI_MR_OPTION_ROM_F8000_16K 0x00004000
#define PEI_MR_OPTION_ROM_FC000_16K 0x00008000
//
// SMRAM Memory Range
//
#define PEI_MEMORY_RANGE_SMRAM UINT32
#define PEI_MR_SMRAM_ALL 0xFFFFFFFF
#define PEI_MR_SMRAM_NONE 0x00000000
#define PEI_MR_SMRAM_CACHEABLE_MASK 0x80000000
#define PEI_MR_SMRAM_SEGTYPE_MASK 0x00FF0000
#define PEI_MR_SMRAM_ABSEG_MASK 0x00010000
#define PEI_MR_SMRAM_HSEG_MASK 0x00020000
#define PEI_MR_SMRAM_TSEG_MASK 0x00040000
//
// If adding additional entries, SMRAM Size
// is a multiple of 128KB.
//
#define PEI_MR_SMRAM_SIZE_MASK 0x0000FFFF
#define PEI_MR_SMRAM_SIZE_128K_MASK 0x00000001
#define PEI_MR_SMRAM_SIZE_256K_MASK 0x00000002
#define PEI_MR_SMRAM_SIZE_512K_MASK 0x00000004
#define PEI_MR_SMRAM_SIZE_1024K_MASK 0x00000008
#define PEI_MR_SMRAM_SIZE_2048K_MASK 0x00000010
#define PEI_MR_SMRAM_SIZE_4096K_MASK 0x00000020
#define PEI_MR_SMRAM_SIZE_8192K_MASK 0x00000040
#define PEI_MR_SMRAM_ABSEG_128K_NOCACHE 0x00010001
#define PEI_MR_SMRAM_HSEG_128K_CACHE 0x80020001
#define PEI_MR_SMRAM_HSEG_128K_NOCACHE 0x00020001
#define PEI_MR_SMRAM_TSEG_128K_CACHE 0x80040001
#define PEI_MR_SMRAM_TSEG_128K_NOCACHE 0x00040001
#define PEI_MR_SMRAM_TSEG_256K_CACHE 0x80040002
#define PEI_MR_SMRAM_TSEG_256K_NOCACHE 0x00040002
#define PEI_MR_SMRAM_TSEG_512K_CACHE 0x80040004
#define PEI_MR_SMRAM_TSEG_512K_NOCACHE 0x00040004
#define PEI_MR_SMRAM_TSEG_1024K_CACHE 0x80040008
#define PEI_MR_SMRAM_TSEG_1024K_NOCACHE 0x00040008
//
// Graphics Memory Range
//
#define PEI_MEMORY_RANGE_GRAPHICS_MEMORY UINT32
#define PEI_MR_GRAPHICS_MEMORY_ALL 0xFFFFFFFF
#define PEI_MR_GRAPHICS_MEMORY_NONE 0x00000000
#define PEI_MR_GRAPHICS_MEMORY_CACHEABLE 0x80000000
//
// If adding additional entries, Graphics Memory Size
// is a multiple of 512KB.
//
#define PEI_MR_GRAPHICS_MEMORY_SIZE_MASK 0x0000FFFF
#define PEI_MR_GRAPHICS_MEMORY_512K_NOCACHE 0x00000001
#define PEI_MR_GRAPHICS_MEMORY_512K_CACHE 0x80000001
#define PEI_MR_GRAPHICS_MEMORY_1M_NOCACHE 0x00000002
#define PEI_MR_GRAPHICS_MEMORY_1M_CACHE 0x80000002
#define PEI_MR_GRAPHICS_MEMORY_4M_NOCACHE 0x00000008
#define PEI_MR_GRAPHICS_MEMORY_4M_CACHE 0x80000008
#define PEI_MR_GRAPHICS_MEMORY_8M_NOCACHE 0x00000010
#define PEI_MR_GRAPHICS_MEMORY_8M_CACHE 0x80000010
#define PEI_MR_GRAPHICS_MEMORY_16M_NOCACHE 0x00000020
#define PEI_MR_GRAPHICS_MEMORY_16M_CACHE 0x80000020
#define PEI_MR_GRAPHICS_MEMORY_32M_NOCACHE 0x00000040
#define PEI_MR_GRAPHICS_MEMORY_32M_CACHE 0x80000040
#define PEI_MR_GRAPHICS_MEMORY_48M_NOCACHE 0x00000060
#define PEI_MR_GRAPHICS_MEMORY_48M_CACHE 0x80000060
#define PEI_MR_GRAPHICS_MEMORY_64M_NOCACHE 0x00000080
#define PEI_MR_GRAPHICS_MEMORY_64M_CACHE 0x80000080
#define PEI_MR_GRAPHICS_MEMORY_128M_NOCACHE 0x00000100
#define PEI_MR_GRAPHICS_MEMORY_128M_CACHE 0x80000100
#define PEI_MR_GRAPHICS_MEMORY_256M_NOCACHE 0x00000200
#define PEI_MR_GRAPHICS_MEMORY_256M_CACHE 0x80000200
//
// Pci Memory Hole
//
#define PEI_MEMORY_RANGE_PCI_MEMORY UINT32
#define PEI_MR_PCI_MEMORY_SIZE_512M_MASK 0x00000001
typedef
EFI_STATUS
(EFIAPI *PEI_CHOOSE_RANGES) (
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_PLATFORM_MEMORY_RANGE_PPI * This,
IN OUT PEI_MEMORY_RANGE_OPTION_ROM * OptionRomMask,
IN OUT PEI_MEMORY_RANGE_SMRAM * SmramMask,
IN OUT PEI_MEMORY_RANGE_GRAPHICS_MEMORY * GraphicsMemoryMask,
IN OUT PEI_MEMORY_RANGE_PCI_MEMORY * PciMemoryMask
);
struct _PEI_PLATFORM_MEMORY_RANGE_PPI {
PEI_CHOOSE_RANGES ChooseRanges;
};
extern EFI_GUID gPeiPlatformMemoryRangePpiGuid;
#endif

View File

@@ -0,0 +1,52 @@
/*++
Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
PlatformMemorySize.h
Abstract:
Platform Memory Size PPI as defined in Tiano
PPI for describing the minimum platform memory size in order to successfully
pass control into DXE
--*/
//
//
#ifndef _PEI_PLATFORM_MEMORY_SIZE_H_
#define _PEI_PLATFORM_MEMORY_SIZE_H_
#define PEI_PLATFORM_MEMORY_SIZE_PPI_GUID \
{ \
0x9a7ef41e, 0xc140, 0x4bd1, 0xb8, 0x84, 0x1e, 0x11, 0x24, 0xb, 0x4c, 0xe6 \
}
EFI_FORWARD_DECLARATION (PEI_PLATFORM_MEMORY_SIZE_PPI);
typedef
EFI_STATUS
(EFIAPI *PEI_GET_MINIMUM_PLATFORM_MEMORY_SIZE) (
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_PLATFORM_MEMORY_SIZE_PPI * This,
IN OUT UINT64 *MemorySize
);
typedef struct _PEI_PLATFORM_MEMORY_SIZE_PPI {
PEI_GET_MINIMUM_PLATFORM_MEMORY_SIZE GetPlatformMemorySize;
} PEI_PLATFORM_MEMORY_SIZE_PPI;
extern EFI_GUID gPeiPlatformMemorySizePpiGuid;
#endif

View File

@@ -0,0 +1,171 @@
//
//
/*++
Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
SmmAccess.h
Abstract:
SmmAccess PPI
This code abstracts the PEI core to provide SmmAccess services.
--*/
#ifndef _PEI_SMM_ACCESS_PPI_H_
#define _PEI_SMM_ACCESS_PPI_H_
#ifdef ECP_FLAG
#include "Guid/SmramMemoryReserve/SmramMemoryReserve.h"
#else
#include "Guid/SmramMemoryReserve.h"
#endif
#define PEI_SMM_ACCESS_PPI_GUID \
{ \
0x268f33a9, 0xcccd, 0x48be, 0x88, 0x17, 0x86, 0x5, 0x3a, 0xc3, 0x2e, 0xd6 \
}
typedef struct _PEI_SMM_ACCESS_PPI PEI_SMM_ACCESS_PPI;
typedef
EFI_STATUS
(EFIAPI *PEI_SMM_OPEN) (
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_SMM_ACCESS_PPI *This,
IN UINTN DescriptorIndex
)
/*++
Routine Description:
This routine accepts a request to "open" a region of SMRAM. The
region could be legacy ABSEG, HSEG, or TSEG near top of physical memory.
The use of "open" means that the memory is visible from all PEIM
and SMM agents.
Arguments:
PeiServices - General purpose services available to every PEIM.
This - Pointer to the SMM Access Interface.
DescriptorIndex - Region of SMRAM to Open.
Returns:
EFI_SUCCESS - The region was successfully opened.
EFI_DEVICE_ERROR - The region could not be opened because locked by
chipset.
EFI_INVALID_PARAMETER - The descriptor index was out of bounds.
--*/
;
typedef
EFI_STATUS
(EFIAPI *PEI_SMM_CLOSE) (
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_SMM_ACCESS_PPI *This,
IN UINTN DescriptorIndex
)
/*++
Routine Description:
This routine accepts a request to "close" a region of SMRAM. The
region could be legacy AB or TSEG near top of physical memory.
The use of "close" means that the memory is only visible from SMM agents,
not from PEIM.
Arguments:
PeiServices - General purpose services available to every PEIM.
This - Pointer to the SMM Access Interface.
DescriptorIndex - Region of SMRAM to Close.
Returns:
EFI_SUCCESS - The region was successfully closed.
EFI_DEVICE_ERROR - The region could not be closed because locked by
chipset.
EFI_INVALID_PARAMETER - The descriptor index was out of bounds.
--*/
;
typedef
EFI_STATUS
(EFIAPI *PEI_SMM_LOCK) (
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_SMM_ACCESS_PPI *This,
IN UINTN DescriptorIndex
)
/*++
Routine Description:
This routine accepts a request to "lock" SMRAM. The
region could be legacy AB or TSEG near top of physical memory.
The use of "lock" means that the memory can no longer be opened
to PEIM.
Arguments:
PeiServices - General purpose services available to every PEIM.
This - Pointer to the SMM Access Interface.
DescriptorIndex - Region of SMRAM to Lock.
Returns:
EFI_SUCCESS - The region was successfully locked.
EFI_DEVICE_ERROR - The region could not be locked because at least
one range is still open.
EFI_INVALID_PARAMETER - The descriptor index was out of bounds.
--*/
;
typedef
EFI_STATUS
(EFIAPI *PEI_SMM_CAPABILITIES) (
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_SMM_ACCESS_PPI *This,
IN OUT UINTN *SmramMapSize,
IN OUT EFI_SMRAM_DESCRIPTOR *SmramMap
)
/*++
Routine Description:
This routine services a user request to discover the SMRAM
capabilities of this platform. This will report the possible
ranges that are possible for SMRAM access, based upon the
memory controller capabilities.
Arguments:
PeiServices - General purpose services available to every PEIM.
This - Pointer to the SMRAM Access Interface.
SmramMapSize - Pointer to the variable containing size of the
buffer to contain the description information.
SmramMap - Buffer containing the data describing the Smram
region descriptors.
Returns:
EFI_BUFFER_TOO_SMALL - The user did not provide a sufficient buffer.
EFI_SUCCESS - The user provided a sufficiently-sized buffer.
--*/
;
struct _PEI_SMM_ACCESS_PPI {
PEI_SMM_OPEN Open;
PEI_SMM_CLOSE Close;
PEI_SMM_LOCK Lock;
PEI_SMM_CAPABILITIES GetCapabilities;
BOOLEAN LockState;
BOOLEAN OpenState;
};
extern EFI_GUID gPeiSmmAccessPpiGuid;
#endif

View File

@@ -0,0 +1,45 @@
/*++
Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
VlvMmioPolicy.h
Abstract:
Interface definition details between ValleyView platform drivers during PEI phase.
--*/
#ifndef _VLV_MMIO_POLICY_PPI_H_
#define _VLV_MMIO_POLICY_PPI_H_
#define VLV_MMIO_POLICY_PPI_GUID \
{ \
0xE767BF7F, 0x4DB6, 0x5B34, 0x10, 0x11, 0x4F, 0xBE, 0x4C, 0xA7, 0xAF, 0xD2 \
}
extern EFI_GUID gVlvMmioPolicyPpiGuid;
//
// MRC Platform Policiy PPI
//
typedef struct _VLV_MMIO_POLICY_PPI {
UINT16 MmioSize;
} VLV_MMIO_POLICY_PPI;
#pragma pack()
#endif // _VLV_MMIO_POLICY_PPI_H_

View File

@@ -0,0 +1,41 @@
/*++
Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
VlvPeiInit.h
Abstract:
Interface definition between ValleyView MRC and VlvInitPeim driver..
--*/
#ifndef _VLV_PEI_INIT_H_
#define _VLV_PEI_INIT_H_
//
// Define the VLV PEI Init PPI GUID
//
#define VLV_PEI_INIT_PPI_GUID \
{ \
0x9ea8911, 0xbe0d, 0x4230, 0xa0, 0x3, 0xed, 0xc6, 0x93, 0xb4, 0x8e, 0x11 \
}
//
// Extern the GUID for PPI users.
//
extern EFI_GUID gVlvPeiInitPpiGuid;
#endif

View File

@@ -0,0 +1,112 @@
/*++
Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
VlvPolicy.h
Abstract:
Interface definition details between ValleyView MRC and platform drivers during PEI phase.
--*/
#ifndef _VLV_POLICY_PPI_H_
#define _VLV_POLICY_PPI_H_
//
// MRC Policy provided by platform for PEI phase {7D84B2C2-22A1-4372-B12C-EBB232D3A6A3}
//
#define VLV_POLICY_PPI_GUID \
{ \
0x7D84B2C2, 0x22A1, 0x4372, 0xB1, 0x2C, 0xEB, 0xB2, 0x32, 0xD3, 0xA6, 0xA3 \
}
//
// Extern the GUID for protocol users.
//
extern EFI_GUID gVlvPolicyPpiGuid;
//
// PPI revision number
// Any backwards compatible changes to this PPI will result in an update in the revision number
// Major changes will require publication of a new PPI
//
#define MRC_PLATFORM_POLICY_PPI_REVISION 1
#ifndef MAX_SOCKETS
#define MAX_SOCKETS 4
#endif
#define S3_TIMING_DATA_LEN 9
#define S3_READ_TRAINING_DATA_LEN 16
#define S3_WRITE_TRAINING_DATA_LEN 12
#ifndef S3_RESTORE_DATA_LEN
#define S3_RESTORE_DATA_LEN (S3_TIMING_DATA_LEN + S3_READ_TRAINING_DATA_LEN + S3_WRITE_TRAINING_DATA_LEN)
#endif // S3_RESTORE_DATA_LEN
#pragma pack(1)
//
// MRC Platform Data Structure
//
typedef struct {
UINT8 SpdAddressTable[MAX_SOCKETS];
UINT8 TSonDimmSmbusAddress[MAX_SOCKETS];
UINT16 SmbusBar;
UINT32 IchRcba;
UINT32 WdbBaseAddress; // Write Data Buffer area (WC caching mode)
UINT32 WdbRegionSize;
UINT32 SmBusAddress;
UINT8 UserBd;
UINT8 PlatformType;
UINT8 FastBoot;
UINT8 DynSR;
} VLV_PLATFORM_DATA;
typedef struct {
UINT16 MmioSize;
UINT16 GttSize;
UINT8 IgdDvmt50PreAlloc;
UINT8 PrimaryDisplay;
UINT8 PAVPMode;
UINT8 ApertureSize;
UINT8 InternalGraphics;
UINT8 IgdTurboEn;
} GT_CONFIGURATION;
typedef struct {
UINT8 EccSupport;
UINT16 DdrFreqLimit;
UINT8 MaxTolud;
} MEMORY_CONFIGURATION;
//
// MRC Platform Policiy PPI
//
typedef struct _VLV_POLICY_PPI {
UINT8 Revision;
VLV_PLATFORM_DATA PlatformData;
GT_CONFIGURATION GtConfig;
MEMORY_CONFIGURATION MemConfig;
VOID *S3DataPtr; // was called MRC_PARAMS_SAVE_RESTORE
UINT8 ISPEn; //ISP (IUNIT) Device Enabled
UINT8 ISPPciDevConfig; //ISP (IUNIT) Device Config: 0->B0/D2/F0 for Window OS, 1->B0D3/F0 for Linux OS
} VLV_POLICY_PPI;
#pragma pack()
#endif // _VLV_POLICY_PPI_H_

View File

@@ -0,0 +1,219 @@
/*++
Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
IgdOpRegion.h
Abstract:
This file is part of the IGD OpRegion Implementation. The IGD OpRegion is
an interface between system BIOS, ASL code, and Graphics drivers.
Supporting Specifiction: IGD OpRegion/Software SCI SPEC
Note: Data structures defined in this protocol are packed not naturally
aligned.
GUID forms:
{CDC5DDDF-E79D-41ec-A9B0-6565490DB9D3}
(0xcdc5dddf, 0xe79d, 0x41ec, 0xa9, 0xb0, 0x65, 0x65, 0x49, 0xd, 0xb9, 0xd3);
Acronyms:
NVS: ACPI Non Volatile Storage
OpRegion: ACPI Operational Region
VBT: Video BIOS Table (OEM customizable data)
--*/
#ifndef _IGD_OPREGION_PROTOCOL_H_
#define _IGD_OPREGION_PROTOCOL_H_
//
// OpRegion / Software SCI protocol GUID
//
#define IGD_OPREGION_PROTOCOL_GUID \
{ \
0xcdc5dddf, 0xe79d, 0x41ec, 0xa9, 0xb0, 0x65, 0x65, 0x49, 0xd, 0xb9, 0xd3 \
}
//
// Extern the GUID for protocol users.
//
extern EFI_GUID gIgdOpRegionProtocolGuid;
//
// Forward reference for pure ANSI compatability
//
typedef struct _IGD_OPREGION_PROTOCOL IGD_OPREGION_PROTOCOL;
//
// Protocol data definitions
//
//
// OpRegion structures:
// Sub-structures define the different parts of the OpRegion followed by the
// main structure representing the entire OpRegion.
//
// Note: These structures are packed to 1 byte offsets because the exact
// data location is requred by the supporting design specification due to
// the fact that the data is used by ASL and Graphics driver code compiled
// separatly.
//
//
// OpRegion header (mailbox 0) structure and #defines.
//
#pragma pack (1)
typedef struct {
CHAR8 SIGN[0x10]; // 0 OpRegion signature
UINT32 SIZE; // 0x10 OpRegion size
UINT32 OVER; // 0x14 OpRegion structure version
UINT8 SVER[0x20]; // 0x18 System BIOS build version
UINT8 VVER[0x10]; // 0x38 Video BIOS build version
UINT8 GVER[0x10]; // 0x48 Graphic driver build version
UINT32 MBOX; // 0x58 Mailboxes supported
UINT32 DMOD; // 0x5C Driver Model
UINT32 PCON; // 0x60 Platform Configuration Info
CHAR8 GOPV[0x20]; // 0X64 GOP build version
UINT8 RSV[0x7C]; // Reserved
} OPREGION_HEADER;
#pragma pack ()
//
// OpRegion mailbox 1 (public ACPI Methods).
//
#pragma pack (1)
typedef struct {
UINT32 DRDY; // 0 Driver readiness
UINT32 CSTS; // 4 Status
UINT32 CEVT; // 8 Current event
UINT8 RM11[0x14]; // 12 Reserved
UINT32 DIDL; // 32 Supported display devices list
UINT32 DDL2; // 8 Devices.
UINT32 DDL3;
UINT32 DDL4;
UINT32 DDL5;
UINT32 DDL6;
UINT32 DDL7;
UINT32 DDL8;
UINT32 CPDL; // 64 Currently present display devices list
UINT32 CPL2; // 8 Devices.
UINT32 CPL3;
UINT32 CPL4;
UINT32 CPL5;
UINT32 CPL6;
UINT32 CPL7;
UINT32 CPL8;
UINT32 CADL; // 96 Currently active display devices list
UINT32 CAL2; // 8 Devices.
UINT32 CAL3;
UINT32 CAL4;
UINT32 CAL5;
UINT32 CAL6;
UINT32 CAL7;
UINT32 CAL8;
UINT32 NADL; // 128 Next active device list
UINT32 NDL2; // 8 Devices.
UINT32 NDL3;
UINT32 NDL4;
UINT32 NDL5;
UINT32 NDL6;
UINT32 NDL7;
UINT32 NDL8;
UINT32 ASLP; // 160 ASL sleep timeout
UINT32 TIDX; // 164 Toggle table index
UINT32 CHPD; // 168 Current hot plug enable indicator
UINT32 CLID; // 172 Current lid state indicator
UINT32 CDCK; // 176 Current docking state indicator
UINT32 SXSW; // 180 Display Switch notification on Sx State resume
UINT32 EVTS; // 184 Events supported by ASL
UINT32 CNOT; // 188 Current OS Notification
UINT32 NRDY; // 192 Reasons for DRDY = 0
UINT8 RM12[0x3C]; // 196 Reserved
} OPREGION_MBOX1;
#pragma pack ()
//
// OpRegion mailbox 2 (Software SCI Interface).
//
#pragma pack (1)
typedef struct {
UINT32 SCIC; // 0 Software SCI function number parameters
UINT32 PARM; // 4 Software SCI additional parameters
UINT32 DSLP; // 8 Driver sleep timeout
UINT8 RM21[0xF4]; // 12 Reserved
} OPREGION_MBOX2;
#pragma pack ()
//
// OpRegion mailbox 3 (Power Conservation).
//
#pragma pack (1)
typedef struct {
UINT32 ARDY; // 0 Driver readiness
UINT32 ASLC; // 4 ASLE interrupt command / status
UINT32 TCHE; // 8 Technology enabled indicator
UINT32 ALSI; // 12 Current ALS illuminance reading
UINT32 BCLP; // 16 Backlight britness to set
UINT32 PFIT; // 20 Panel fitting Current State or Request
UINT32 CBLV; // 24 Brightness Current State
UINT16 BCLM[0x14]; // 28 Backlight Brightness Level Duty Cycle Mapping Table
UINT32 CPFM; // 68 Panel Fitting Current Mode
UINT32 EPFM; // 72 Enabled Panel Fitting Mode
UINT8 PLUT[0x4A]; // 76 Panel Look Up Table
UINT32 PFMB; // 150 PWM Frequency and Minimum Brightness
UINT32 CCDV; // 154 Color Correction Default Values
UINT32 PCFT; // 158 Power Conservation Features
UINT8 RM31[0x5E]; // 162 Reserved
} OPREGION_MBOX3;
#pragma pack ()
//
// OpRegion mailbox 4 (VBT).
//
#pragma pack (1)
typedef struct {
UINT8 GVD1[0x1800]; // 6K Reserved
} OPREGION_VBT;
#pragma pack ()
#pragma pack (1)
typedef struct {
UINT8 EDIDOVRD[0x400]; // 6K Edid overriding data
} OPREGION_MBOX5;
#pragma pack ()
//
// Entire OpRegion
//
#pragma pack (1)
typedef struct {
OPREGION_HEADER Header; // OpRegion header
OPREGION_MBOX1 MBox1; // Mailbox 1: Public ACPI Methods
OPREGION_MBOX2 MBox2; // Mailbox 2: Software SCI Inteface
OPREGION_MBOX3 MBox3; // Mailbox 3: Power Conservation
OPREGION_VBT VBT; // VBT: Video BIOS Table (OEM customizable data)
OPREGION_MBOX5 MBox5;
} IGD_OPREGION_STRUC;
#pragma pack ()
//
// Protocol data structure definition
//
struct _IGD_OPREGION_PROTOCOL {
IGD_OPREGION_STRUC *OpRegion;
};
#endif

View File

@@ -0,0 +1,89 @@
/*++
Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
MemInfo.h
Abstract:
This protocol provides the memory information data, such as
total physical memory size, memory frequency, memory size
of each dimm and rank.
This protocol is EFI compatible.
--*/
#ifndef _MEM_INFO_PROTOCOL_H_
#define _MEM_INFO_PROTOCOL_H_
//
// Define the protocol GUID
//
#define MEM_INFO_PROTOCOL_GUID \
{ \
0x6f20f7c8, 0xe5ef, 0x4f21, 0x8d, 0x19, 0xed, 0xc5, 0xf0, 0xc4, 0x96, 0xae \
}
//
// Extern the GUID for protocol users.
//
extern EFI_GUID gMemInfoProtocolGuid;
//
// Forward reference for ANSI C compatibility
//
typedef struct _MEM_INFO_PROTOCOL MEM_INFO_PROTOCOL;
//
// Protocol definitions
//
#define CH_NUM 2
#define DIMM_NUM 1
#define RANK_NUM 2
#pragma pack(1)
typedef struct {
UINT32 memSize;
UINT8 ddrFreq;
UINT8 ddrType;
BOOLEAN EccSupport;
UINT16 dimmSize[CH_NUM * DIMM_NUM];
UINT8 reserved;
UINT16 reserved2;
} MEMORY_INFO_DATA;
#pragma pack()
/*++
Data definition:
memSize Total physical memory size
ddrFreq DDR Frequency
EccSupport ECC Support
dimmSize Dimm Size
DimmExist Dimm Present or not
RankInDimm No. of ranks in a dimm
--*/
//
// Protocol definition
//
struct _MEM_INFO_PROTOCOL {
MEMORY_INFO_DATA MemInfoData;
};
#endif

View File

@@ -0,0 +1,73 @@
/*++
Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
--*/
/** @file
**/
#ifndef _PLATFORM_GOP_POLICY_PROTOCOL_H_
#define _PLATFORM_GOP_POLICY_PROTOCOL_H_
#define EFI_PLATFORM_GOP_POLICY_PROTOCOL_GUID \
{ 0xec2e931b, 0x3281, 0x48a5, 0x81, 0x7, 0xdf, 0x8a, 0x8b, 0xed, 0x3c, 0x5d }
#define EFI_BMP_IMAGE_GUID \
{ 0x878AC2CC, 0x5343, 0x46F2, 0xB5, 0x63, 0x51, 0xF8, 0x9D, 0xAF, 0x56, 0xBA }
#define PLATFORM_GOP_POLICY_PROTOCOL_REVISION_01 0x01
#define PLATFORM_GOP_POLICY_PROTOCOL_REVISION_02 x0222
#pragma pack(1)
typedef enum {
LidClosed,
LidOpen,
LidStatusMax
} LID_STATUS;
typedef enum {
Docked,
UnDocked,
DockStatusMax
} DOCK_STATUS;
typedef
EFI_STATUS
(EFIAPI *GET_PLATFORM_LID_STATUS) (
OUT LID_STATUS *CurrentLidStatus
);
typedef
EFI_STATUS
(EFIAPI *GET_VBT_DATA) (
OUT EFI_PHYSICAL_ADDRESS *VbtAddress,
OUT UINT32 *VbtSize
);
#pragma pack()
typedef struct _PLATFORM_GOP_POLICY_PROTOCOL {
UINT32 Revision;
GET_PLATFORM_LID_STATUS GetPlatformLidStatus;
GET_VBT_DATA GetVbtData;
} PLATFORM_GOP_POLICY_PROTOCOL;
//
// Extern the GUID for protocol users.
//
extern EFI_GUID gPlatformGOPPolicyGuid;
extern EFI_GUID gBmpImageGuid;
#endif

View File

@@ -0,0 +1,111 @@
/*++
Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
VlvPlatformPolicy.h
Abstract:
Interface definition details between MCH and platform drivers during DXE phase.
--*/
#ifndef _VLV_PLATFORM_POLICY_H_
#define _VLV_PLATFORM_POLICY_H_
//
// VLV Policy provided by platform for DXE phase {5BAB88BA-E0E2-4674-B6AD-B812F6881CD6}
//
#define DXE_VLV_PLATFORM_POLICY_GUID \
{0x5bab88ba, 0xe0e2, 0x4674, 0xb6, 0xad, 0xb8, 0x12, 0xf6, 0x88, 0x1c, 0xd6}
//
// Extern the GUID for protocol users.
//
extern EFI_GUID gDxeVlvPlatformPolicyGuid;
//
// Protocol revision number
// Any backwards compatible changes to this protocol will result in an update in the revision number
// Major changes will require publication of a new protocol
//
#define DXE_VLV_PLATFORM_POLICY_PROTOCOL_REVISION 0
typedef struct {
UINT8 PFITStatus;
UINT8 IgdTheramlSupport;
UINT8 ALSEnabled;
UINT8 LidStatus;
} IGD_PANEL_FEATURES;
typedef struct {
UINT8 Reserved00;
UINT8 Reserved01;
UINT16 Reserved02;
UINT16 Reserved03;
UINT16 Reserved04;
UINT16 Reserved05;
UINT16 Reserved06;
UINT16 Reserved07;
UINT16 Reserved08;
UINT16 Reserved09;
UINT16 Reserved0A;
UINT16 Reserved0B;
UINT16 Reserved0C;
UINT16 Reserved0D;
UINT8 Reserved0E;
UINT8 Reserved0F;
UINT32 Reserved10;
UINT32 Reserved11;
UINT32 Reserved12;
UINT32 Reserved13;
UINT32 Reserved14;
UINT8 Reserved15;
UINT8 Reserved16;
} DPTF_SETTINGS;
//
// MCH DXE Platform Policiy ==================================================
//
#define NO_AUDIO 0
#define HD_AUDIO 1
#define LPE_AUDIO 2
typedef struct _DXE_VLV_PLATFORM_POLICY_PROTOCOL {
UINT8 Revision;
IGD_PANEL_FEATURES IgdPanelFeatures;
DPTF_SETTINGS Reserved;
UINT8 GraphicReserve00;
UINT8 GraphicsPerfAnalyzers;
UINT8 PwmReserved00;
UINT8 PwmReserved01;
UINT8 PmSupport;
UINT8 GraphicReserve01;
UINT8 GfxPause;
UINT8 GraphicsFreqReq;
UINT8 GraphicReserve03;
UINT8 GraphicReserve02;
UINT8 GraphicReserve04;
UINT8 PavpMode;
UINT8 GraphicReserve05;
UINT8 UlClockGating;
UINT8 IdleReserve;
UINT8 AudioTypeSupport;
UINT8 GraphicReserve06;
} DXE_VLV_PLATFORM_POLICY_PROTOCOL;
#endif

View File

@@ -0,0 +1,61 @@
/*++
Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
Valleyview.h
Abstract:
This header file provides common definitions just for Valleyview-SOC using to avoid including extra module's file.
--*/
#ifndef _MC_H_INCLUDED_
#define _MC_H_INCLUDED_
/*
< Extended Configuration Base Address.*/
#define EC_BASE 0xE0000000
//
// DEVICE 0 (Memroy Controller Hub)
//
#define MC_BUS 0x00
#define MC_DEV 0x00
#define MC_DEV2 0x02
#define MC_FUN 0x00
// NC DEV 0 Vendor and Device IDs
#define MC_VID 0x8086
#define MC_DID_OFFSET 0x2 //Device Identification
#define MC_GGC_OFFSET 0x50 //GMCH Graphics Control Register
//
// Device 2 Register Equates
//
#define IGD_BUS 0x00
#define IGD_DEV 0x02
#define IGD_FUN_0 0x00
#define IGD_FUN_1 0x01
#define IGD_DEV_FUN (IGD_DEV << 3)
#define IGD_BUS_DEV_FUN (MC_BUS << 8) + IGD_DEV_FUN
#define IGD_VID 0x8086
#define IGD_DID 0xA001
#define IGD_MGGC_OFFSET 0x0050 //GMCH Graphics Control Register 0x50
#define IGD_BSM_OFFSET 0x005C //Base of Stolen Memory
#define IGD_SWSCI_OFFSET 0x00E0 //Software SCI 0xE0 2
#define IGD_ASLE_OFFSET 0x00E4 //System Display Event Register 0xE4 4
#define IGD_ASLS_OFFSET 0x00FC // ASL Storage
#define IGD_DID_QS 0x0BE2 //RCOverride -a: Fix the DID error
#endif

View File

@@ -0,0 +1,260 @@
/*++
Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
vlvAccess.h
Abstract:
Macros to simplify and abstract the interface to PCI configuration.
--*/
#ifndef _VLVACCESS_H_INCLUDED_
#define _VLVACCESS_H_INCLUDED_
#include "Valleyview.h"
#include "VlvCommonDefinitions.h"
#include <Library/IoLib.h>
//
// Memory Mapped IO access macros used by MSG BUS LIBRARY
//
#define MmioAddress( BaseAddr, Register ) \
( (UINTN)BaseAddr + \
(UINTN)(Register) \
)
//
// UINT32
//
#define Mmio32Ptr( BaseAddr, Register ) \
( (volatile UINT32 *)MmioAddress( BaseAddr, Register ) )
#define Mmio32( BaseAddr, Register ) \
*Mmio32Ptr( BaseAddr, Register )
#define Mmio32Or( BaseAddr, Register, OrData ) \
Mmio32( BaseAddr, Register ) = \
(UINT32) ( \
Mmio32( BaseAddr, Register ) | \
(UINT32)(OrData) \
)
#define Mmio32And( BaseAddr, Register, AndData ) \
Mmio32( BaseAddr, Register ) = \
(UINT32) ( \
Mmio32( BaseAddr, Register ) & \
(UINT32)(AndData) \
)
#define Mmio32AndThenOr( BaseAddr, Register, AndData, OrData ) \
Mmio32( BaseAddr, Register ) = \
(UINT32) ( \
( Mmio32( BaseAddr, Register ) & \
(UINT32)(AndData) \
) | \
(UINT32)(OrData) \
)
//
// UINT16
//
#define Mmio16Ptr( BaseAddr, Register ) \
( (volatile UINT16 *)MmioAddress( BaseAddr, Register ) )
#define Mmio16( BaseAddr, Register ) \
*Mmio16Ptr( BaseAddr, Register )
#define Mmio16Or( BaseAddr, Register, OrData ) \
Mmio16( BaseAddr, Register ) = \
(UINT16) ( \
Mmio16( BaseAddr, Register ) | \
(UINT16)(OrData) \
)
#define Mmio16And( BaseAddr, Register, AndData ) \
Mmio16( BaseAddr, Register ) = \
(UINT16) ( \
Mmio16( BaseAddr, Register ) & \
(UINT16)(AndData) \
)
#define Mmio16AndThenOr( BaseAddr, Register, AndData, OrData ) \
Mmio16( BaseAddr, Register ) = \
(UINT16) ( \
( Mmio16( BaseAddr, Register ) & \
(UINT16)(AndData) \
) | \
(UINT16)(OrData) \
)
//
// UINT8
//
#define Mmio8Ptr( BaseAddr, Register ) \
( (volatile UINT8 *)MmioAddress( BaseAddr, Register ) )
#define Mmio8( BaseAddr, Register ) \
*Mmio8Ptr( BaseAddr, Register )
#define Mmio8Or( BaseAddr, Register, OrData ) \
Mmio8( BaseAddr, Register ) = \
(UINT8) ( \
Mmio8( BaseAddr, Register ) | \
(UINT8)(OrData) \
)
#define Mmio8And( BaseAddr, Register, AndData ) \
Mmio8( BaseAddr, Register ) = \
(UINT8) ( \
Mmio8( BaseAddr, Register ) & \
(UINT8)(AndData) \
)
#define Mmio8AndThenOr( BaseAddr, Register, AndData, OrData ) \
Mmio8( BaseAddr, Register ) = \
(UINT8) ( \
( Mmio8( BaseAddr, Register ) & \
(UINT8)(AndData) \
) | \
(UINT8)(OrData) \
)
//
// MSG BUS API
//
#define MSG_BUS_ENABLED 0x000000F0
#define MSGBUS_MASKHI 0xFFFFFF00
#define MSGBUS_MASKLO 0x000000FF
#define MESSAGE_BYTE_EN BIT4
#define MESSAGE_WORD_EN BIT4 | BIT5
#define MESSAGE_DWORD_EN BIT4 | BIT5 | BIT6 | BIT7
#define SIDEBAND_OPCODE 0x78
#define MEMREAD_OPCODE 0x00000000
#define MEMWRITE_OPCODE 0x01000000
/***************************/
//
// Memory mapped PCI IO
//
#define PciCfgPtr(Bus, Device, Function, Register )\
(UINTN)(Bus << 20) + \
(UINTN)(Device << 15) + \
(UINTN)(Function << 12) + \
(UINTN)(Register)
#define PciCfg32Read_CF8CFC(B,D,F,R) \
(UINT32)(IoOut32(0xCF8,(0x80000000|(B<<16)|(D<<11)|(F<<8)|(R))),IoIn32(0xCFC))
#define PciCfg32Write_CF8CFC(B,D,F,R,Data) \
(IoOut32(0xCF8,(0x80000000|(B<<16)|(D<<11)|(F<<8)|(R))),IoOut32(0xCFC,Data))
#define PciCfg32Or_CF8CFC(B,D,F,R,O) \
PciCfg32Write_CF8CFC(B,D,F,R, \
(PciCfg32Read_CF8CFC(B,D,F,R) | (O)))
#define PciCfg32And_CF8CFC(B,D,F,R,A) \
PciCfg32Write_CF8CFC(B,D,F,R, \
(PciCfg32Read_CF8CFC(B,D,F,R) & (A)))
#define PciCfg32AndThenOr_CF8CFC(B,D,F,R,A,O) \
PciCfg32Write_CF8CFC(B,D,F,R, \
(PciCfg32Read_CF8CFC(B,D,F,R) & (A)) | (O))
//
// Device 0, Function 0
//
#define McD0PciCfg64(Register) MmPci64 (0, MC_BUS, 0, 0, Register)
#define McD0PciCfg64Or(Register, OrData) MmPci64Or (0, MC_BUS, 0, 0, Register, OrData)
#define McD0PciCfg64And(Register, AndData) MmPci64And (0, MC_BUS, 0, 0, Register, AndData)
#define McD0PciCfg64AndThenOr(Register, AndData, OrData) MmPci64AndThenOr (0, MC_BUS, 0, 0, Register, AndData, OrData)
#define McD0PciCfg32(Register) MmPci32 (0, MC_BUS, 0, 0, Register)
#define McD0PciCfg32Or(Register, OrData) MmPci32Or (0, MC_BUS, 0, 0, Register, OrData)
#define McD0PciCfg32And(Register, AndData) MmPci32And (0, MC_BUS, 0, 0, Register, AndData)
#define McD0PciCfg32AndThenOr(Register, AndData, OrData) MmPci32AndThenOr (0, MC_BUS, 0, 0, Register, AndData, OrData)
#define McD0PciCfg16(Register) MmPci16 (0, MC_BUS, 0, 0, Register)
#define McD0PciCfg16Or(Register, OrData) MmPci16Or (0, MC_BUS, 0, 0, Register, OrData)
#define McD0PciCfg16And(Register, AndData) MmPci16And (0, MC_BUS, 0, 0, Register, AndData)
#define McD0PciCfg16AndThenOr(Register, AndData, OrData) MmPci16AndThenOr (0, MC_BUS, 0, 0, Register, AndData, OrData)
#define McD0PciCfg8(Register) MmPci8 (0, MC_BUS, 0, 0, Register)
#define McD0PciCfg8Or(Register, OrData) MmPci8Or (0, MC_BUS, 0, 0, Register, OrData)
#define McD0PciCfg8And(Register, AndData) MmPci8And (0, MC_BUS, 0, 0, Register, AndData)
#define McD0PciCfg8AndThenOr( Register, AndData, OrData ) MmPci8AndThenOr (0, MC_BUS, 0, 0, Register, AndData, OrData)
//
// Device 2, Function 0
//
#define McD2PciCfg64(Register) MmPci64 (0, MC_BUS, 2, 0, Register)
#define McD2PciCfg64Or(Register, OrData) MmPci64Or (0, MC_BUS, 2, 0, Register, OrData)
#define McD2PciCfg64And(Register, AndData) MmPci64And (0, MC_BUS, 2, 0, Register, AndData)
#define McD2PciCfg64AndThenOr(Register, AndData, OrData) MmPci64AndThenOr (0, MC_BUS, 2, 0, Register, AndData, OrData)
#define McD2PciCfg32(Register) MmPci32 (0, MC_BUS, 2, 0, Register)
#define McD2PciCfg32Or(Register, OrData) MmPci32Or (0, MC_BUS, 2, 0, Register, OrData)
#define McD2PciCfg32And(Register, AndData) MmPci32And (0, MC_BUS, 2, 0, Register, AndData)
#define McD2PciCfg32AndThenOr(Register, AndData, OrData) MmPci32AndThenOr (0, MC_BUS, 2, 0, Register, AndData, OrData)
#define McD2PciCfg16(Register) MmPci16 (0, MC_BUS, 2, 0, Register)
#define McD2PciCfg16Or(Register, OrData) MmPci16Or (0, MC_BUS, 2, 0, Register, OrData)
#define McD2PciCfg16And(Register, AndData) MmPci16And (0, MC_BUS, 2, 0, Register, AndData)
#define McD2PciCfg16AndThenOr(Register, AndData, OrData) MmPci16AndThenOr (0, MC_BUS, 2, 0, Register, AndData, OrData)
#define McD2PciCfg8(Register) MmPci8 (0, MC_BUS, 2, 0, Register)
#define McD2PciCfg8Or(Register, OrData) MmPci8Or (0, MC_BUS, 2, 0, Register, OrData)
#define McD2PciCfg8And(Register, AndData) MmPci8And (0, MC_BUS, 2, 0, Register, AndData)
//
// IO
//
#ifndef IoIn8
#define IoIn8(Port) \
IoRead8(Port)
#define IoIn16(Port) \
IoRead16(Port)
#define IoIn32(Port) \
IoRead32(Port)
#define IoOut8(Port, Data) \
IoWrite8(Port, Data)
#define IoOut16(Port, Data) \
IoWrite16(Port, Data)
#define IoOut32(Port, Data) \
IoWrite32(Port, Data)
#endif
#endif

View File

@@ -0,0 +1,258 @@
/*++
Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
VlvCommonDefinitions.h
Abstract:
Macros to simplify and abstract the interface to PCI configuration.
--*/
///
/// PCI CONFIGURATION MAP REGISTER OFFSETS
///
#ifndef PCI_VID
#define PCI_VID 0x0000 ///< Vendor ID Register
#define PCI_DID 0x0002 ///< Device ID Register
#define PCI_CMD 0x0004 ///< PCI Command Register
#define PCI_STS 0x0006 ///< PCI Status Register
#define PCI_RID 0x0008 ///< Revision ID Register
#define PCI_IFT 0x0009 ///< Interface Type
#define PCI_SCC 0x000A ///< Sub Class Code Register
#define PCI_BCC 0x000B ///< Base Class Code Register
#define PCI_CLS 0x000C ///< Cache Line Size
#define PCI_PMLT 0x000D ///< Primary Master Latency Timer
#define PCI_HDR 0x000E ///< Header Type Register
#define PCI_BIST 0x000F ///< Built in Self Test Register
#define PCI_BAR0 0x0010 ///< Base Address Register 0
#define PCI_BAR1 0x0014 ///< Base Address Register 1
#define PCI_BAR2 0x0018 ///< Base Address Register 2
#define PCI_PBUS 0x0018 ///< Primary Bus Number Register
#define PCI_SBUS 0x0019 ///< Secondary Bus Number Register
#define PCI_SUBUS 0x001A ///< Subordinate Bus Number Register
#define PCI_SMLT 0x001B ///< Secondary Master Latency Timer
#define PCI_BAR3 0x001C ///< Base Address Register 3
#define PCI_IOBASE 0x001C ///< I/O base Register
#define PCI_IOLIMIT 0x001D ///< I/O Limit Register
#define PCI_SECSTATUS 0x001E ///< Secondary Status Register
#define PCI_BAR4 0x0020 ///< Base Address Register 4
#define PCI_MEMBASE 0x0020 ///< Memory Base Register
#define PCI_MEMLIMIT 0x0022 ///< Memory Limit Register
#define PCI_BAR5 0x0024 ///< Base Address Register 5
#define PCI_PRE_MEMBASE 0x0024 ///< Prefetchable memory Base register
#define PCI_PRE_MEMLIMIT 0x0026 ///< Prefetchable memory Limit register
#define PCI_PRE_MEMBASE_U 0x0028 ///< Prefetchable memory base upper 32 bits
#define PCI_PRE_MEMLIMIT_U 0x002C ///< Prefetchable memory limit upper 32 bits
#define PCI_SVID 0x002C ///< Subsystem Vendor ID
#define PCI_SID 0x002E ///< Subsystem ID
#define PCI_IOBASE_U 0x0030 ///< I/O base Upper Register
#define PCI_IOLIMIT_U 0x0032 ///< I/O Limit Upper Register
#define PCI_CAPP 0x0034 ///< Capabilities Pointer
#define PCI_EROM 0x0038 ///< Expansion ROM Base Address
#define PCI_INTLINE 0x003C ///< Interrupt Line Register
#define PCI_INTPIN 0x003D ///< Interrupt Pin Register
#define PCI_MAXGNT 0x003E ///< Max Grant Register
#define PCI_BRIDGE_CNTL 0x003E ///< Bridge Control Register
#define PCI_MAXLAT 0x003F ///< Max Latency Register
#endif
//
// Bit Difinitions
//
#ifndef BIT0
#define BIT0 0x0001
#define BIT1 0x0002
#define BIT2 0x0004
#define BIT3 0x0008
#define BIT4 0x0010
#define BIT5 0x0020
#define BIT6 0x0040
#define BIT7 0x0080
#define BIT8 0x0100
#define BIT9 0x0200
#define BIT10 0x0400
#define BIT11 0x0800
#define BIT12 0x1000
#define BIT13 0x2000
#define BIT14 0x4000
#define BIT15 0x8000
#define BIT16 0x00010000
#define BIT17 0x00020000
#define BIT18 0x00040000
#define BIT19 0x00080000
#define BIT20 0x00100000
#define BIT21 0x00200000
#define BIT22 0x00400000
#define BIT23 0x00800000
#define BIT24 0x01000000
#define BIT25 0x02000000
#define BIT26 0x04000000
#define BIT27 0x08000000
#define BIT28 0x10000000
#define BIT29 0x20000000
#define BIT30 0x40000000
#define BIT31 0x80000000
#endif
#ifndef _PCIACCESS_H_INCLUDED_
#define _PCIACCESS_H_INCLUDED_
#ifndef PCI_EXPRESS_BASE_ADDRESS
#define PCI_EXPRESS_BASE_ADDRESS 0xE0000000
#endif
#ifndef MmPciAddress
#define MmPciAddress( Segment, Bus, Device, Function, Register ) \
( (UINTN)PCI_EXPRESS_BASE_ADDRESS + \
(UINTN)(Bus << 20) + \
(UINTN)(Device << 15) + \
(UINTN)(Function << 12) + \
(UINTN)(Register) \
)
#endif
//
// UINT64
//
#define MmPci64Ptr( Segment, Bus, Device, Function, Register ) \
( (volatile UINT64 *)MmPciAddress( Segment, Bus, Device, Function, Register ) )
#define MmPci64( Segment, Bus, Device, Function, Register ) \
*MmPci64Ptr( Segment, Bus, Device, Function, Register )
#define MmPci64Or( Segment, Bus, Device, Function, Register, OrData ) \
MmPci64( Segment, Bus, Device, Function, Register ) = \
(UINT64) ( \
MmPci64( Segment, Bus, Device, Function, Register ) | \
(UINT64)(OrData) \
)
#define MmPci64And( Segment, Bus, Device, Function, Register, AndData ) \
MmPci64( Segment, Bus, Device, Function, Register ) = \
(UINT64) ( \
MmPci64( Segment, Bus, Device, Function, Register ) & \
(UINT64)(AndData) \
)
#define MmPci64AndThenOr( Segment, Bus, Device, Function, Register, AndData, OrData ) \
MmPci64( Segment, Bus, Device, Function, Register ) = \
(UINT64) ( \
( MmPci64( Segment, Bus, Device, Function, Register ) & \
(UINT64)(AndData) \
) | \
(UINT64)(OrData) \
)
//
// UINT32
//
#define MmPci32Ptr( Segment, Bus, Device, Function, Register ) \
( (volatile UINT32 *) MmPciAddress( Segment, Bus, Device, Function, Register ) )
#define MmPci32( Segment, Bus, Device, Function, Register ) \
*MmPci32Ptr( Segment, Bus, Device, Function, Register )
#define MmPci32Or( Segment, Bus, Device, Function, Register, OrData ) \
MmPci32( Segment, Bus, Device, Function, Register ) = \
(UINT32) ( \
MmPci32( Segment, Bus, Device, Function, Register ) | \
(UINT32)(OrData) \
)
#define MmPci32And( Segment, Bus, Device, Function, Register, AndData ) \
MmPci32( Segment, Bus, Device, Function, Register ) = \
(UINT32) ( \
MmPci32( Segment, Bus, Device, Function, Register ) & \
(UINT32)(AndData) \
)
#define MmPci32AndThenOr( Segment, Bus, Device, Function, Register, AndData, OrData ) \
MmPci32( Segment, Bus, Device, Function, Register ) = \
(UINT32) ( \
( MmPci32( Segment, Bus, Device, Function, Register ) & \
(UINT32)(AndData) \
) | \
(UINT32)(OrData) \
)
//
// UINT16
//
#define MmPci16Ptr( Segment, Bus, Device, Function, Register ) \
( (volatile UINT16 *)MmPciAddress( Segment, Bus, Device, Function, Register ) )
#define MmPci16( Segment, Bus, Device, Function, Register ) \
*MmPci16Ptr( Segment, Bus, Device, Function, Register )
#define MmPci16Or( Segment, Bus, Device, Function, Register, OrData ) \
MmPci16( Segment, Bus, Device, Function, Register ) = \
(UINT16) ( \
MmPci16( Segment, Bus, Device, Function, Register ) | \
(UINT16)(OrData) \
)
#define MmPci16And( Segment, Bus, Device, Function, Register, AndData ) \
MmPci16( Segment, Bus, Device, Function, Register ) = \
(UINT16) ( \
MmPci16( Segment, Bus, Device, Function, Register ) & \
(UINT16)(AndData) \
)
#define MmPci16AndThenOr( Segment, Bus, Device, Function, Register, AndData, OrData ) \
MmPci16( Segment, Bus, Device, Function, Register ) = \
(UINT16) ( \
( MmPci16( Segment, Bus, Device, Function, Register ) & \
(UINT16)(AndData) \
) | \
(UINT16)(OrData) \
)
//
// UINT8
//
#define MmPci8Ptr( Segment, Bus, Device, Function, Register ) \
( (volatile UINT8 *)MmPciAddress( Segment, Bus, Device, Function, Register ) )
#define MmPci8( Segment, Bus, Device, Function, Register ) \
*MmPci8Ptr( Segment, Bus, Device, Function, Register )
#define MmPci8Or( Segment, Bus, Device, Function, Register, OrData ) \
MmPci8( Segment, Bus, Device, Function, Register ) = \
(UINT8) ( \
MmPci8( Segment, Bus, Device, Function, Register ) | \
(UINT8)(OrData) \
)
#define MmPci8And( Segment, Bus, Device, Function, Register, AndData ) \
MmPci8( Segment, Bus, Device, Function, Register ) = \
(UINT8) ( \
MmPci8( Segment, Bus, Device, Function, Register ) & \
(UINT8)(AndData) \
)
#define MmPci8AndThenOr( Segment, Bus, Device, Function, Register, AndData, OrData ) \
MmPci8( Segment, Bus, Device, Function, Register ) = \
(UINT8) ( \
( MmPci8( Segment, Bus, Device, Function, Register ) & \
(UINT8)(AndData) \
) | \
(UINT8)(OrData) \
)
#endif