]> git.proxmox.com Git - mirror_edk2.git/blame - IntelSiliconPkg/Include/Protocol/PlatformVtdPolicy.h
IntelSiliconPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / IntelSiliconPkg / Include / Protocol / PlatformVtdPolicy.h
CommitLineData
4fd8eda9
JY
1/** @file\r
2 The definition for platform VTD policy.\r
3\r
4 Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
8f7a05e1 5 SPDX-License-Identifier: BSD-2-Clause-Patent\r
4fd8eda9
JY
6\r
7**/\r
8\r
9#ifndef __PLATFORM_VTD_POLICY_PROTOCOL_H__\r
10#define __PLATFORM_VTD_POLICY_PROTOCOL_H__\r
11\r
12#include <IndustryStandard/Vtd.h>\r
71872f7c 13#include <IndustryStandard/DmaRemappingReportingTable.h>\r
4fd8eda9
JY
14\r
15#define EDKII_PLATFORM_VTD_POLICY_PROTOCOL_GUID \\r
16 { \\r
17 0x3d17e448, 0x466, 0x4e20, { 0x99, 0x9f, 0xb2, 0xe1, 0x34, 0x88, 0xee, 0x22 } \\r
18 }\r
19\r
20typedef struct _EDKII_PLATFORM_VTD_POLICY_PROTOCOL EDKII_PLATFORM_VTD_POLICY_PROTOCOL;\r
21\r
22#define EDKII_PLATFORM_VTD_POLICY_PROTOCOL_REVISION 0x00010000\r
23\r
24typedef struct {\r
25 UINT16 Segment;\r
26 VTD_SOURCE_ID SourceId;\r
27} EDKII_PLATFORM_VTD_DEVICE_INFO;\r
28\r
29/**\r
30 Get the VTD SourceId from the device handler.\r
31 This function is required for non PCI device handler.\r
32\r
33 Pseudo-algo in Intel VTd driver:\r
34 Status = PlatformGetVTdDeviceId ();\r
35 if (EFI_ERROR(Status)) {\r
36 if (DeviceHandle is PCI) {\r
37 Get SourceId from Bus/Device/Function\r
38 } else {\r
39 return EFI_UNSUPPORTED\r
40 }\r
41 }\r
42 Get VTd engine by Segment/Bus/Device/Function.\r
43\r
44 @param[in] This The protocol instance pointer.\r
45 @param[in] DeviceHandle Device Identifier in UEFI.\r
46 @param[out] DeviceInfo DeviceInfo for indentify the VTd engine in ACPI Table\r
47 and the VTd page entry.\r
48\r
49 @retval EFI_SUCCESS The VtdIndex and SourceId are returned.\r
50 @retval EFI_INVALID_PARAMETER DeviceHandle is not a valid handler.\r
51 @retval EFI_INVALID_PARAMETER DeviceInfo is NULL.\r
52 @retval EFI_NOT_FOUND The Segment or SourceId information is NOT found.\r
53 @retval EFI_UNSUPPORTED This function is not supported.\r
54\r
55**/\r
56typedef\r
57EFI_STATUS\r
58(EFIAPI *EDKII_PLATFORM_VTD_POLICY_GET_DEVICE_ID) (\r
59 IN EDKII_PLATFORM_VTD_POLICY_PROTOCOL *This,\r
60 IN EFI_HANDLE DeviceHandle,\r
61 OUT EDKII_PLATFORM_VTD_DEVICE_INFO *DeviceInfo\r
62 );\r
63\r
71872f7c
JY
64#pragma pack(1)\r
65\r
66typedef struct {\r
67 //\r
68 // The segment number of the device\r
69 //\r
70 UINT16 SegmentNumber;\r
71 //\r
72 // Device scope definition in DMAR table\r
73 //\r
74 EFI_ACPI_DMAR_DEVICE_SCOPE_STRUCTURE_HEADER DeviceScope;\r
75 //\r
76 // Pci path definition in DMAR table\r
77 //\r
78//EFI_ACPI_DMAR_PCI_PATH PciPath[];\r
79} EDKII_PLATFORM_VTD_DEVICE_SCOPE;\r
80\r
81typedef struct {\r
82 UINT16 VendorId;\r
83 UINT16 DeviceId;\r
84 UINT8 RevisionId;\r
85 UINT16 SubsystemVendorId;\r
86 UINT16 SubsystemDeviceId;\r
87} EDKII_PLATFORM_VTD_PCI_DEVICE_ID;\r
88\r
89#define EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO_TYPE_END 0\r
90#define EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO_TYPE_DEVICE_SCOPE 1\r
91#define EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO_TYPE_PCI_DEVICE_ID 2\r
92\r
93typedef struct {\r
94 //\r
95 // EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO_TYPE_xxx defined above.\r
96 //\r
97 UINT8 Type;\r
98 //\r
99 // The length of the full data structure including EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO and Data.\r
100 //\r
101 UINT8 Length;\r
102 //\r
103 // Data can be EDKII_PLATFORM_VTD_DEVICE_SCOPE or EDKII_PLATFORM_VTD_PCI_DEVICE_ID\r
104 //\r
105//UINT8 Data[Length - sizeof(EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO)];\r
106} EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO;\r
107\r
108#pragma pack()\r
109\r
110\r
4fd8eda9
JY
111/**\r
112 Get a list of the exception devices.\r
113\r
114 The VTd driver should always set ALLOW for the device in this list.\r
115\r
116 @param[in] This The protocol instance pointer.\r
117 @param[out] DeviceInfoCount The count of the list of DeviceInfo.\r
118 @param[out] DeviceInfo A callee allocated buffer to hold a list of DeviceInfo.\r
71872f7c 119 Each DeviceInfo pointer points to EDKII_PLATFORM_VTD_EXCEPTION_DEVICE_INFO.\r
4fd8eda9
JY
120\r
121 @retval EFI_SUCCESS The DeviceInfoCount and DeviceInfo are returned.\r
122 @retval EFI_INVALID_PARAMETER DeviceInfoCount is NULL, or DeviceInfo is NULL.\r
123 @retval EFI_UNSUPPORTED This function is not supported.\r
124\r
125**/\r
126typedef\r
127EFI_STATUS\r
128(EFIAPI *EDKII_PLATFORM_VTD_POLICY_GET_EXCEPTION_DEVICE_LIST) (\r
129 IN EDKII_PLATFORM_VTD_POLICY_PROTOCOL *This,\r
130 OUT UINTN *DeviceInfoCount,\r
71872f7c 131 OUT VOID **DeviceInfo\r
4fd8eda9
JY
132 );\r
133\r
134struct _EDKII_PLATFORM_VTD_POLICY_PROTOCOL {\r
135 UINT64 Revision;\r
136 EDKII_PLATFORM_VTD_POLICY_GET_DEVICE_ID GetDeviceId;\r
137 EDKII_PLATFORM_VTD_POLICY_GET_EXCEPTION_DEVICE_LIST GetExceptionDeviceList;\r
138};\r
139\r
140extern EFI_GUID gEdkiiPlatformVTdPolicyProtocolGuid;\r
141\r
142#endif\r
143\r