summaryrefslogtreecommitdiffstats
path: root/src/usr/isteps/tod/TodDrawer.H
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/isteps/tod/TodDrawer.H')
-rw-r--r--src/usr/isteps/tod/TodDrawer.H290
1 files changed, 290 insertions, 0 deletions
diff --git a/src/usr/isteps/tod/TodDrawer.H b/src/usr/isteps/tod/TodDrawer.H
new file mode 100644
index 000000000..c574e6593
--- /dev/null
+++ b/src/usr/isteps/tod/TodDrawer.H
@@ -0,0 +1,290 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/isteps/tod/TodDrawer.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2012,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 */
+#ifndef TODDRAWER_H
+#define TODDRAWER_H
+/**
+ * @file TodDrawer.H
+ *
+ * @brief Contains TodDrawer class declaration
+ *
+ */
+
+//------------------------------------------------------------------------------
+//Includes
+//------------------------------------------------------------------------------
+//Targeting support
+#include <attributetraits.H>
+#include "TodSvcUtil.H"
+#include "TodProc.H"
+
+namespace TOD
+{
+
+//------------------------------------------------------------------------------
+//Forward declarations
+//------------------------------------------------------------------------------
+class TodDrawer;
+class TodControls;
+class TodProc;
+
+//------------------------------------------------------------------------------
+//Typedefs
+//------------------------------------------------------------------------------
+typedef std::list<TodDrawer*> TodDrawerContainer;
+
+/**
+ * @class TodDrawer
+ *
+ * @brief TodDrawer class provides a grouping of the TodProc objects
+ * that belong to a particular TOD drawer. Each processor chip belonging
+ * to a specific TOD drawer connect over X bus and inter TOD drawer
+ * connection is over A bus.Concept of TOD drawer is analogous
+ * to fabric node on the system.
+ *
+ * TOD drawers fall under two categories,master TOD drawer and slave
+ * TOD drawers. Master TOD drawer is the one on which MDMT sits, all
+ * the remaining TOD drawers are designated as slave drawers.
+ *
+ * MDMT should drive TOD signals to other processors on the master
+ * TOD drawer over X buses and to one processor on each slave drawer over
+ * A bus ( This processor is designated as MDST ).
+ * MDST is responsible for driving the TOD signals to the remaining
+ * processors on slave drawer.
+ */
+class TodDrawer
+{
+public:
+ /**
+ * @brief Constructor for the TodDrawer object
+ *
+ * @param[in] i_drawerId
+ * this TOD drawer's id, it is nothing but the fabric node id attribute
+ * of the processors that belong to a fabric node type
+ *
+ * @param[in] i_parentNode
+ * container node's target
+ */
+ TodDrawer(const uint8_t i_drawerId,
+ const TARGETING::Target* i_parentNode);
+
+ /**
+ * @brief Destructor for the TodDrawer object.
+ *
+ * @par Detailed Description:
+ * Will destroy all TodProc objects that were added to this TOD
+ * drawer.
+ */
+ ~TodDrawer();
+
+ /**
+ * @brief This method will return the TodProc object that is either a
+ * TOD master or Drawer Master
+ *
+ * @par Detailed Description:
+ * While creating the topology MDMT and MDST should be wired to the
+ * other processors on that TOD drawer over X buses.
+ * TodTopologyManager will use this method to determine which
+ * processor is the master for that drawer.
+ * The method will go over the iv_todProcList and return the processor
+ * that is marked as TodProc::TOD_MASTER or
+ * TodProc::DRAWER_MASTER
+ *
+ * @param[out] o_drawerMaster
+ * It will be set to master processor's address if master processor is
+ * successfully found.
+ * In case the master processor could not be found successfully
+ * o_drawerMaster will be set to NULL, and error handle will be retured.
+ *
+ * @return Error log handle, indicates status of request
+ * @retval NULL indicates that master processor was successfully found
+ * @retval NULL indicates that the master processor could not be found
+ * successfully. The only possible reason for returning NULL can be
+ * that this method method was called out of sequence i.e even before
+ * TodTopologyManager designated a processor on a given TOD drawer as
+ * master for that drawer.
+ *
+ * Error log handle points to a valid error log object whose primary
+ * SRC reason code (pError->getSRC()->reasonCode()) indicates the type
+ * of error.
+ *
+ * @note It is up to the caller to change the severity of the
+ * returned error based on what it decides to do with it. By default
+ * any returned error created by this function will be a non-reported
+ * tracing event error log.
+ */
+ errlHndl_t findMasterProc(TodProc*& o_drawerMaster) const;
+
+ /**
+ * @brief This method will determine the processor that has maximum number
+ * functional cores among the list of processor owned by the TOD drawer
+ * object
+ *
+ * @par Detailed Description:
+ * For creation of topology , first task is to choose the MDMT. One of
+ * the criteria for choosing MDMT is that it should be the processor
+ * with maximum number of functional cores.
+ * This method will serve as a a helper for pickMdmt, to determine
+ * which processor in the TOD drawer has maximum number of functional
+ * cores
+ *
+ * @param[in] i_procToIgnore , The TodProc object to be ignored while
+ * choosing desired proc. This is the case when there is existing MDMT
+ * for primar/secondary topology and MDMT has to be chosen for the
+ * other topology, peviously chosen MDMT should be avoided.
+ *
+ * @param[out] o_pTodProc, It will carry back pointer to the TodProc
+ * object that has the maximum number of cores.
+ * In the unlikely case of TOD drawer not having any processor with
+ * functional cores, this parameter will be set to NULL
+ *
+ * @param[out] o_coreCount, This will carry back the no. of cores that was
+ * found on processor with max functional core count. In case o_pTodProc
+ * is set to NULL this will be zero.
+ *
+ * @param[in] i_pProcList If non NULL, this will be our input set instead of
+ * the set of all procs on this drawer. Useful if caller has already
+ * identified the set of procs on this drawer for which the one with max
+ * no. of cores is to be determined.
+ *
+ * @return N/A
+ */
+ void getProcWithMaxCores(
+ const TodProc * i_procToIgnore,
+ TodProc *& o_pTodProc,
+ uint32_t& o_coreCount,
+ TodProcContainer* i_pProcList = NULL) const;
+
+ /**
+ * @brief Getter method for iv_todProcList
+ *
+ * @param[out] o_procList
+ * Parameter in which iv_todProcList will be returned
+ *
+ * @return N/A
+ */
+ const TodProcContainer& getProcs() const
+ {
+ return iv_todProcList;
+ }
+
+ /**
+ * @brief setter method for iv_isTodMaster
+ *
+ * @param[in] i_masterTodDrawer
+ * true/false, indicating whether this TOD drawer is a master or not
+ *
+ * @return N/A
+ */
+ void setMasterDrawer(const bool i_masterTodDrawer)
+ {
+ iv_isTodMaster = i_masterTodDrawer;
+ }
+
+ /**
+ * @brief Adds a processor to this TOD drawer.
+ *
+ * @param[in] i_proc
+ * A TodProc pointer correspnding to the proc to be added.
+ *
+ * @return N/A
+ */
+ void addProc(TodProc* i_proc);
+
+ /**
+ * @brief Get this TOD drawer's id (this will be
+ * the corresponding fabric node's id)
+ *
+ * @return TOD drawer's id
+ * @retval corresponding fabric node's id
+ */
+ TARGETING::ATTR_FABRIC_GROUP_ID_type getId() const
+ {
+ return iv_todDrawerId;
+ }
+
+ /**
+ * @brief Checks if this TOD drawer is a master drawer for the system.
+ * The master status of TOD drawer is contained in iv_isTodMaster.
+ *
+ * @return bool value, it will be true if this TOD drawer is a master drawer
+ * ,false otherwise
+ */
+ bool isMaster() const
+ {
+ return iv_isTodMaster;
+ }
+
+ /**
+ * @brief Returns the containing node's target
+ *
+ * @return Target pointer
+ */
+ const TARGETING::Target* getParentNodeTarget() const
+ {
+ return iv_parentNodeTarget;
+ }
+
+ /**
+ * @brief Returns a list of procs on this drawer that can potentially be
+ * MDMT
+ *
+ * @par Detailed Description:
+ * For a processor to be a potential MDMT it has to fulfill the
+ * following criteria.
+ * 1) Processor should not be garded and it should not be on the
+ * blacklist.
+ * 2) Processor should be connected to OSC that is neither garded not
+ * present on the blacklist.
+ * 3) Processor should not be connected to the oscillator that is acting
+ * as MDMT source on an existing alternate toplogy. The
+ * Such oscillator target will be provided as input to this method.
+ *
+ * @param[out] o_procList list of procs
+ *
+ * @return N/A
+ */
+ void getPotentialMdmts(TodProcContainer& o_procList)const;
+
+private:
+ //List of TodProc objects that belongs to TodDrawer instance
+ TodProcContainer iv_todProcList;
+
+ //TOD drawer id, the value of this attribute will be derived from
+ //ATTR_FABRIC_GROUP_ID attribute of the processors that belong to this
+ //TOD drawer, all the processors belonging to this TOD drawer will share
+ //the same value for ATTR_FABRIC_GROUP_ID
+ TARGETING::ATTR_FABRIC_GROUP_ID_type iv_todDrawerId;
+
+ //This data member will identify if the current drawer is a Tod master
+ bool iv_isTodMaster;
+
+ //Target pointer of the node to which TodDrawer belongs
+ const TARGETING::Target * iv_parentNodeTarget;
+
+};
+
+}//end of namespace
+#endif //TODDRAWER_H
+
OpenPOWER on IntegriCloud