1 #pragma once
2 
3 #include <libipl.H>
4 
5 extern "C"
6 {
7 #include <libpdbg.h>
8 }
9 
10 namespace openpower
11 {
12 namespace phal
13 {
14 
15 /**
16  * @brief This function will initialize required phal
17  *        libraries.
18  * Throws an exception on error.
19  *
20  * @param[in] mode - IPL mode, default IPL_AUTOBOOT
21  *
22  */
23 void phal_init(enum ipl_mode mode = IPL_AUTOBOOT);
24 
25 /**
26  *  @brief  Check if primary processor or not
27  *
28  *  @param[in] procTarget - Processor target to check if primary or not
29  *
30  *  @return True/False
31  */
32 bool isPrimaryProc(struct pdbg_target* procTarget);
33 
34 /**
35  *  @brief  Read the input CFAM register
36  *
37  *  @param[in]  procTarget - Processor target to perform the operation on
38  *  @param[in]  reg - The register address to read
39  *  @param[out] val - The value read from the register
40  *
41  *  @return 0 on success, non-0 on failure
42  */
43 uint32_t getCFAM(struct pdbg_target* procTarget, const uint32_t reg,
44                  uint32_t& val);
45 
46 /**
47  *  @brief  Write the input CFAM register
48  *
49  *  @param[in]  procTarget - Processor target to perform the operation on
50  *  @param[in]  reg - The register address to write
51  *  @param[out] val - The value to write to the register
52  *
53  *  @return 0 on success, non-0 on failure
54  */
55 uint32_t putCFAM(struct pdbg_target* procTarget, const uint32_t reg,
56                  const uint32_t val);
57 
58 /**
59  *  @brief  Helper function to find FSI target needed for FSI operations
60  *
61  *  @param[in]  procTarget - Processor target to find the FSI target on
62  *
63  *  @return Valid pointer to FSI target on success, nullptr on failure
64  */
65 pdbg_target* getFsiTarget(struct pdbg_target* procTarget);
66 
67 /**
68  *  @brief  Helper function to probe the processor target
69  *
70  *  The probe call only has to happen once per application start so ensure
71  *  this function only probes once no matter how many times it's called.
72  *
73  *  @param[in]  procTarget - Processor target to probe
74  *
75  *  @return 0 on success, non-0 on failure
76  */
77 uint32_t probeTarget(struct pdbg_target* procTarget);
78 
79 } // namespace phal
80 } // namespace openpower
81