Slic for qemu-kvm

This article is a howto for activation-ready of Windows.
SLIC 2.0 is for 2003 & XP, and 2.1 for Win7 & 2008
Original seabios reads slic table from exactly the host. However, if your motherboard(not OEM) happen to own none, you will most probably make one by your self.

Seabios

You could get the lastest code from here.

git clone git://git.seabios.org/seabios.git seabios

Or, you can download from here.

seabios-1.7.2.2.tar.gz

SLIC-BIN

Here’s a collection of various slic table.
SLIC 2.1 BINS

Seaslic patch

This is patch for seabios to make it slic table enabled.
Download from here.

Seaslic.tar.xz, seabios-1.7.2 compatible
Here’s the patch content.

--- a/src/acpi.c	2013-01-19 06:44:54.000000000 +0600
+++ b/src/acpi.c	2013-05-07 01:16:30.000000000 +0600
@@ -214,6 +214,11 @@

 #include "acpi-dsdt.hex"

+#define CONFIG_OEM_SLIC
+#ifdef CONFIG_OEM_SLIC
+#include "acpi-slic.hex"
+#endif
+
 static void
 build_header(struct acpi_table_header *h, u32 sig, int len, u8 rev)
 {
@@ -226,6 +231,10 @@
     h->oem_revision = cpu_to_le32(1);
     memcpy(h->asl_compiler_id, CONFIG_APPNAME4, 4);
     h->asl_compiler_revision = cpu_to_le32(1);
+    #ifdef CONFIG_OEM_SLIC
+    if (sig == RSDT_SIGNATURE) // only RSDT is checked by win7 & vista
+	memcpy(h->oem_id, ((struct acpi_table_header*)SLIC)->oem_id, 14);
+    #endif
     h->checksum -= checksum(h, len);
 }

@@ -827,6 +836,15 @@
     ACPI_INIT_TABLE(build_srat());
     if (pci->device == PCI_DEVICE_ID_INTEL_ICH9_LPC)
         ACPI_INIT_TABLE(build_mcfg_q35());
+    #ifdef CONFIG_OEM_SLIC
+	void *buf = malloc_high(sizeof(SLIC));
+	if (!buf)
+	    warn_noalloc();
+	else {
+	    memcpy(buf, SLIC, sizeof(SLIC));
+	    ACPI_INIT_TABLE(buf);
+	}
+    #endif

     u16 i, external_tables = qemu_cfg_acpi_additional_tables();

Compile

You don’t have to apply the seaslic patch with patch.sh, you can do that by hand.
Before you start, do this:

xxd -i /sys/firmware/acpi/tables/SLIC | grep -v len | sed 's/unsigned ch   ar.*/static char SLIC[] = {/' > seabios.submodule/src/acpi-slic.hex

Or,

xxd -i DELL.BIN | grep -v len | sed 's/unsigned ch   ar.*/static char SLIC[] = {/' > seabios.submodule/src/acpi-slic.hex

After applying the patch, you can compile the bios.bin, and copy that to /usr/share/qemu-kvm/my-bios.bin or rewrite bios.bin instead.
Here’s my bios.bin with Dell[DELL-QA09-NVDA]2.1.BIN from SLIC BIN

my-bin.tar.xz

Qemu-cmd

qemu-kvm XXX -bios /usr/share/qemu-kvm/my-bios.bin -acpitable file=Dell[DELL-QA09-NVDA]2.1.BIN

In the guest, you could see that SLIC by /sys/firmware/acpi/tables/SLIC in Linux or SLIC_Toolkit in Windows.

4 thoughts on “Slic for qemu-kvm

  1. Seaslic.tar.xz, seabios-1.7.2 compatible
    ———
    这个链接已经失效了,麻烦博主重新提供下!

  2. Thank you for this post and the explanation…
    and even more thank you for attaching your bios.bin! Saved my day today!

    Cheers.

发表评论

您的电子邮箱地址不会被公开。