Create SCOM and ID SCOM register classes
SCOM and ID SCOM registers are specialized register that will exist
under the HardwareRegister abstract class.
Change-Id: I40c39536ca7321c9ef36347cef2320cf7fc4da49
Signed-off-by: Zane Shelley <zshelle@us.ibm.com>
diff --git a/src/register/hei_hardware_register.hpp b/src/register/hei_hardware_register.hpp
index 255cf5a..3d2f974 100755
--- a/src/register/hei_hardware_register.hpp
+++ b/src/register/hei_hardware_register.hpp
@@ -18,8 +18,8 @@
{
/**
- * @brief Stores information (e.g. address, type, length, etc.) for an actual
- * hardware register.
+ * @brief An abstract class containing information (e.g. address, type, length,
+ * etc.) for an actual hardware register.
*
* Hardware access:
*
@@ -52,6 +52,69 @@
{
public:
+ /** @brief Pure virtual destructor. */
+ virtual ~HardwareRegister() = 0;
+
+ protected:
+
+ /**
+ * @brief Constructor from components.
+ * @param i_chipType Type of chip associated with this register.
+ * @param i_id Unique ID for this register.
+ * @param i_instance Instance of this register
+ * @param i_accessLevel Hardware access level for this register.
+ */
+ HardwareRegister( ChipType_t i_chipType, RegisterId_t i_id,
+ RegisterInstance_t i_instance,
+ RegisterAccessLevel_t i_accessLevel ) :
+ Register(), iv_chipType( i_chipType ), iv_id( i_id ),
+ iv_instance( i_instance ), iv_accessLevel( i_accessLevel )
+ {}
+
+ private: // Instance variables
+
+ /** The type of chip associated with register. */
+ const ChipType_t iv_chipType;
+
+ /** The unique ID for this register. */
+ const RegisterId_t iv_id;
+
+ /** A register may have multiple instances. All of which will have the same
+ * ID. This variable is used to distinguish between each instance of the
+ * register. */
+ const RegisterInstance_t iv_instance;
+
+ /** The hardware access level of this register (read/write, read-only,
+ * write-only, etc.). */
+ const RegisterAccessLevel_t iv_accessLevel;
+
+ public: // Accessor functions
+
+ /** @return The type of chip associated with this register. */
+ ChipType_t getChipType() const { return iv_chipType; }
+
+ /* @return The unique ID for this register. */
+ RegisterId_t getId() const { return iv_id; }
+
+ /* @return The instance of this register. */
+ RegisterInstance_t getInstance() const { return iv_instance; }
+
+ /** @return The hardware access level of this register. */
+ RegisterAccessLevel_t getAccessLevel() const { return iv_accessLevel; }
+
+ // NOTE: The following are determined by child classes.
+
+ /** @return This register's type. */
+ virtual RegisterType_t getRegisterType() const = 0;
+
+ /** @return The address of this register. */
+ virtual RegisterAddress_t getAddress() const = 0;
+
+ /** @return The size (in bytes) of this register. */
+ virtual size_t getSize() const = 0;
+
+ public:
+
#if 0
/**
* @brief constructor