The MSDM ACPI table is a replacement for the SLIC table type, now
preferred by Microsoft for Windows Licensing checks:

  
https://learn.microsoft.com/en-us/previous-versions/windows/hardware/design/dn653305(v=vs.85)

Signed-off-by: Daniel P. Berrangé <berra...@redhat.com>
---
 docs/formatdomain.rst             | 4 ++--
 src/conf/domain_conf.c            | 1 +
 src/conf/domain_conf.h            | 1 +
 src/conf/schemas/domaincommon.rng | 5 ++++-
 src/libvirt_private.syms          | 2 ++
 src/libxl/libxl_domain.c          | 7 +++++++
 src/qemu/qemu_validate.c          | 7 +++++++
 7 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
index 381bf84f67..81dfd310ae 100644
--- a/docs/formatdomain.rst
+++ b/docs/formatdomain.rst
@@ -485,8 +485,8 @@ These options apply to any form of booting of the guest OS.
 
 ``acpi``
    The ``table`` element contains a fully-qualified path to the ACPI table. The
-   ``type`` attribute contains the ACPI table type (currently only ``slic`` is
-   supported) :since:`Since 1.3.5 (QEMU)` :since:`Since 5.9.0 (Xen)`
+   ``type`` attribute contains the ACPI table type:  ``slic`` (:since:`Since 
1.3.5 (QEMU)`
+   :since:`Since 5.9.0 (Xen)`, ``msdm``.
 
 
 SMBIOS System Information
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 04fb893587..e0f9ad3123 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -1460,6 +1460,7 @@ VIR_ENUM_IMPL(virDomainOsDefFirmwareFeature,
 VIR_ENUM_IMPL(virDomainOsACPITable,
               VIR_DOMAIN_OS_ACPI_TABLE_TYPE_LAST,
               "slic",
+              "msdm",
 );
 
 VIR_ENUM_IMPL(virDomainCFPC,
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 7735cce325..d84da21cca 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2476,6 +2476,7 @@ VIR_ENUM_DECL(virDomainOsDefFirmwareFeature);
 
 typedef enum {
     VIR_DOMAIN_OS_ACPI_TABLE_TYPE_SLIC,
+    VIR_DOMAIN_OS_ACPI_TABLE_TYPE_MSDM,
 
     VIR_DOMAIN_OS_ACPI_TABLE_TYPE_LAST
 } virDomainOsACPITable;
diff --git a/src/conf/schemas/domaincommon.rng 
b/src/conf/schemas/domaincommon.rng
index 3328a63205..9bae953295 100644
--- a/src/conf/schemas/domaincommon.rng
+++ b/src/conf/schemas/domaincommon.rng
@@ -7191,7 +7191,10 @@
       <zeroOrMore>
         <element name="table">
           <attribute name="type">
-            <value>slic</value>
+            <choice>
+              <value>slic</value>
+              <value>msdm</value>
+            </choice>
           </attribute>
           <ref name="absFilePath"/>
         </element>
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 30a9f806f0..db8c29ec1d 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -611,6 +611,8 @@ virDomainObjTaint;
 virDomainObjUpdateModificationImpact;
 virDomainObjWait;
 virDomainObjWaitUntil;
+virDomainOsACPITableTypeFromString;
+virDomainOsACPITableTypeToString;
 virDomainOsDefFirmwareTypeFromString;
 virDomainOsDefFirmwareTypeToString;
 virDomainOSTypeFromString;
diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
index 816ed2f349..5fb85931f4 100644
--- a/src/libxl/libxl_domain.c
+++ b/src/libxl/libxl_domain.c
@@ -336,6 +336,13 @@ libxlDomainDefValidate(const virDomainDef *def,
         case VIR_DOMAIN_OS_ACPI_TABLE_TYPE_SLIC:
             break;
 
+        case VIR_DOMAIN_OS_ACPI_TABLE_TYPE_MSDM:
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("ACPI table '%1$s' not supported"),
+                           virDomainOsACPITableTypeToString(
+                               def->os.acpiTables[i]->type));
+            return -1;
+
         default:
         case VIR_DOMAIN_OS_ACPI_TABLE_TYPE_LAST:
             virReportEnumRangeError(virDomainOsACPITable,
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index 039f5f84e6..0b3efcd700 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -747,6 +747,13 @@ qemuValidateDomainDefBoot(const virDomainDef *def,
         case VIR_DOMAIN_OS_ACPI_TABLE_TYPE_SLIC:
             break;
 
+        case VIR_DOMAIN_OS_ACPI_TABLE_TYPE_MSDM:
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("ACPI table '%1$s' not supported"),
+                           virDomainOsACPITableTypeToString(
+                               def->os.acpiTables[i]->type));
+            return -1;
+
         default:
         case VIR_DOMAIN_OS_ACPI_TABLE_TYPE_LAST:
             virReportEnumRangeError(virDomainOsACPITable,
-- 
2.47.1

Reply via email to