Software APIs
mock_abs_mmio.h
1 // Copyright lowRISC contributors (OpenTitan project).
2 // Licensed under the Apache License, Version 2.0, see LICENSE for details.
3 // SPDX-License-Identifier: Apache-2.0
4 
5 #ifndef OPENTITAN_SW_DEVICE_LIB_BASE_MOCK_ABS_MMIO_H_
6 #define OPENTITAN_SW_DEVICE_LIB_BASE_MOCK_ABS_MMIO_H_
7 
9 #include "sw/device/lib/base/global_mock.h"
10 #include "sw/device/lib/base/mock_mmio_test_utils.h"
11 
12 namespace rom_test {
13 namespace internal {
14 /**
15  * Mock class for abs_mmio.c.
16  */
17 class MockAbsMmio : public global_mock::GlobalMock<MockAbsMmio> {
18  public:
19  MOCK_METHOD(uint8_t, Read8, (uint32_t addr));
20  MOCK_METHOD(void, Write8, (uint32_t addr, uint8_t value));
21  MOCK_METHOD(void, Write8Shadowed, (uint32_t addr, uint8_t value));
22  MOCK_METHOD(uint32_t, Read32, (uint32_t addr));
23  MOCK_METHOD(void, Write32, (uint32_t addr, uint32_t value));
24  MOCK_METHOD(void, Write32Shadowed, (uint32_t addr, uint32_t value));
25 };
26 } // namespace internal
27 
28 using MockAbsMmio = testing::StrictMock<internal::MockAbsMmio>;
29 using NiceMockAbsMmio = testing::NiceMock<internal::MockAbsMmio>;
30 
31 /**
32  * Expect an abs_mmio read at the given address, returning the given 8-bit
33  * value.
34  *
35  * @param addr Read address.
36  * @param ... Value to return. May be an integer, a pointer to little-endian
37  * data, or a `std::initializer_list<BitField>`.
38  */
39 #define EXPECT_ABS_READ8(addr, ...) \
40  EXPECT_CALL(::rom_test::MockAbsMmio::Instance(), Read8(addr)) \
41  .WillOnce(testing::Return(mock_mmio::ToInt<uint8_t>(__VA_ARGS__)))
42 
43 /**
44  * Expect an abs_mmio write to the given address with the given 8-bit value.
45  *
46  * @param addr Write address.
47  * @param ... Expected value to be written. May be an integer, a pointer to
48  * little-endian data, or a `std::initializer_list<BitField>`.
49  */
50 #define EXPECT_ABS_WRITE8(addr, ...) \
51  EXPECT_CALL(::rom_test::MockAbsMmio::Instance(), \
52  Write8(addr, mock_mmio::ToInt<uint8_t>(__VA_ARGS__)));
53 
54 /**
55  * Expect a shadowed abs_mmio write to the given address with the given 8-bit
56  * value.
57  *
58  * @param addr Write address.
59  * @param ... Expected value to be written. May be an integer, a pointer to
60  * little-endian data, or a `std::initializer_list<BitField>`.
61  */
62 #define EXPECT_ABS_WRITE8_SHADOWED(addr, ...) \
63  EXPECT_CALL(::rom_test::MockAbsMmio::Instance(), \
64  Write8Shadowed(addr, mock_mmio::ToInt<uint8_t>(__VA_ARGS__)));
65 
66 /**
67  * Expect an abs_mmio read at the given address, returning the given 32-bit
68  * value.
69  *
70  * @param addr Read address.
71  * @param ... Value to return. May be an integer, a pointer to little-endian
72  * data, or a `std::initializer_list<BitField>`.
73  */
74 #define EXPECT_ABS_READ32(addr, ...) \
75  EXPECT_CALL(::rom_test::MockAbsMmio::Instance(), Read32(addr)) \
76  .WillOnce(testing::Return(mock_mmio::ToInt<uint32_t>(__VA_ARGS__)))
77 
78 /**
79  * Expect an abs_mmio write to the given address with the given 32-bit value.
80  *
81  * @param addr Write address.
82  * @param ... Expected value to be written. May be an integer, a pointer to
83  * little-endian data, or a `std::initializer_list<BitField>`.
84  */
85 #define EXPECT_ABS_WRITE32(addr, ...) \
86  EXPECT_CALL(::rom_test::MockAbsMmio::Instance(), \
87  Write32(addr, mock_mmio::ToInt<uint32_t>(__VA_ARGS__)));
88 
89 /**
90  * Expect a shadowed abs_mmio write to the given address with the given 32-bit
91  * value.
92  *
93  * @param addr Write address.
94  * @param ... Expected value to be written. May be an integer, a pointer to
95  * little-endian data, or a `std::initializer_list<BitField>`.
96  */
97 #define EXPECT_ABS_WRITE32_SHADOWED(addr, ...) \
98  EXPECT_CALL(::rom_test::MockAbsMmio::Instance(), \
99  Write32Shadowed(addr, mock_mmio::ToInt<uint32_t>(__VA_ARGS__)));
100 
101 } // namespace rom_test
102 
103 #endif // OPENTITAN_SW_DEVICE_LIB_BASE_MOCK_ABS_MMIO_H_