diff options
-rw-r--r-- | src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C | 3 | ||||
-rw-r--r-- | src/import/chips/p9/procedures/hwp/memory/lib/utils/swizzle.H | 21 | ||||
-rw-r--r-- | src/import/hwpf/fapi2/include/utils.H | 27 |
3 files changed, 28 insertions, 23 deletions
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C b/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C index 9b3243609..8446c6838 100644 --- a/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C +++ b/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C @@ -48,7 +48,6 @@ #include <lib/shared/mss_kind.H> #include <lib/phy/dp16.H> #include <lib/mss_attribute_accessors_manual.H> -#include <endian.h> namespace mss { @@ -826,7 +825,7 @@ fapi2::ReturnCode eff_dimm::dram_mfg_id() FAPI_TRY( iv_spd_decoder.dram_manufacturer_id_code(l_decoder_val), "Failed getting dram id code from SPD %s", mss::c_str(iv_dimm) ); - endian_swap(l_decoder_val); + fapi2::endian_swap(l_decoder_val); switch (l_decoder_val) { diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/utils/swizzle.H b/src/import/chips/p9/procedures/hwp/memory/lib/utils/swizzle.H index 57523f5bd..74449540b 100644 --- a/src/import/chips/p9/procedures/hwp/memory/lib/utils/swizzle.H +++ b/src/import/chips/p9/procedures/hwp/memory/lib/utils/swizzle.H @@ -42,27 +42,6 @@ namespace mss { /// -/// @brief Endian swapping -/// @tparam T input type -/// @param[in,out] io_input integral input -/// @note https://stackoverflow.com/questions/105252/how-do-i-convert-between-big-endian-and-little-endian-values-in-c -/// -template < typename T > -void endian_swap(T& io_input) -{ - constexpr size_t MIN_BYTES = 2; - static_assert(sizeof(T) >= MIN_BYTES, "Byte swapping requires at least 2 bytes of data"); - - uint8_t* l_varArray = reinterpret_cast<uint8_t*>(&io_input); - - for(size_t i = 0; i < sizeof(io_input) / 2; i++) - { - const size_t BYTE_SWAP_INDEX = sizeof(io_input) - 1 - i; - std::swap(l_varArray[BYTE_SWAP_INDEX], l_varArray[i]); - } -} - -/// /// @brief Swap two bits in a buffer /// @tparam TB the bit in the buffer to move to SB /// @tparam SB the bit in the buffer to move to TB diff --git a/src/import/hwpf/fapi2/include/utils.H b/src/import/hwpf/fapi2/include/utils.H index 8534d3bdb..174d9e2dd 100644 --- a/src/import/hwpf/fapi2/include/utils.H +++ b/src/import/hwpf/fapi2/include/utils.H @@ -38,6 +38,33 @@ namespace fapi2 { + +/// +/// @brief Endian swapping +/// @tparam T input type +/// @param[in,out] io_input integral input +/// @note https://stackoverflow.com/questions/105252/how-do-i-convert-between-big-endian-and-little-endian-values-in-c +/// This function does not take into account the system's endianness, but just does the endian swap +/// +template < typename T > +void endian_swap(T& io_input) +{ + constexpr size_t MIN_BYTES = 2; + static_assert(sizeof(T) >= MIN_BYTES, "Byte swapping requires at least 2 bytes of data"); + + uint8_t* l_varArray = reinterpret_cast<uint8_t*>(&io_input); + + for(size_t i = 0; i < sizeof(io_input) / 2; i++) + { + const size_t BYTE_SWAP_INDEX = sizeof(io_input) - 1 - i; + + // Rolling our own swap as certain downstream libraries do not have std::swap enabled + const auto l_temp = l_varArray[BYTE_SWAP_INDEX]; + l_varArray[BYTE_SWAP_INDEX] = l_varArray[i]; + l_varArray[i] = l_temp; + } +} + #ifndef __PPE__ /// /// @brief Enable/Disable special wakeup on processor chip core(s) |