Control: Add Failover interface

Create an interface to start a failover, where a failover is the
mechanism where one entity takes over the operation of another.

The first use will be to failover to another BMC, using the design at
https://gerrit.openbmc.org/c/openbmc/docs/+/70233, though the intent is
the interface can also be used for other sorts of failovers.

Change-Id: I32789f6b8f01d1baed95d387e6815a797d5b45b8
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
diff --git a/yaml/xyz/openbmc_project/Control/Failover.interface.yaml b/yaml/xyz/openbmc_project/Control/Failover.interface.yaml
new file mode 100644
index 0000000..99dc5fb
--- /dev/null
+++ b/yaml/xyz/openbmc_project/Control/Failover.interface.yaml
@@ -0,0 +1,30 @@
+description: >
+    Implement to provide an interface to start a failover.  Depending on the
+    implementation, this may reside on the 'from' or 'to' object (or both).  The
+    'Options' method argument provides a mechanism to provide implementation
+    specific options.
+
+methods:
+    - name: StartFailover
+      description: >
+          Starts a failover operation.
+      parameters:
+          - name: Options
+            type: dict[string, variant[boolean]]
+            description: >
+                Additional options. The key is the string version of the Options
+                enum, in the form of
+                'xyz.openbmc_project.Control.Failover.Options.X'.
+      errors:
+          - xyz.openbmc_project.Common.Error.Unavailable
+
+enumerations:
+    - name: Options
+      description: >
+          Available options for starting the failover.
+      values:
+          - name: "Force"
+            description: >
+                A boolean option to force the failover when it would normally
+                not be available.  The checks it bypasses are implementation
+                dependent.