summaryrefslogtreecommitdiffstats
path: root/src/import/generic/memory/lib/utils/index.H
diff options
context:
space:
mode:
authorAndre Marin <aamarin@us.ibm.com>2017-05-04 18:51:27 -0500
committerChristian R. Geddes <crgeddes@us.ibm.com>2017-05-12 21:05:37 -0400
commit67a47cf630951cd97389c57b54a62022b986a560 (patch)
treea5e642da5aee63b3a54d4da8379282ce40a769ca /src/import/generic/memory/lib/utils/index.H
parent19146c6e3294ef823318ec568ac137bd5ee4aece (diff)
downloadtalos-hostboot-67a47cf630951cd97389c57b54a62022b986a560.tar.gz
talos-hostboot-67a47cf630951cd97389c57b54a62022b986a560.zip
Move index API to generic/memory folder
Change-Id: Ibf8079fb2e23e7c77ef5fbd7bd491fb2808e0a1e Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/40109 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Reviewed-by: Thi N. Tran <thi@us.ibm.com> Reviewed-by: STEPHEN GLANCY <sglancy@us.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/40110 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
Diffstat (limited to 'src/import/generic/memory/lib/utils/index.H')
-rw-r--r--src/import/generic/memory/lib/utils/index.H104
1 files changed, 104 insertions, 0 deletions
diff --git a/src/import/generic/memory/lib/utils/index.H b/src/import/generic/memory/lib/utils/index.H
new file mode 100644
index 000000000..6fefed17d
--- /dev/null
+++ b/src/import/generic/memory/lib/utils/index.H
@@ -0,0 +1,104 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/import/generic/memory/lib/utils/index.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2015,2017 */
+/* [+] International Business Machines Corp. */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+
+///
+/// @file index.H
+/// @brief Tools to return attribute array index from a fapi2 target
+///
+// *HWP HWP Owner: Andre Marin <aamarin@us.ibm.com>
+// *HWP HWP Backup: Jacob Harvey <jlharvey@us.ibm.com>
+// *HWP Team: Memory
+// *HWP Level: 2
+// *HWP Consumed by: HB:FSP
+
+#ifndef _MSS_INDEX_H_
+#define _MSS_INDEX_H_
+
+#include <fapi2.H>
+#include <generic/memory/lib/utils/pos.H>
+
+///
+/// @brief Trait classes for the mss::index functions
+///
+template<fapi2::TargetType T>
+class indexTraits
+{
+ public:
+ enum
+ {
+ MCS_PER_MC = 2,
+ PORTS_PER_MCBIST = 4,
+ PORTS_PER_MCS = 2,
+ DIMMS_PER_PORT = 2,
+ MBA_PER_MC = 2,
+ };
+};
+
+namespace mss
+{
+
+///
+/// @brief Return an attribute array index from a fapi2 target
+/// @tparam T the fapi2::TargetType
+/// @param[in] i_target a DIMM target representing the DIMM in question
+/// @return size_t the attribute array index.
+///
+template< fapi2::TargetType T >
+inline size_t index(const fapi2::Target<T>& i_target);
+
+template<>
+inline size_t index(const fapi2::Target<fapi2::TARGET_TYPE_DIMM>& i_target)
+{
+ typedef indexTraits<fapi2::TARGET_TYPE_DIMM> TT;
+ return mss::pos(i_target) % TT::DIMMS_PER_PORT;
+}
+
+template<>
+inline size_t index(const fapi2::Target<fapi2::TARGET_TYPE_MCA>& i_target)
+{
+ typedef indexTraits<fapi2::TARGET_TYPE_MCA> TT;
+ return mss::pos(i_target) % TT::PORTS_PER_MCS;
+}
+
+template<>
+inline size_t index(const fapi2::Target<fapi2::TARGET_TYPE_MCS>& i_target)
+{
+ typedef indexTraits<fapi2::TARGET_TYPE_MCS> TT;
+ return mss::pos(i_target) % TT::MCS_PER_MC;
+}
+
+///
+/// @brief Return an attribute array index from a rank number
+/// @param[in] i_rank uint64_t a rank number DIMM0 {0, 1, 2, 3} DIMM1 {0, 1, 2, 3}
+/// @return size_t the attribute array index.
+///
+inline size_t index(const uint64_t i_rank)
+{
+ constexpr size_t RANK_MID_POINT = 4;
+ return i_rank % RANK_MID_POINT;
+}
+
+}
+#endif
OpenPOWER on IntegriCloud