HardwareIsolation: Added the "Create" interface

In an OpenPOWER based system, the user can isolate hardware,
and the respective isolated hardware part will be ignored
to init during the next boot of the host.

This interface can be used by a user to manually isolate
hardware and we don't have/generate the event log because
this is not an error case and the user voluntarily tried to
isolate hardware.

The added method will throw below exceptions.
- xyz.openbmc_project.Common.Error.InvalidArgument
  - If the given parameters are invalid.
  - If the given hardware is not found to isolate.
- xyz.openbmc_project.Common.Error.TooManyResources
  - If the platforms are not allowed to isolate hardware
    when the isolated hardware count is reached to the maximum
    allowed size.
- xyz.openbmc_project.HardwareIsolation.Error.IsolatedAlready
  - If the isolating hardware is already isolated.
- xyz.openbmc_project.Common.Error.NotAllowed
  - If the given hardware cannot be isolated permanently.
- xyz.openbmc_project.Common.Error.Unavailable
  - If the given hardware cannot be isolated temporarily.

Please refer https://gerrit.openbmc-project.xyz/c/openbmc/docs/+/27804
to get more details of hardware isolation.

Signed-off-by: Ramesh Iyyar <rameshi1@in.ibm.com>
Change-Id: I8868e0f7e07694a902b790a909ee7ff20272ca81
diff --git a/gen/xyz/openbmc_project/HardwareIsolation/Create/meson.build b/gen/xyz/openbmc_project/HardwareIsolation/Create/meson.build
new file mode 100644
index 0000000..a97812f
--- /dev/null
+++ b/gen/xyz/openbmc_project/HardwareIsolation/Create/meson.build
@@ -0,0 +1,14 @@
+# Generated file; do not modify.
+generated_sources += custom_target(
+    'xyz/openbmc_project/HardwareIsolation/Create__cpp'.underscorify(),
+    input: [ '../../../../../yaml/xyz/openbmc_project/HardwareIsolation/Create.interface.yaml',  ],
+    output: [ 'server.cpp', 'server.hpp', 'client.hpp',  ],
+    command: [
+        sdbuspp_gen_meson_prog, '--command', 'cpp',
+        '--output', meson.current_build_dir(),
+        '--tool', sdbusplusplus_prog,
+        '--directory', meson.current_source_dir() / '../../../../../yaml',
+        'xyz/openbmc_project/HardwareIsolation/Create',
+    ],
+)
+
diff --git a/gen/xyz/openbmc_project/HardwareIsolation/meson.build b/gen/xyz/openbmc_project/HardwareIsolation/meson.build
index 442741b..8ca2002 100644
--- a/gen/xyz/openbmc_project/HardwareIsolation/meson.build
+++ b/gen/xyz/openbmc_project/HardwareIsolation/meson.build
@@ -12,6 +12,20 @@
     ],
 )
 
+subdir('Create')
+generated_others += custom_target(
+    'xyz/openbmc_project/HardwareIsolation/Create__markdown'.underscorify(),
+    input: [ '../../../../yaml/xyz/openbmc_project/HardwareIsolation/Create.interface.yaml',  ],
+    output: [ 'Create.md' ],
+    command: [
+        sdbuspp_gen_meson_prog, '--command', 'markdown',
+        '--output', meson.current_build_dir(),
+        '--tool', sdbusplusplus_prog,
+        '--directory', meson.current_source_dir() / '../../../../yaml',
+        'xyz/openbmc_project/HardwareIsolation/Create',
+    ],
+)
+
 subdir('Entry')
 generated_others += custom_target(
     'xyz/openbmc_project/HardwareIsolation/Entry__markdown'.underscorify(),
diff --git a/yaml/xyz/openbmc_project/HardwareIsolation/Create.interface.yaml b/yaml/xyz/openbmc_project/HardwareIsolation/Create.interface.yaml
new file mode 100644
index 0000000..9a2b23e
--- /dev/null
+++ b/yaml/xyz/openbmc_project/HardwareIsolation/Create.interface.yaml
@@ -0,0 +1,33 @@
+description: >
+    This interface contains create method, which can be implemented to
+    create an xyz.openbmc_project.HardwareIsolation.Entry object
+    which will use to provide the information of isolated hardware.
+
+methods:
+    - name: Create
+      description: >
+          Create an xyz.openbmc_project.HardwareIsolation.Entry object
+          if any of the hardware, needs to be isolated. This interface
+          can be used if want to isolate hardware without an error log,
+          for example, the user voluntarily tried to isolate hardware.
+      parameters:
+        - name: IsolateHardware
+          type: path
+          description: >
+              The hardware inventory path which is needs to isolate.
+        - name: Severity
+          type: enum[xyz.openbmc_project.HardwareIsolation.Entry.Type]
+          description: >
+              The severity of hardware isolation.
+      returns:
+        - name: Path
+          type: path
+          description: >
+              The path of created xyz.openbmc_project.HardwareIsolation.Entry
+              object.
+      errors:
+          - xyz.openbmc_project.Common.Error.InvalidArgument
+          - xyz.openbmc_project.Common.Error.TooManyResources
+          - xyz.openbmc_project.HardwareIsolation.Error.IsolatedAlready
+          - xyz.openbmc_project.Common.Error.NotAllowed
+          - xyz.openbmc_project.Common.Error.Unavailable