summaryrefslogtreecommitdiff
path: root/src/vendorcode/amd/agesa/f16kb/Proc/GNB/Common/GnbIommu.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/vendorcode/amd/agesa/f16kb/Proc/GNB/Common/GnbIommu.h')
-rw-r--r--src/vendorcode/amd/agesa/f16kb/Proc/GNB/Common/GnbIommu.h195
1 files changed, 195 insertions, 0 deletions
diff --git a/src/vendorcode/amd/agesa/f16kb/Proc/GNB/Common/GnbIommu.h b/src/vendorcode/amd/agesa/f16kb/Proc/GNB/Common/GnbIommu.h
new file mode 100644
index 0000000000..c37c2148fa
--- /dev/null
+++ b/src/vendorcode/amd/agesa/f16kb/Proc/GNB/Common/GnbIommu.h
@@ -0,0 +1,195 @@
+/**
+ * @file
+ *
+ * Misc common definition
+ *
+ *
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: GNB
+ * @e \$Revision: 84150 $ @e \$Date: 2012-12-12 15:46:25 -0600 (Wed, 12 Dec 2012) $
+ *
+ */
+/*
+*****************************************************************************
+*
+ * Copyright (c) 2008 - 2013, Advanced Micro Devices, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of Advanced Micro Devices, Inc. nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+* ***************************************************************************
+*
+*/
+#ifndef _GNBIOMMU_H_
+#define _GNBIOMMU_H_
+
+#pragma pack (push, 1)
+
+
+/// IVRS block
+typedef enum {
+ IvrsIvhdBlock = 0x10, ///< I/O Virtualization Hardware Definition Block
+ IvrsIvmdBlock = 0x20, ///< I/O Virtualization Memory Definition Block for all peripherals
+ IvrsIvmdBlockSingle = 0x21, ///< IVMD block for specified peripheral
+ IvrsIvmdBlockRange = 0x22, ///< IVMD block for peripheral range
+ IvrsIvhdrBlock = 0x40, ///< IVHDR (Relative) block
+ IvrsIvmdrBlock = 0x50, ///< IVMDR (Relative) block for all peripherals
+ IvrsIvmdrBlockSingle = 0x51 ///< IVMDR block for last IVHDR
+} IVRS_BLOCK_TYPE;
+
+#define DEVICE_ID(PciAddress) (UINT16) (((PciAddress).Address.Bus << 8) | ((PciAddress).Address.Device << 3) | (PciAddress).Address.Function)
+
+/// IVHD entry types
+typedef enum {
+ IvhdEntryPadding = 0, ///< Table padding
+ IvhdEntrySelect = 2, ///< Select
+ IvhdEntryStartRange = 3, ///< Start Range
+ IvhdEntryEndRange = 4, ///< End Range
+ IvhdEntryAliasSelect = 66, ///< Alias select
+ IvhdEntryAliasStartRange = 67, ///< Alias start range
+ IvhdEntryExtendedSelect = 70, ///< Extended select
+ IvhdEntryExtendedStartRange = 71, ///< Extended Start range
+ IvhdEntrySpecialDevice = 72 ///< Special device
+} IVHD_ENTRY_TYPE;
+
+/// Special device variety
+typedef enum {
+ IvhdSpecialDeviceIoapic = 0x1, ///< IOAPIC
+ IvhdSpecialDeviceHpet = 0x2 ///< HPET
+} IVHD_SPECIAL_DEVICE;
+
+
+#define IVHD_FLAG_COHERENT BIT5
+#define IVHD_FLAG_IOTLBSUP BIT4
+#define IVHD_FLAG_ISOC BIT3
+#define IVHD_FLAG_RESPASSPW BIT2
+#define IVHD_FLAG_PASSPW BIT1
+#define IVHD_FLAG_PPRSUB BIT7
+#define IVHD_FLAG_PREFSUP BIT6
+
+#define IVHD_EFR_XTSUP_OFFSET 0
+#define IVHD_EFR_NXSUP_OFFSET 1
+#define IVHD_EFR_GTSUP_OFFSET 2
+#define IVHD_EFR_GLXSUP_OFFSET 3
+#define IVHD_EFR_IASUP_OFFSET 5
+#define IVHD_EFR_GASUP_OFFSET 6
+#define IVHD_EFR_HESUP_OFFSET 7
+#define IVHD_EFR_PASMAX_OFFSET 8
+#define IVHD_EFR_PNCOUNTERS_OFFSET 13
+#define IVHD_EFR_PNBANKS_OFFSET 17
+#define IVHD_EFR_MSINUMPPR_OFFSET 23
+#define IVHD_EFR_GATS_OFFSET 28
+#define IVHD_EFR_HATS_OFFSET 30
+
+#define IVINFO_HTATSRESV_MASK 0x00400000ul
+#define IVINFO_VASIZE_MASK 0x003F8000ul
+#define IVINFO_PASIZE_MASK 0x00007F00ul
+#define IVINFO_GASIZE_MASK 0x000000E0ul
+
+#define IVHD_INFO_MSINUM_OFFSET 0
+#define IVHD_INFO_UNITID_OFFSET 8
+
+#define IVMD_FLAG_EXCLUSION_RANGE BIT3
+#define IVMD_FLAG_IW BIT2
+#define IVMD_FLAG_IR BIT1
+#define IVMD_FLAG_UNITY BIT0
+
+/// IVRS header
+typedef struct {
+ UINT8 Sign[4]; ///< Signature
+ UINT32 TableLength; ///< Table Length
+ UINT8 Revision; ///< Revision
+ UINT8 Checksum; ///< Checksum
+ UINT8 OemId[6]; ///< OEM ID
+ UINT8 OemTableId[8]; ///< OEM Tabled ID
+ UINT32 OemRev; ///< OEM Revision
+ UINT8 CreatorId[4]; ///< Creator ID
+ UINT32 CreatorRev; ///< Creator Revision
+ UINT32 IvInfo; ///< IvInfo
+ UINT64 Reserved; ///< Reserved
+} IOMMU_IVRS_HEADER;
+
+/// IVRS IVHD Entry
+typedef struct {
+ UINT8 Type; ///< Type
+ UINT8 Flags; ///< Flags
+ UINT16 Length; ///< Length
+ UINT16 DeviceId; ///< DeviceId
+ UINT16 CapabilityOffset; ///< CapabilityOffset
+ UINT64 BaseAddress; ///< BaseAddress
+ UINT16 PciSegment; ///< Pci segment
+ UINT16 IommuInfo; ///< IOMMU info
+ UINT32 IommuEfr; ///< reserved
+} IVRS_IVHD_ENTRY;
+
+/// IVHD generic entry
+typedef struct {
+ UINT8 Type; ///< Type
+ UINT16 DeviceId; ///< Device id
+ UINT8 DataSetting; ///< Data settings
+} IVHD_GENERIC_ENTRY;
+
+///IVHD alias entry
+typedef struct {
+ UINT8 Type; ///< Type
+ UINT16 DeviceId; ///< Device id
+ UINT8 DataSetting; ///< Data settings
+ UINT8 Reserved; ///< Reserved
+ UINT16 AliasDeviceId; ///< Alias device id
+ UINT8 Reserved2; ///< Reserved
+} IVHD_ALIAS_ENTRY;
+
+///IVHD extended entry
+typedef struct {
+ UINT8 Type; ///< Type
+ UINT16 DeviceId; ///< Device id
+ UINT8 DataSetting; ///< Data settings
+ UINT32 ExtSetting; ///< Extended settings
+} IVHD_EXT_ENTRY;
+
+/// IVHD special entry
+typedef struct {
+ UINT8 Type; ///< Type
+ UINT16 Reserved; ///< Reserved
+ UINT8 DataSetting; ///< Data settings
+ UINT8 Handle; ///< Handle
+ UINT16 AliasDeviceId; ///< Alis device id
+ UINT8 Variety; ///< Variety
+} IVHD_SPECIAL_ENTRY;
+
+/// IVRS IVMD Entry
+typedef struct {
+ UINT8 Type; ///< Type
+ UINT8 Flags; ///< Flags
+ UINT16 Length; ///< Length
+ UINT16 DeviceId; ///< DeviceId
+ UINT16 AuxiliaryData; ///< Auxiliary data
+ UINT64 Reserved; ///< Reserved (0000_0000_0000_0000)
+ UINT64 BlockStart; ///< IVMD start address
+ UINT64 BlockLength; ///< IVMD memory block length
+} IVRS_IVMD_ENTRY;
+
+#pragma pack (pop)
+
+#endif