summaryrefslogtreecommitdiffstats
path: root/src/usr/sbeio/sbe_memRegionMgr.H
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/sbeio/sbe_memRegionMgr.H')
-rw-r--r--src/usr/sbeio/sbe_memRegionMgr.H52
1 files changed, 46 insertions, 6 deletions
diff --git a/src/usr/sbeio/sbe_memRegionMgr.H b/src/usr/sbeio/sbe_memRegionMgr.H
index 0fc9f27bf..c886c28c6 100644
--- a/src/usr/sbeio/sbe_memRegionMgr.H
+++ b/src/usr/sbeio/sbe_memRegionMgr.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2017 */
+/* Contributors Listed Below - COPYRIGHT 2017,2018 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -27,8 +27,10 @@
#include <stdint.h>
#include <errl/errlentry.H>
-#include <vector>
+#include <list>
#include <sbeio/sbeioif.H>
+#include <targeting/common/target.H>
+#include <map>
namespace SBEIO
{
@@ -52,11 +54,15 @@ struct regionData
// Target associated with the SBE
// - If tgt == nullptr it will eventually be updated to the Master Proc
- TARGETING::Target* tgt;
+ TARGETING::TargetHandle_t tgt;
regionData() : start_addr(0), size(0), flags(0), tgt(nullptr) {}
};
+typedef std::list<regionData> RegionDataList;
+typedef std::pair<TARGETING::TargetHandle_t, RegionDataList> MemRegionMapPair;
+typedef std::map<TARGETING::TargetHandle_t, RegionDataList> MemRegionMap;
+
/** @class MemRegionMgr
* @brief Responsible for managing the SBE Unsecure Memory Regions
*
@@ -66,12 +72,17 @@ class MemRegionMgr
private:
- /** Cache of Unsecure Memory Regions that are currently open */
- std::list< regionData > iv_memRegions;
+ /** Cache of Unsecure Memory Regions that are currently open
+ * Key = Target Pointer, Value = List of Memory Regions
+ */
+ MemRegionMap iv_memRegionMap;
- /* For Debug purposes: Pring Out Vector of iv_memRegions */
+ /* For Debug purposes: Print out memory region map */
void printIvMemRegions() const;
+ /* Cache master proc */
+ TARGETING::TargetHandle_t iv_masterProc;
+
/**
* @brief Local Function To Open/Close Unsecure Memory Regions
*
@@ -94,6 +105,35 @@ class MemRegionMgr
*/
errlHndl_t checkNumberOfMemRegions(uint8_t i_count) const;
+ /**
+ * @brief Append region data to region list of specified target
+ *
+ * @param[in] i_target Proc target to apply region data to
+ * Note: nullptr assumed to be acting master proc
+ * @param[in] i_region Region data
+ *
+ * @return N/A
+ */
+ void addToTargetRegionList(TARGETING::TargetHandle_t i_target,
+ const regionData& i_region);
+
+ /**
+ * @brief Get region data list of specified target
+ *
+ * @param[in] i_target Proc target to obtain region data list from
+ * Note: nullptr assumed to be acting master proc
+ *
+ * @return N/A
+ */
+ RegionDataList* getTargetRegionList(TARGETING::TargetHandle_t i_target);
+
+ /**
+ * @brief Get number of all memory regions amongst all targets
+ *
+ * @return N/A
+ */
+ uint8_t getTotalNumOfRegions() const;
+
public:
/**
* @brief Constructor. Initializes instance variables.
OpenPOWER on IntegriCloud