1 #pragma once
2 
3 #include "targeting.hpp"
4 
5 #include <memory>
6 
7 namespace openpower
8 {
9 namespace cfam
10 {
11 namespace access
12 {
13 
14 using cfam_address_t = uint16_t;
15 using cfam_data_t = uint32_t;
16 using cfam_mask_t = uint32_t;
17 
18 /**
19  * @brief Writes a CFAM (Common FRU Access Macro) register in a P9.
20  *
21  * Throws an exception on error.
22  *
23  * @param[in] target - The Target to perform the operation on
24  * @param[in] address - The register address to write to
25  * @param[in] data - The data to write
26  */
27 void writeReg(const std::unique_ptr<openpower::targeting::Target>& target,
28               cfam_address_t address, cfam_data_t data);
29 
30 /**
31  * @brief Reads a CFAM (Common FRU Access Macro) register in a P9.
32  *
33  * Throws an exception on error.
34  *
35  * @param[in] target - The Target to perform the operation on
36  * @param[in] address - The register address to read
37  * @return - The register data
38  */
39 cfam_data_t readReg(const std::unique_ptr<openpower::targeting::Target>& target,
40                     cfam_address_t address);
41 
42 /**
43  * @brief Writes a CFAM (Common FRU Access Macro) register in a P9
44  *        using a mask to specify the bits the modify.
45  *
46  * Only bits that are set in the mask parameter will be modified.
47  *
48  * Throws an exception on error.
49  *
50  * @param[in] target - The Target to perform the operation on
51  * @param[in] address - The register address to write to
52  * @param[in] data - The data to write
53  * @param[in] mask - The mask
54  */
55 void writeRegWithMask(
56     const std::unique_ptr<openpower::targeting::Target>& target,
57     cfam_address_t address, cfam_data_t data, cfam_mask_t mask);
58 } // namespace access
59 } // namespace cfam
60 } // namespace openpower
61