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
12namespace rom_test {
13namespace internal {
14/**
15 * Mock class for abs_mmio.c.
16 */
17class 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
28using MockAbsMmio = testing::StrictMock<internal::MockAbsMmio>;
29using 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_