1 #pragma once 2 3 #include <libpdbg.h> 4 5 #include <string> 6 #include <vector> 7 8 // Forward reference to avoid pulling the libhei library into everything that 9 // includes this header. 10 namespace libhei 11 { 12 class Chip; 13 } 14 15 namespace util 16 { 17 18 namespace pdbg 19 { 20 21 /** Chip target types. */ 22 enum TargetType_t : uint8_t 23 { 24 TYPE_PROC = 0x05, 25 TYPE_OCMB = 0x4b, 26 }; 27 28 /** @return The target associated with the given chip. */ 29 pdbg_target* getTrgt(const libhei::Chip& i_chip); 30 31 /** @return The target associated with the given devtree path. */ 32 pdbg_target* getTrgt(const std::string& i_path); 33 34 /** @return A string representing the given target's devtree path. */ 35 const char* getPath(pdbg_target* i_trgt); 36 37 /** @return A string representing the given chip's devtree path. */ 38 const char* getPath(const libhei::Chip& i_chip); 39 40 /** @return The absolute position of the given target. */ 41 uint32_t getChipPos(pdbg_target* i_trgt); 42 43 /** @return The absolute position of the given chip. */ 44 uint32_t getChipPos(const libhei::Chip& i_chip); 45 46 /** @return The target type of the given target. */ 47 uint8_t getTrgtType(pdbg_target* i_trgt); 48 49 /** @return The target type of the given chip. */ 50 uint8_t getTrgtType(const libhei::Chip& i_chip); 51 52 /** 53 * @return The pib target associated with the given proc target. 54 * @note Will assert the given target is a proc target. 55 * @note Will assert the returned pib target it not nullptr. 56 */ 57 pdbg_target* getPibTrgt(pdbg_target* i_procTrgt); 58 59 /** 60 * @return The fsi target associated with the given proc target. 61 * @note Will assert the given target is a proc target. 62 * @note Will assert the returned fsi target it not nullptr. 63 */ 64 pdbg_target* getFsiTrgt(pdbg_target* i_procTrgt); 65 66 /** 67 * @brief Reads a CFAM FSI register. 68 * @param i_trgt Given target. 69 * @param i_addr Given address. 70 * @param o_val The returned value of the register. 71 * @return 0 if successful, non-0 otherwise. 72 * @note Will assert the given target is a proc target. 73 */ 74 int getCfam(pdbg_target* i_trgt, uint32_t i_addr, uint32_t& o_val); 75 76 /** 77 * @brief Returns the list of all active chips in the system. 78 * @param o_chips The returned list of chips. 79 */ 80 void getActiveChips(std::vector<libhei::Chip>& o_chips); 81 82 /** 83 * @return True, if hardware analysis is supported on this system. False, 84 * otherwise. 85 * @note Support for hardware analysis from the BMC started with P10 systems 86 * and is not supported on any older chip generations. 87 */ 88 bool queryHardwareAnalysisSupported(); 89 90 /** 91 * @return A string containing the FRU location code of the given chip. An empty 92 * string indicates the target was null or the attribute does not exist 93 * for this target. 94 * @note This function requires PHAL APIs that are only available in certain 95 * environments. If they do not exist the devtree path of the target is 96 * returned. 97 */ 98 std::string getLocationCode(pdbg_target* trgt); 99 100 /** 101 * @return A string containing the physical device path (entity path) of the 102 * given chip. An empty string indicates the target was null or the 103 * attribute does not exist for this target. 104 * @note This function requires PHAL APIs that are only available in certain 105 * environments. If they do not exist the devtree path of the target is 106 * returned. 107 */ 108 std::string getPhysDevPath(pdbg_target* trgt); 109 110 } // namespace pdbg 111 112 } // namespace util 113