Create persistent memory specific interface

Create persistent memory specific interface.
    - Move persistent memory related properties from Dimm
      interface.
    - Keeping only SMBIOS type 17 standard properties under
      Dimm interface.
    - Create sub interfaces to keep things organized under
      new interface.

Tested:
    - Successful build and verified changes in
      server.hpp and server.cpp.

Signed-off-by: Nirmal Patel <nirmal.patel@intel.com>
Change-Id: I48bcab6196b4c840d9e1c53ae8cea1871fc36e67
diff --git a/xyz/openbmc_project/Inventory/Item/Dimm.interface.yaml b/xyz/openbmc_project/Inventory/Item/Dimm.interface.yaml
index a7aaa14..0244a44 100644
--- a/xyz/openbmc_project/Inventory/Item/Dimm.interface.yaml
+++ b/xyz/openbmc_project/Inventory/Item/Dimm.interface.yaml
@@ -57,113 +57,10 @@
       type: uint16
       description: >
           The bus width, in bits.
-    - name: AllowedSpeedsMHz
+    - name: AllowedSpeedsMT
       type: array[uint16]
       description: >
-          Speeds supported by this memory.
-    - name: MaxAveragePowerLimitmW
-      type: array[uint32]
-      description: >
-          Set of maximum power budgets supported by the memory in milliwatts.
-    - name: SpareDeviceCount
-      type: byte
-      description: >
-          Number of unused spare devices available in the memory.
-    - name: Socket
-      type: uint16
-      description: >
-          The socket number to which the memory is connected.
-    - name: MemoryController
-      type: uint16
-      description: >
-          The memory controller number to which the memory is connected.
-    - name: Channel
-      type: uint16
-      description: >
-          The channel number to which the memory is connected.
-    - name: Slot
-      type: uint16
-      description: >
-          The slot number to which the memory is connected.
-    - name: VolatileRegionSizeLimitKiB
-      type: uint32
-      description: >
-          Total size of volatile regions in kibibytes (KiB).
-    - name: PmRegionSizeLimitKiB
-      type: uint32
-      description: >
-          Total size of persistent regions in kibibytes (KiB).
-    - name: AllowedMemoryModes
-      type: array[string]
-      description: >
-          Memory modes supported by the memory.
-    - name: IsSpareDeviceInUse
-      type: boolean
-      description: >
-          An indication of whether a spare device is enabled for this memory.
-    - name: IsRankSpareEnabled
-      type: boolean
-      description: >
-          An indication of whether rank spare is enabled for this memory.
-    - name: VolatileRegionNumberLimit
-      type: uint16
-      description: >
-          Total number of volatile regions this memory can support.
-    - name: PmRegionNumberLimit
-      type: uint16
-      description: >
-          Total number of persistent regions this memory can support.
-    - name: VolatileRegionMaxSizeKiB
-      type: uint32
-      description: >
-          Maximum size of a single volatile region in kibibytes (KiB).
-    - name: PmRegionMaxSizeKiB
-      type: uint32
-      description: >
-          Maximum size of a single persistent region in kibibytes (KiB).
-    - name: AllocationIncrementInKiB
-      type: uint64
-      description: >
-          The size of the smallest unit of allocation for a memory region in
-          kibibytes (KiB).
-    - name: AllocationAlignementInKiB
-      type: uint64
-      description: >
-          The boundary that memory regions are allocated on, measured in
-          kibibytes (KiB).
-    - name: ModuleManufacturerID
-      type: string
-      description: >
-          The manufacturer ID of this memory module.
-    - name: ModuleProductID
-      type: string
-      description: >
-          The product ID of this memory module.
-    - name: SubsystemVendorID
-      type: string
-      description: >
-          The manufacturer ID of the memory subsystem controller of this
-          memory module.
-    - name: SubsystemDeviceID
-      type: string
-      description: >
-          The product ID of the memory subsystem controller of this memory
-          module.
-    - name: VolatileSizeInKiB
-      type: uint32
-      description: >
-          Total size of the volatile portion memory in kibibytes (KiB).
-    - name: PmSizeInKiB
-      type: uint32
-      description: >
-          Total size of the non-volatile portion memory in kibibytes (KiB).
-    - name: CacheSizeInKB
-      type: uint32
-      description: >
-          Total size of the cache portion memory in kibibytes (KiB).
-    - name: MemoryMedia
-      type: array[string]
-      description: Media of this memory.
+          Speeds supported by this memory in megatransfers.
 
 enumerations:
     - name: Ecc
