Add sample for device scope based exception list
and PCI vendor id based exception list.
Cc: Star Zeng <star.zeng@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jiewen Yao <jiewen.yao@intel.com>
---
IntelSiliconPkg/PlatformVTdSampleDxe/PlatformVTdSampleDxe.c | 80 +++++++++++++++++---
1 file changed, 70 insertions(+), 10 deletions(-)
diff --git a/IntelSiliconPkg/PlatformVTdSampleDxe/PlatformVTdSampleDxe.c b/IntelSiliconPkg/PlatformVTdSampleDxe/PlatformVTdSampleDxe.c
index f181b94..95e0f3a 100644
--- a/IntelSiliconPkg/PlatformVTdSampleDxe/PlatformVTdSampleDxe.c
+++ b/IntelSiliconPkg/PlatformVTdSampleDxe/PlatformVTdSampleDxe.c
@@ -27,6 +27,8 @@
#include <Library/UefiBootServicesTableLib.h>
#include <Library/DevicePathLib.h>
+#include <IndustryStandard/DmaRemappingReportingTable.h>
+
typedef struct {
ACPI_EXTENDED_HID_DEVICE_PATH I2cController;
UINT8 HidStr[8];
@@ -137,10 +139,57 @@ PLATFORM_PCI_BRIDGE_DEVICE_PATH mPlatformPciBridgeDevicePath = {
PLATFORM_END_ENTIRE
};
-EDKII_PLATFORM_VTD_DEVICE_INFO mExceptionDeviceList[] = {
+#pragma pack(1)
+
+typedef struct {
+ EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO ExceptionDeviceInfo;
+ EDKII_PLATFORM_VTD_DEVICE_SCOPE DeviceScope;
+ EFI_ACPI_DMAR_PCI_PATH PciBridge;
+ EFI_ACPI_DMAR_PCI_PATH PciDevice;
+} PLATFORM_EXCEPTION_DEVICE_SCOPE_STRUCT;
+
+typedef struct {
+ EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO ExceptionDeviceInfo;
+ EDKII_PLATFORM_VTD_PCI_DEVICE_ID PciDeviceId;
+} PLATFORM_EXCEPTION_PCI_DEVICE_ID_STRUCT;
+
+#pragma pack()
+
+PLATFORM_EXCEPTION_DEVICE_SCOPE_STRUCT mExceptionDeviceScopeList[] = {
{
- 0x0, // Segment
- {{0x00, 0x00, 0x02}} // Function, Device, Bus
+ {
+ EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO_TYPE_DEVICE_SCOPE,
+ sizeof(PLATFORM_EXCEPTION_DEVICE_SCOPE_STRUCT)
+ }, // ExceptionDeviceInfo
+ {
+ 0, // SegmentNumber
+ {
+ EFI_ACPI_DEVICE_SCOPE_ENTRY_TYPE_PCI_ENDPOINT, // Type
+ sizeof(EFI_ACPI_DMAR_DEVICE_SCOPE_STRUCTURE_HEADER) +
+ 2 * sizeof(EFI_ACPI_DMAR_PCI_PATH), // Length
+ 0, // Reserved2
+ 0, // EnumerationId
+ 0, // StartBusNumber
+ },
+ }, // DeviceScope
+ { 0x1C, 1 }, // PciBridge
+ { 0x0, 0 }, // PciDevice
+ },
+};
+
+PLATFORM_EXCEPTION_PCI_DEVICE_ID_STRUCT mExceptionPciDeviceIdList[] = {
+ {
+ {
+ EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO_TYPE_PCI_DEVICE_ID,
+ sizeof(PLATFORM_EXCEPTION_DEVICE_SCOPE_STRUCT)
+ }, // ExceptionDeviceInfo
+ {
+ 0x8086, // VendorId
+ 0x9D2F, // DeviceId
+ 0x21, // RevisionId
+ 0x8086, // SubsystemVendorId
+ 0x7270, // SubsystemDeviceId
+ },
},
};
@@ -269,6 +318,7 @@ PlatformVTdGetDeviceId (
@param[in] This The protocol instance pointer.
@param[out] DeviceInfoCount The count of the list of DeviceInfo.
@param[out] DeviceInfo A callee allocated buffer to hold a list of DeviceInfo.
+ Each DeviceInfo pointer points to EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO.
@retval EFI_SUCCESS The DeviceInfoCount and DeviceInfo are returned.
@retval EFI_INVALID_PARAMETER DeviceInfoCount is NULL, or DeviceInfo is NULL.
@@ -280,7 +330,7 @@ EFIAPI
PlatformVTdGetExceptionDeviceList (
IN EDKII_PLATFORM_VTD_POLICY_PROTOCOL *This,
OUT UINTN *DeviceInfoCount,
- OUT EDKII_PLATFORM_VTD_DEVICE_INFO **DeviceInfo
+ OUT VOID **DeviceInfo
)
{
DEBUG ((DEBUG_VERBOSE, "PlatformVTdGetExceptionDeviceList\n"));
@@ -289,13 +339,23 @@ PlatformVTdGetExceptionDeviceList (
return EFI_INVALID_PARAMETER;
}
- *DeviceInfo = AllocateZeroPool (sizeof(mExceptionDeviceList));
- if (*DeviceInfo == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
- CopyMem (*DeviceInfo, mExceptionDeviceList, sizeof(mExceptionDeviceList));
+ if (0) {
+ *DeviceInfo = AllocateZeroPool (sizeof(mExceptionDeviceScopeList));
+ if (*DeviceInfo == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+ CopyMem (*DeviceInfo, mExceptionDeviceScopeList, sizeof(mExceptionDeviceScopeList));
+
+ *DeviceInfoCount = ARRAY_SIZE(mExceptionDeviceScopeList);
+ } else {
+ *DeviceInfo = AllocateZeroPool (sizeof(mExceptionPciDeviceIdList));
+ if (*DeviceInfo == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+ CopyMem (*DeviceInfo, mExceptionPciDeviceIdList, sizeof(mExceptionPciDeviceIdList));
- *DeviceInfoCount = ARRAY_SIZE(mExceptionDeviceList);
+ *DeviceInfoCount = ARRAY_SIZE(mExceptionPciDeviceIdList);
+ }
return EFI_SUCCESS;
}
--
2.7.4.windows.1
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
PLATFORM_EXCEPTION_DEVICE_SCOPE_STRUCT is used in mExceptionPciDeviceIdList, that is wrong and should be PLATFORM_EXCEPTION_PCI_DEVICE_ID_STRUCT.
Others are good to me. Reviewed-by: Star Zeng <star.zeng@intel.com>
+PLATFORM_EXCEPTION_PCI_DEVICE_ID_STRUCT mExceptionPciDeviceIdList[] =
+{
+ {
+ {
+ EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO_TYPE_PCI_DEVICE_ID,
+ sizeof(PLATFORM_EXCEPTION_DEVICE_SCOPE_STRUCT)
Thanks,
Star
-----Original Message-----
From: Yao, Jiewen
Sent: Friday, August 25, 2017 3:41 PM
To: edk2-devel@lists.01.org
Cc: Zeng, Star <star.zeng@intel.com>
Subject: [PATCH 3/3] IntelSiliconPkg/PlatformVTdSample: update ExceptionDevice
Add sample for device scope based exception list and PCI vendor id based exception list.
Cc: Star Zeng <star.zeng@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jiewen Yao <jiewen.yao@intel.com>
---
IntelSiliconPkg/PlatformVTdSampleDxe/PlatformVTdSampleDxe.c | 80 +++++++++++++++++---
1 file changed, 70 insertions(+), 10 deletions(-)
diff --git a/IntelSiliconPkg/PlatformVTdSampleDxe/PlatformVTdSampleDxe.c b/IntelSiliconPkg/PlatformVTdSampleDxe/PlatformVTdSampleDxe.c
index f181b94..95e0f3a 100644
--- a/IntelSiliconPkg/PlatformVTdSampleDxe/PlatformVTdSampleDxe.c
+++ b/IntelSiliconPkg/PlatformVTdSampleDxe/PlatformVTdSampleDxe.c
@@ -27,6 +27,8 @@
#include <Library/UefiBootServicesTableLib.h>
#include <Library/DevicePathLib.h>
+#include <IndustryStandard/DmaRemappingReportingTable.h>
+
typedef struct {
ACPI_EXTENDED_HID_DEVICE_PATH I2cController;
UINT8 HidStr[8];
@@ -137,10 +139,57 @@ PLATFORM_PCI_BRIDGE_DEVICE_PATH mPlatformPciBridgeDevicePath = {
PLATFORM_END_ENTIRE
};
-EDKII_PLATFORM_VTD_DEVICE_INFO mExceptionDeviceList[] = {
+#pragma pack(1)
+
+typedef struct {
+ EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO ExceptionDeviceInfo;
+ EDKII_PLATFORM_VTD_DEVICE_SCOPE DeviceScope;
+ EFI_ACPI_DMAR_PCI_PATH PciBridge;
+ EFI_ACPI_DMAR_PCI_PATH PciDevice;
+} PLATFORM_EXCEPTION_DEVICE_SCOPE_STRUCT;
+
+typedef struct {
+ EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO ExceptionDeviceInfo;
+ EDKII_PLATFORM_VTD_PCI_DEVICE_ID PciDeviceId;
+} PLATFORM_EXCEPTION_PCI_DEVICE_ID_STRUCT;
+
+#pragma pack()
+
+PLATFORM_EXCEPTION_DEVICE_SCOPE_STRUCT mExceptionDeviceScopeList[] = {
{
- 0x0, // Segment
- {{0x00, 0x00, 0x02}} // Function, Device, Bus
+ {
+ EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO_TYPE_DEVICE_SCOPE,
+ sizeof(PLATFORM_EXCEPTION_DEVICE_SCOPE_STRUCT)
+ }, // ExceptionDeviceInfo
+ {
+ 0, // SegmentNumber
+ {
+ EFI_ACPI_DEVICE_SCOPE_ENTRY_TYPE_PCI_ENDPOINT, // Type
+ sizeof(EFI_ACPI_DMAR_DEVICE_SCOPE_STRUCTURE_HEADER) +
+ 2 * sizeof(EFI_ACPI_DMAR_PCI_PATH), // Length
+ 0, // Reserved2
+ 0, // EnumerationId
+ 0, // StartBusNumber
+ },
+ }, // DeviceScope
+ { 0x1C, 1 }, // PciBridge
+ { 0x0, 0 }, // PciDevice
+ },
+};
+
+PLATFORM_EXCEPTION_PCI_DEVICE_ID_STRUCT mExceptionPciDeviceIdList[] =
+{
+ {
+ {
+ EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO_TYPE_PCI_DEVICE_ID,
+ sizeof(PLATFORM_EXCEPTION_DEVICE_SCOPE_STRUCT)
+ }, // ExceptionDeviceInfo
+ {
+ 0x8086, // VendorId
+ 0x9D2F, // DeviceId
+ 0x21, // RevisionId
+ 0x8086, // SubsystemVendorId
+ 0x7270, // SubsystemDeviceId
+ },
},
};
@@ -269,6 +318,7 @@ PlatformVTdGetDeviceId (
@param[in] This The protocol instance pointer.
@param[out] DeviceInfoCount The count of the list of DeviceInfo.
@param[out] DeviceInfo A callee allocated buffer to hold a list of DeviceInfo.
+ Each DeviceInfo pointer points to EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO.
@retval EFI_SUCCESS The DeviceInfoCount and DeviceInfo are returned.
@retval EFI_INVALID_PARAMETER DeviceInfoCount is NULL, or DeviceInfo is NULL.
@@ -280,7 +330,7 @@ EFIAPI
PlatformVTdGetExceptionDeviceList (
IN EDKII_PLATFORM_VTD_POLICY_PROTOCOL *This,
OUT UINTN *DeviceInfoCount,
- OUT EDKII_PLATFORM_VTD_DEVICE_INFO **DeviceInfo
+ OUT VOID **DeviceInfo
)
{
DEBUG ((DEBUG_VERBOSE, "PlatformVTdGetExceptionDeviceList\n"));
@@ -289,13 +339,23 @@ PlatformVTdGetExceptionDeviceList (
return EFI_INVALID_PARAMETER;
}
- *DeviceInfo = AllocateZeroPool (sizeof(mExceptionDeviceList));
- if (*DeviceInfo == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
- CopyMem (*DeviceInfo, mExceptionDeviceList, sizeof(mExceptionDeviceList));
+ if (0) {
+ *DeviceInfo = AllocateZeroPool (sizeof(mExceptionDeviceScopeList));
+ if (*DeviceInfo == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+ CopyMem (*DeviceInfo, mExceptionDeviceScopeList,
+ sizeof(mExceptionDeviceScopeList));
+
+ *DeviceInfoCount = ARRAY_SIZE(mExceptionDeviceScopeList);
+ } else {
+ *DeviceInfo = AllocateZeroPool (sizeof(mExceptionPciDeviceIdList));
+ if (*DeviceInfo == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+ CopyMem (*DeviceInfo, mExceptionPciDeviceIdList,
+ sizeof(mExceptionPciDeviceIdList));
- *DeviceInfoCount = ARRAY_SIZE(mExceptionDeviceList);
+ *DeviceInfoCount = ARRAY_SIZE(mExceptionPciDeviceIdList);
+ }
return EFI_SUCCESS;
}
--
2.7.4.windows.1
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Yes. Typical copy-paste issue.
Thanks to correct me.
> -----Original Message-----
> From: Zeng, Star
> Sent: Friday, August 25, 2017 5:39 PM
> To: Yao, Jiewen <jiewen.yao@intel.com>; edk2-devel@lists.01.org
> Cc: Zeng, Star <star.zeng@intel.com>
> Subject: RE: [PATCH 3/3] IntelSiliconPkg/PlatformVTdSample: update
> ExceptionDevice
>
> PLATFORM_EXCEPTION_DEVICE_SCOPE_STRUCT is used in
> mExceptionPciDeviceIdList, that is wrong and should be
> PLATFORM_EXCEPTION_PCI_DEVICE_ID_STRUCT.
> Others are good to me. Reviewed-by: Star Zeng <star.zeng@intel.com>
>
> +PLATFORM_EXCEPTION_PCI_DEVICE_ID_STRUCT mExceptionPciDeviceIdList[]
> =
> +{
> + {
> + {
> +
> EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO_TYPE_PCI_DEVICE_ID,
> + sizeof(PLATFORM_EXCEPTION_DEVICE_SCOPE_STRUCT)
>
>
> Thanks,
> Star
> -----Original Message-----
> From: Yao, Jiewen
> Sent: Friday, August 25, 2017 3:41 PM
> To: edk2-devel@lists.01.org
> Cc: Zeng, Star <star.zeng@intel.com>
> Subject: [PATCH 3/3] IntelSiliconPkg/PlatformVTdSample: update
> ExceptionDevice
>
> Add sample for device scope based exception list and PCI vendor id based
> exception list.
>
> Cc: Star Zeng <star.zeng@intel.com>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Jiewen Yao <jiewen.yao@intel.com>
> ---
> IntelSiliconPkg/PlatformVTdSampleDxe/PlatformVTdSampleDxe.c | 80
> +++++++++++++++++---
> 1 file changed, 70 insertions(+), 10 deletions(-)
>
> diff --git a/IntelSiliconPkg/PlatformVTdSampleDxe/PlatformVTdSampleDxe.c
> b/IntelSiliconPkg/PlatformVTdSampleDxe/PlatformVTdSampleDxe.c
> index f181b94..95e0f3a 100644
> --- a/IntelSiliconPkg/PlatformVTdSampleDxe/PlatformVTdSampleDxe.c
> +++ b/IntelSiliconPkg/PlatformVTdSampleDxe/PlatformVTdSampleDxe.c
> @@ -27,6 +27,8 @@
> #include <Library/UefiBootServicesTableLib.h>
> #include <Library/DevicePathLib.h>
>
> +#include <IndustryStandard/DmaRemappingReportingTable.h>
> +
> typedef struct {
> ACPI_EXTENDED_HID_DEVICE_PATH I2cController;
> UINT8 HidStr[8];
> @@ -137,10 +139,57 @@ PLATFORM_PCI_BRIDGE_DEVICE_PATH
> mPlatformPciBridgeDevicePath = {
> PLATFORM_END_ENTIRE
> };
>
> -EDKII_PLATFORM_VTD_DEVICE_INFO mExceptionDeviceList[] = {
> +#pragma pack(1)
> +
> +typedef struct {
> + EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO ExceptionDeviceInfo;
> + EDKII_PLATFORM_VTD_DEVICE_SCOPE DeviceScope;
> + EFI_ACPI_DMAR_PCI_PATH PciBridge;
> + EFI_ACPI_DMAR_PCI_PATH PciDevice;
> +} PLATFORM_EXCEPTION_DEVICE_SCOPE_STRUCT;
> +
> +typedef struct {
> + EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO ExceptionDeviceInfo;
> + EDKII_PLATFORM_VTD_PCI_DEVICE_ID PciDeviceId;
> +} PLATFORM_EXCEPTION_PCI_DEVICE_ID_STRUCT;
> +
> +#pragma pack()
> +
> +PLATFORM_EXCEPTION_DEVICE_SCOPE_STRUCT
> mExceptionDeviceScopeList[] = {
> {
> - 0x0, // Segment
> - {{0x00, 0x00, 0x02}} // Function, Device, Bus
> + {
> +
> EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO_TYPE_DEVICE_SCOPE,
> + sizeof(PLATFORM_EXCEPTION_DEVICE_SCOPE_STRUCT)
> + }, // ExceptionDeviceInfo
> + {
> + 0, //
> SegmentNumber
> + {
> + EFI_ACPI_DEVICE_SCOPE_ENTRY_TYPE_PCI_ENDPOINT, // Type
> + sizeof(EFI_ACPI_DMAR_DEVICE_SCOPE_STRUCTURE_HEADER) +
> + 2 * sizeof(EFI_ACPI_DMAR_PCI_PATH), // Length
> + 0, //
> Reserved2
> + 0, //
> EnumerationId
> + 0, //
> StartBusNumber
> + },
> + }, //
> DeviceScope
> + { 0x1C, 1 }, // PciBridge
> + { 0x0, 0 }, // PciDevice
> + },
> +};
> +
> +PLATFORM_EXCEPTION_PCI_DEVICE_ID_STRUCT mExceptionPciDeviceIdList[]
> =
> +{
> + {
> + {
> +
> EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO_TYPE_PCI_DEVICE_ID,
> + sizeof(PLATFORM_EXCEPTION_DEVICE_SCOPE_STRUCT)
> + }, // ExceptionDeviceInfo
> + {
> + 0x8086, //
> VendorId
> + 0x9D2F, // DeviceId
> + 0x21, //
> RevisionId
> + 0x8086, //
> SubsystemVendorId
> + 0x7270, //
> SubsystemDeviceId
> + },
> },
> };
>
> @@ -269,6 +318,7 @@ PlatformVTdGetDeviceId (
> @param[in] This The protocol instance pointer.
> @param[out] DeviceInfoCount The count of the list of DeviceInfo.
> @param[out] DeviceInfo A callee allocated buffer to hold a list
> of DeviceInfo.
> + Each DeviceInfo pointer points to
> EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO.
>
> @retval EFI_SUCCESS The DeviceInfoCount and DeviceInfo are
> returned.
> @retval EFI_INVALID_PARAMETER DeviceInfoCount is NULL, or DeviceInfo is
> NULL.
> @@ -280,7 +330,7 @@ EFIAPI
> PlatformVTdGetExceptionDeviceList (
> IN EDKII_PLATFORM_VTD_POLICY_PROTOCOL *This,
> OUT UINTN *DeviceInfoCount,
> - OUT EDKII_PLATFORM_VTD_DEVICE_INFO **DeviceInfo
> + OUT VOID **DeviceInfo
> )
> {
> DEBUG ((DEBUG_VERBOSE, "PlatformVTdGetExceptionDeviceList\n"));
> @@ -289,13 +339,23 @@ PlatformVTdGetExceptionDeviceList (
> return EFI_INVALID_PARAMETER;
> }
>
> - *DeviceInfo = AllocateZeroPool (sizeof(mExceptionDeviceList));
> - if (*DeviceInfo == NULL) {
> - return EFI_OUT_OF_RESOURCES;
> - }
> - CopyMem (*DeviceInfo, mExceptionDeviceList,
> sizeof(mExceptionDeviceList));
> + if (0) {
> + *DeviceInfo = AllocateZeroPool (sizeof(mExceptionDeviceScopeList));
> + if (*DeviceInfo == NULL) {
> + return EFI_OUT_OF_RESOURCES;
> + }
> + CopyMem (*DeviceInfo, mExceptionDeviceScopeList,
> + sizeof(mExceptionDeviceScopeList));
> +
> + *DeviceInfoCount = ARRAY_SIZE(mExceptionDeviceScopeList);
> + } else {
> + *DeviceInfo = AllocateZeroPool (sizeof(mExceptionPciDeviceIdList));
> + if (*DeviceInfo == NULL) {
> + return EFI_OUT_OF_RESOURCES;
> + }
> + CopyMem (*DeviceInfo, mExceptionPciDeviceIdList,
> + sizeof(mExceptionPciDeviceIdList));
>
> - *DeviceInfoCount = ARRAY_SIZE(mExceptionDeviceList);
> + *DeviceInfoCount = ARRAY_SIZE(mExceptionPciDeviceIdList);
> + }
>
> return EFI_SUCCESS;
> }
> --
> 2.7.4.windows.1
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
© 2016 - 2025 Red Hat, Inc.