Skip to content

Commit 33473bd

Browse files
authored
Createa Mock for PciRootBridgeIoProtocol, MockPciPlatformProtocol & add mock function under MockUefiBootServiceTableLib (#1213)
1 parent 4abc700 commit 33473bd

File tree

4 files changed

+373
-2
lines changed

4 files changed

+373
-2
lines changed

MdePkg/Test/Mock/Include/GoogleTest/Library/MockUefiBootServicesTableLib.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,19 @@ struct MockUefiBootServicesTableLib {
204204
IN EFI_HANDLE DriverImageHandle OPTIONAL,
205205
IN EFI_HANDLE ChildHandle OPTIONAL)
206206
);
207+
208+
MOCK_FUNCTION_DECLARATION (
209+
EFI_TPL,
210+
gBS_RaiseTpl,
211+
212+
(IN EFI_TPL NewTpl)
213+
);
214+
215+
MOCK_FUNCTION_DECLARATION (
216+
VOID,
217+
gBS_RestoreTpl,
218+
(IN EFI_TPL OldTpl)
219+
);
207220
};
208221

209222
#endif // MOCK_UEFI_BOOT_SERVICES_TABLE_LIB_H_
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
/** @file
2+
This file declares a mock of PCI Platform Protocol.
3+
4+
Copyright (c) Microsoft Corporation.
5+
SPDX-License-Identifier: BSD-2-Clause-Patent
6+
**/
7+
8+
#ifndef MOCK_PCIPLATFORMPROTOCOL_H
9+
#define MOCK_PCIPLATFORMPROTOCOL_H
10+
11+
#include <Library/GoogleTestLib.h>
12+
#include <Library/FunctionMockLib.h>
13+
14+
extern "C" {
15+
#include <Uefi.h>
16+
#include <Protocol/PciPlatform.h>
17+
}
18+
19+
struct MockPciPlatformPhaseNotify {
20+
MOCK_INTERFACE_DECLARATION (MockPciPlatformPhaseNotify);
21+
MOCK_FUNCTION_DECLARATION (
22+
EFI_STATUS,
23+
MockPlatformNotify,
24+
(IN EFI_PCI_PLATFORM_PROTOCOL *This,
25+
IN EFI_HANDLE HostBridge,
26+
IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE Phase,
27+
IN EFI_PCI_EXECUTION_PHASE ExecPhase
28+
)
29+
);
30+
};
31+
32+
struct MockPciPlatformPreprocessController {
33+
MOCK_INTERFACE_DECLARATION (MockPciPlatformPreprocessController);
34+
MOCK_FUNCTION_DECLARATION (
35+
EFI_STATUS,
36+
MockPlatformPrepController,
37+
(
38+
IN EFI_PCI_PLATFORM_PROTOCOL *This,
39+
IN EFI_HANDLE HostBridge,
40+
IN EFI_HANDLE RootBridge,
41+
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS PciAddress,
42+
IN EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE Phase,
43+
IN EFI_PCI_EXECUTION_PHASE ExecPhase
44+
)
45+
);
46+
};
47+
48+
struct MockPciPlatformGetPlatformPolicy {
49+
MOCK_INTERFACE_DECLARATION (MockPciPlatformGetPlatformPolicy);
50+
MOCK_FUNCTION_DECLARATION (
51+
EFI_STATUS,
52+
MockGetPlatformPolicy,
53+
(
54+
IN CONST EFI_PCI_PLATFORM_PROTOCOL *This,
55+
OUT EFI_PCI_PLATFORM_POLICY *PciPolicy
56+
)
57+
);
58+
};
59+
60+
struct MockPciPlatformGetPciRom {
61+
MOCK_INTERFACE_DECLARATION (MockPciPlatformGetPciRom);
62+
MOCK_FUNCTION_DECLARATION (
63+
EFI_STATUS,
64+
MockGetPciRom,
65+
(
66+
IN CONST EFI_PCI_PLATFORM_PROTOCOL *This,
67+
IN EFI_HANDLE PciHandle,
68+
OUT VOID **RomImage,
69+
OUT UINTN *RomSize
70+
)
71+
);
72+
};
73+
74+
MOCK_INTERFACE_DEFINITION (MockPciPlatformPhaseNotify);
75+
MOCK_FUNCTION_DEFINITION (MockPciPlatformPhaseNotify, MockPlatformNotify, 4, EFIAPI);
76+
MOCK_INTERFACE_DEFINITION (MockPciPlatformPreprocessController);
77+
MOCK_FUNCTION_DEFINITION (MockPciPlatformPreprocessController, MockPlatformPrepController, 6, EFIAPI);
78+
MOCK_INTERFACE_DEFINITION (MockPciPlatformGetPlatformPolicy);
79+
MOCK_FUNCTION_DEFINITION (MockPciPlatformGetPlatformPolicy, MockGetPlatformPolicy, 2, EFIAPI);
80+
MOCK_INTERFACE_DEFINITION (MockPciPlatformGetPciRom);
81+
MOCK_FUNCTION_DEFINITION (MockPciPlatformGetPciRom, MockGetPciRom, 4, EFIAPI);
82+
83+
#define MOCK_EFI_PCI_PLATFORM_PROTOCOL_INSTANCE(NAME) \
84+
EFI_PCI_PLATFORM_PROTOCOL NAME##_INSTANCE = { \
85+
MockPlatformNotify, \
86+
MockPlatformPrepController, \
87+
MockGetPlatformPolicy, \
88+
MockGetPciRom, \
89+
}; \
90+
EFI_PCI_PLATFORM_PROTOCOL *NAME = &NAME##_INSTANCE;
91+
92+
#endif // MOCK_PCIPLATFORMPROTOCOL_H
Lines changed: 262 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,262 @@
1+
/** @file
2+
This file declares a mock of PCI Root Bridge IO Protocol.
3+
4+
Copyright (c) Microsoft Corporation.
5+
SPDX-License-Identifier: BSD-2-Clause-Patent
6+
**/
7+
8+
#ifndef MOCK_PCIROOTBRIDGEIOPROTOCOL_H
9+
#define MOCK_PCIROOTBRIDGEIOPROTOCOL_H
10+
11+
#include <Library/GoogleTestLib.h>
12+
#include <Library/FunctionMockLib.h>
13+
14+
extern "C"
15+
{
16+
#include <Uefi.h>
17+
#include <Protocol/PciRootBridgeIo.h>
18+
}
19+
20+
//
21+
// Declarations to handle usage of the Pci Root Bridge Io Protocol by creating mock
22+
//
23+
struct MockPciRootBridgeIoPollIoMem {
24+
MOCK_INTERFACE_DECLARATION (MockPciRootBridgeIoPollIoMem);
25+
MOCK_FUNCTION_DECLARATION (
26+
EFI_STATUS,
27+
MockPciRootBridgePollMem,
28+
(IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL * This,
29+
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
30+
IN UINT64 Address,
31+
IN UINT64 Mask,
32+
IN UINT64 Value,
33+
IN UINT64 Delay,
34+
OUT UINT64 *Result)
35+
);
36+
MOCK_FUNCTION_DECLARATION (
37+
EFI_STATUS,
38+
MockPciRootBridgePollIo,
39+
(IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL * This,
40+
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
41+
IN UINT64 Address,
42+
IN UINT64 Mask,
43+
IN UINT64 Value,
44+
IN UINT64 Delay,
45+
OUT UINT64 *Result)
46+
);
47+
};
48+
49+
struct MockPciRootBridgeIoConfigAccess {
50+
MOCK_INTERFACE_DECLARATION (MockPciRootBridgeIoConfigAccess);
51+
MOCK_FUNCTION_DECLARATION (
52+
EFI_STATUS,
53+
MockPciRootBridgeMemRead,
54+
(IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL * This,
55+
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
56+
IN UINT64 Address,
57+
IN UINTN Count,
58+
IN OUT VOID *Buffer)
59+
);
60+
MOCK_FUNCTION_DECLARATION (
61+
EFI_STATUS,
62+
MockPciRootBridgeMemWrite,
63+
(IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL * This,
64+
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
65+
IN UINT64 Address,
66+
IN UINTN Count,
67+
IN OUT VOID *Buffer)
68+
);
69+
70+
MOCK_FUNCTION_DECLARATION (
71+
EFI_STATUS,
72+
MockPciRootBridgeIoRead,
73+
(IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL * This,
74+
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
75+
IN UINT64 Address,
76+
IN UINTN Count,
77+
IN OUT VOID *Buffer)
78+
);
79+
MOCK_FUNCTION_DECLARATION (
80+
EFI_STATUS,
81+
MockPciRootBridgeIoWrite,
82+
(IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL * This,
83+
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
84+
IN UINT64 Address,
85+
IN UINTN Count,
86+
IN OUT VOID *Buffer)
87+
);
88+
89+
MOCK_FUNCTION_DECLARATION (
90+
EFI_STATUS,
91+
MockPciRootBridgePciRead,
92+
(IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL * This,
93+
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
94+
IN UINT64 Address,
95+
IN UINTN Count,
96+
IN OUT VOID *Buffer)
97+
);
98+
MOCK_FUNCTION_DECLARATION (
99+
EFI_STATUS,
100+
MockPciRootBridgePciWrite,
101+
(IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL * This,
102+
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
103+
IN UINT64 Address,
104+
IN UINTN Count,
105+
IN OUT VOID *Buffer)
106+
);
107+
};
108+
109+
struct MockPciRootBridgeIoCopyMem {
110+
MOCK_INTERFACE_DECLARATION (MockPciRootBridgeIoCopyMem);
111+
MOCK_FUNCTION_DECLARATION (
112+
EFI_STATUS,
113+
MockPciRootBridgeCopyMem,
114+
(IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL * This,
115+
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
116+
IN UINT64 DestAddress,
117+
IN UINT64 SrcAddress,
118+
IN UINTN Count)
119+
);
120+
};
121+
122+
struct MockPciRootBridgeIoMap {
123+
MOCK_INTERFACE_DECLARATION (MockPciRootBridgeIoMap);
124+
MOCK_FUNCTION_DECLARATION (
125+
EFI_STATUS,
126+
MockPciRootBridgeMap,
127+
(IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL * This,
128+
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION Operation,
129+
IN VOID *HostAddress,
130+
IN OUT UINTN *NumberOfBytes,
131+
OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
132+
OUT VOID **Mapping)
133+
);
134+
};
135+
136+
struct MockPciRootBridgeIoUnMap {
137+
MOCK_INTERFACE_DECLARATION (MockPciRootBridgeIoUnMap);
138+
MOCK_FUNCTION_DECLARATION (
139+
EFI_STATUS,
140+
MockPciRootBridgeUnMap,
141+
(IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
142+
IN VOID *Mapping)
143+
);
144+
};
145+
146+
struct MockPciRootBridgeIoAllocateBuffer {
147+
MOCK_INTERFACE_DECLARATION (MockPciRootBridgeIoAllocateBuffer);
148+
MOCK_FUNCTION_DECLARATION (
149+
EFI_STATUS,
150+
MockPciRootBridgeAllocateBuffer,
151+
(IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
152+
IN EFI_ALLOCATE_TYPE Type,
153+
IN EFI_MEMORY_TYPE MemoryType,
154+
IN UINTN Pages,
155+
IN OUT VOID **HostAddress,
156+
IN UINT64 Attributes)
157+
);
158+
};
159+
160+
struct MockPciRootBridgeIoFreeBuffer {
161+
MOCK_INTERFACE_DECLARATION (MockPciRootBridgeIoFreeBuffer);
162+
MOCK_FUNCTION_DECLARATION (
163+
EFI_STATUS,
164+
MockPciRootBridgeFreeBuffer,
165+
(IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
166+
IN UINTN Pages,
167+
IN VOID *HostAddress)
168+
);
169+
};
170+
171+
struct MockPciRootBridgeIoFlush {
172+
MOCK_INTERFACE_DECLARATION (MockPciRootBridgeIoFlush);
173+
MOCK_FUNCTION_DECLARATION (
174+
EFI_STATUS,
175+
MockPciRootBridgeFlush,
176+
(IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This)
177+
);
178+
};
179+
180+
struct MockPciRootBridgeIoGetAttributes {
181+
MOCK_INTERFACE_DECLARATION (MockPciRootBridgeIoGetAttributes);
182+
MOCK_FUNCTION_DECLARATION (
183+
EFI_STATUS,
184+
MockPciRootBridgeGetAttributes,
185+
(IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
186+
OUT UINT64 *Supports,
187+
OUT UINT64 *Attributes)
188+
);
189+
};
190+
191+
struct MockPciRootBridgeIoSetAttributes {
192+
MOCK_INTERFACE_DECLARATION (MockPciRootBridgeIoSetAttributes);
193+
MOCK_FUNCTION_DECLARATION (
194+
EFI_STATUS,
195+
MockPciRootBridgeSetAttributes,
196+
(IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
197+
IN UINT64 Attributes,
198+
IN OUT UINT64 *ResourceBase,
199+
IN OUT UINT64 *ResourceLength)
200+
);
201+
};
202+
203+
struct MockPciRootBridgeIoConfiguration {
204+
MOCK_INTERFACE_DECLARATION (MockPciRootBridgeIoConfiguration);
205+
MOCK_FUNCTION_DECLARATION (
206+
EFI_STATUS,
207+
MockPciRootBridgeConfiguration,
208+
(IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
209+
OUT VOID **Resources)
210+
);
211+
};
212+
213+
MOCK_INTERFACE_DEFINITION (MockPciRootBridgeIoPollIoMem);
214+
MOCK_FUNCTION_DEFINITION (MockPciRootBridgeIoPollIoMem, MockPciRootBridgePollMem, 7, EFIAPI);
215+
MOCK_FUNCTION_DEFINITION (MockPciRootBridgeIoPollIoMem, MockPciRootBridgePollIo, 7, EFIAPI);
216+
MOCK_INTERFACE_DEFINITION (MockPciRootBridgeIoConfigAccess);
217+
MOCK_FUNCTION_DEFINITION (MockPciRootBridgeIoConfigAccess, MockPciRootBridgeMemRead, 5, EFIAPI);
218+
MOCK_FUNCTION_DEFINITION (MockPciRootBridgeIoConfigAccess, MockPciRootBridgeMemWrite, 5, EFIAPI);
219+
MOCK_FUNCTION_DEFINITION (MockPciRootBridgeIoConfigAccess, MockPciRootBridgeIoRead, 5, EFIAPI);
220+
MOCK_FUNCTION_DEFINITION (MockPciRootBridgeIoConfigAccess, MockPciRootBridgeIoWrite, 5, EFIAPI);
221+
MOCK_FUNCTION_DEFINITION (MockPciRootBridgeIoConfigAccess, MockPciRootBridgePciRead, 5, EFIAPI);
222+
MOCK_FUNCTION_DEFINITION (MockPciRootBridgeIoConfigAccess, MockPciRootBridgePciWrite, 5, EFIAPI);
223+
MOCK_INTERFACE_DEFINITION (MockPciRootBridgeIoCopyMem);
224+
MOCK_FUNCTION_DEFINITION (MockPciRootBridgeIoCopyMem, MockPciRootBridgeCopyMem, 5, EFIAPI);
225+
MOCK_INTERFACE_DEFINITION (MockPciRootBridgeIoMap);
226+
MOCK_FUNCTION_DEFINITION (MockPciRootBridgeIoMap, MockPciRootBridgeMap, 6, EFIAPI);
227+
MOCK_INTERFACE_DEFINITION (MockPciRootBridgeIoUnMap);
228+
MOCK_FUNCTION_DEFINITION (MockPciRootBridgeIoUnMap, MockPciRootBridgeUnMap, 2, EFIAPI);
229+
MOCK_INTERFACE_DEFINITION (MockPciRootBridgeIoAllocateBuffer);
230+
MOCK_FUNCTION_DEFINITION (MockPciRootBridgeIoAllocateBuffer, MockPciRootBridgeAllocateBuffer, 6, EFIAPI);
231+
MOCK_INTERFACE_DEFINITION (MockPciRootBridgeIoFreeBuffer);
232+
MOCK_FUNCTION_DEFINITION (MockPciRootBridgeIoFreeBuffer, MockPciRootBridgeFreeBuffer, 3, EFIAPI);
233+
MOCK_INTERFACE_DEFINITION (MockPciRootBridgeIoFlush);
234+
MOCK_FUNCTION_DEFINITION (MockPciRootBridgeIoFlush, MockPciRootBridgeFlush, 1, EFIAPI);
235+
MOCK_INTERFACE_DEFINITION (MockPciRootBridgeIoGetAttributes);
236+
MOCK_FUNCTION_DEFINITION (MockPciRootBridgeIoGetAttributes, MockPciRootBridgeGetAttributes, 3, EFIAPI);
237+
MOCK_INTERFACE_DEFINITION (MockPciRootBridgeIoSetAttributes);
238+
MOCK_FUNCTION_DEFINITION (MockPciRootBridgeIoSetAttributes, MockPciRootBridgeSetAttributes, 4, EFIAPI);
239+
MOCK_INTERFACE_DEFINITION (MockPciRootBridgeIoConfiguration);
240+
MOCK_FUNCTION_DEFINITION (MockPciRootBridgeIoConfiguration, MockPciRootBridgeConfiguration, 2, EFIAPI);
241+
242+
#define MOCK_PCI_ROOT_BRIDGE_IO_PROTOCOL_INSTANCE(NAME) \
243+
EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL NAME##_INSTANCE = { \
244+
NULL, \
245+
MockPciRootBridgePollMem, \
246+
MockPciRootBridgePollIo, \
247+
{ MockPciRootBridgeMemRead, MockPciRootBridgeMemWrite },\
248+
{ MockPciRootBridgeIoRead, MockPciRootBridgeIoWrite },\
249+
{ MockPciRootBridgePciRead, MockPciRootBridgePciWrite },\
250+
MockPciRootBridgeCopyMem, \
251+
MockPciRootBridgeMap, \
252+
MockPciRootBridgeUnMap, \
253+
MockPciRootBridgeAllocateBuffer, \
254+
MockPciRootBridgeFreeBuffer, \
255+
MockPciRootBridgeFlush, \
256+
MockPciRootBridgeGetAttributes, \
257+
MockPciRootBridgeSetAttributes, \
258+
MockPciRootBridgeConfiguration, \
259+
}; \
260+
EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *NAME = &NAME##_INSTANCE;
261+
262+
#endif // MOCK_PCIIOPROTOCOL_H

MdePkg/Test/Mock/Library/GoogleTest/MockUefiBootServicesTableLib/MockUefiBootServicesTableLib.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_AllocatePool, 3, EFI
2828
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_LocateHandle, 5, EFIAPI);
2929
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_ConnectController, 4, EFIAPI);
3030
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_DisconnectController, 3, EFIAPI);
31+
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_RaiseTpl, 1, EFIAPI);
32+
33+
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_RestoreTpl, 1, EFIAPI);
3134

3235
extern "C" {
3336
EFI_STATUS
@@ -103,8 +106,9 @@ extern "C" {
103106

104107
static EFI_BOOT_SERVICES LocalBs = {
105108
{ 0, 0, 0, 0, 0 }, // EFI_TABLE_HEADER
106-
NULL, // EFI_RAISE_TPL
107-
NULL, // EFI_RESTORE_TPL
109+
gBS_RaiseTpl, // EFI_RAISE_TPL
110+
111+
gBS_RestoreTpl, // EFI_RESTORE_TPL
108112
NULL, // EFI_ALLOCATE_PAGES
109113
NULL, // EFI_FREE_PAGES
110114
gBS_GetMemoryMap, // EFI_GET_MEMORY_MAP

0 commit comments

Comments
 (0)