diff --git a/xyz/openbmc_project/Inventory/Item/Dimm/MemoryLocation.interface.yaml b/xyz/openbmc_project/Inventory/Item/Dimm/MemoryLocation.interface.yaml
new file mode 100644
index 0000000..43e838f
--- /dev/null
+++ b/xyz/openbmc_project/Inventory/Item/Dimm/MemoryLocation.interface.yaml
@@ -0,0 +1,20 @@
+description: >
+    Implement to provide Memory connection information to sockets
+    and memory controllers.
+properties:
+    - name: Socket
+      type: byte
+      description: >
+          CPU socket.
+    - name: MemoryController
+      type: byte
+      description: >
+          Memory controller number of given socket.
+    - name: Channel
+      type: byte
+      description: >
+          Channel number of given memory controller.
+    - name: Slot
+      type: byte
+      description: >
+          Slot of given channel.
\ No newline at end of file
diff --git a/xyz/openbmc_project/Inventory/Item/Dimm/SecurityCapabilities.interface.yaml b/xyz/openbmc_project/Inventory/Item/Dimm/SecurityCapabilities.interface.yaml
deleted file mode 100644
index e99c121..0000000
--- a/xyz/openbmc_project/Inventory/Item/Dimm/SecurityCapabilities.interface.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-description: >
-    Implement to provide security capability attributes.
-properties:
-    - name: MaxPassphraseCount
-      type: int32
-      description: >
-          Maximum number of passphrases supported for this Memory.
-    - name: PassphraseCapable
-      type: boolean
-      description: >
-          Memory passphrase set capability.
-    - name: SecurityStates
-      type: array[string]
-      description: >
-          Security states supported by the Memory.
diff --git a/xyz/openbmc_project/Inventory/Item/PersistentMemory.interface.yaml b/xyz/openbmc_project/Inventory/Item/PersistentMemory.interface.yaml
new file mode 100644
index 0000000..9396726
--- /dev/null
+++ b/xyz/openbmc_project/Inventory/Item/PersistentMemory.interface.yaml
@@ -0,0 +1,109 @@
+description: >
+    Implement to provide Persistent memory attributes.
+properties:
+    - name: ModuleManufacturerID
+      type: uint16
+      description: >
+          The manufacturer ID of this memory module as defined by JEDEC in
+          JEP-106.
+    - name: ModuleProductID
+      type: uint16
+      description: >
+          The product ID of this memory module as defined by JEDEC in JEP-106.
+    - name: SubsystemVendorID
+      type: uint16
+      description: >
+          The manufacturer ID of the memory subsystem controller of this
+          memory module as defined by JEDEC in JEP-106.
+    - name: SubsystemDeviceID
+      type: uint16
+      description: >
+          The product ID of the memory subsystem controller of this memory
+          moduleas defined by JEDEC in JEP-106.
+    - name: VolatileRegionSizeLimitInKiB
+      type: uint64
+      description: >
+          Total size of volatile regions in kibibytes (KiB).
+    - name: PmRegionSizeLimitInKiB
+      type: uint64
+      description: >
+          Total size of persistent regions in kibibytes (KiB).
+    - name: VolatileSizeInKiB
+      type: uint64
+      description: >
+          Total size of the volatile portion memory in kibibytes (KiB).
+    - name: PmSizeInKiB
+      type: uint64
+      description: >
+          Total size of the non-volatile portion memory in kibibytes (KiB).
+    - name: CacheSizeInKiB
+      type: uint64
+      description: >
+          Total size of the cache portion memory in kibibytes (KiB).
+    - name: VolatileRegionMaxSizeInKiB
+      type: uint64
+      description: >
+          Maximum size of a single volatile region in kibibytes (KiB).
+    - name: PmRegionMaxSizeInKiB
+      type: uint64
+      description: >
+          Maximum size of a single persistent region in kibibytes (KiB).
+    - name: AllocationIncrementInKiB
+      type: uint64
+      description: >
+          The size of the smallest unit of allocation for a memory region in
+          kibibytes (KiB).
+    - name: AllocationAlignmentInKiB
+      type: uint64
+      description: >
+          The boundary that memory regions are allocated on, measured in
+          kibibytes (KiB).
+    - name: VolatileRegionNumberLimit
+      type: uint32
+      description: >
+          Total number of volatile regions this memory can support.
+    - name: PmRegionNumberLimit
+      type: uint32
+      description: >
+          Total number of persistent regions this memory can support.
+    - name: SpareDeviceCount
+      type: uint32
+      description: >
+          Number of unused spare devices available in the memory.
+    - name: IsSpareDeviceInUse
+      type: boolean
+      description: >
+          An indication of whether a spare device is enabled for this memory.
+    - name: IsRankSpareEnabled
+      type: boolean
+      description: >
+          An indication of whether rank spare is enabled for this memory.
+    - name: MaxAveragePowerLimitmW
+      type: array[uint32]
+      description: >
+          Set of maximum power budgets supported by the memory in milliwatts.
+    - name: CurrentSecurityState
+      type: string
+      description: The current security state of this memory.
+    - name: ConfigurationLocked
+      type: boolean
+      description: The current configuration lock state of this memory.
+    - name: AllowedMemoryModes
+      type: array[enum[self.MemoryModes]]
+      description: >
+          Memory modes supported by the memory.
+
+enumerations:
+    - name: MemoryModes
+      description: >
+          Memory modes supported by the memory module.
+      values:
+        - name: Volatile
+          description: >
+              Memory module supports volatile or non-persistent memory mode.
+        - name: Persistent
+          description: >
+              Memory module supports apt direct mode.
+        - name: Block
+          description: >
+              Memory module supports block mode.
\ No newline at end of file
diff --git a/xyz/openbmc_project/Inventory/Item/Dimm/Partition.interface.yaml b/xyz/openbmc_project/Inventory/Item/PersistentMemory/Partition.interface.yaml
similarity index 90%
rename from xyz/openbmc_project/Inventory/Item/Dimm/Partition.interface.yaml
rename to xyz/openbmc_project/Inventory/Item/PersistentMemory/Partition.interface.yaml
index 45105ac..80bb730 100644
--- a/xyz/openbmc_project/Inventory/Item/Dimm/Partition.interface.yaml
+++ b/xyz/openbmc_project/Inventory/Item/PersistentMemory/Partition.interface.yaml
@@ -5,7 +5,7 @@
       type: string
       description: >
           Unique region ID representing a specific region within the Memory.
-    - name: SizeKiB
+    - name: SizeInKiB
       type: uint64
       description: >
           Size of this memory region in kibibytes (KiB).
@@ -13,11 +13,11 @@
       type: string
       description: >
           Classification of memory occupied by the given memory region.
-    - name: OffsetMiB
+    - name: OffsetInKiB
       type: uint64
       description: >
           Offset with in the Memory that corresponds to the starting of this
-          memory region in MiB.
+          memory region in KiB.
     - name: PassphraseState
       type: boolean
       description: >
diff --git a/xyz/openbmc_project/Inventory/Item/PersistentMemory/PowerManagementPolicy.interface.yaml b/xyz/openbmc_project/Inventory/Item/PersistentMemory/PowerManagementPolicy.interface.yaml
new file mode 100644
index 0000000..d5231d7
--- /dev/null
+++ b/xyz/openbmc_project/Inventory/Item/PersistentMemory/PowerManagementPolicy.interface.yaml
@@ -0,0 +1,20 @@
+description: >
+    Implement to provide the power management policy for the current
+    resource.
+properties:
+    - name: PolicyEnabled
+      type: boolean
+      description: >
+          Power management policy enabled status.
+    - name: MaxTDPmW
+      type: uint32
+      description: >
+          Maximum TDP in milliwatts.
+    - name: PeakPowerBudgetmW
+      type: uint32
+      description: >
+          Peak power budget in milliwatts.
+    - name: AveragePowerBudgetmW
+      type: uint32
+      description: >
+          Average power budget in milliwatts.
\ No newline at end of file
diff --git a/xyz/openbmc_project/Inventory/Item/PersistentMemory/SecurityCapabilities.interface.yaml b/xyz/openbmc_project/Inventory/Item/PersistentMemory/SecurityCapabilities.interface.yaml
new file mode 100644
index 0000000..23ca54e
--- /dev/null
+++ b/xyz/openbmc_project/Inventory/Item/PersistentMemory/SecurityCapabilities.interface.yaml
@@ -0,0 +1,24 @@
+description: >
+    Implement to provide security capability attributes.
+properties:
+    - name: MaxPassphraseCount
+      type: uint32
+      description: >
+          Maximum number of passphrases supported for this Memory.
+    - name: PassphraseCapable
+      type: boolean
+      description: >
+          Memory passphrase set capability.
+    - name: ConfigurationLockCapable
+      type: boolean
+      description: >
+          An indication of whether this memory supports the locking.
+    - name: DataLockCapable
+      type: boolean
+      description: >
+          An indication of whether this memory supports data locking.
+    - name: PassphraseLockLimit
+      type: uint32
+      description: >
+          The maximum number of incorrect passphrase attempts
+          allowed before memory is locked.
\ No newline at end of file