From df444bf68abe840ad05d689996110e9354a2fa6e Mon Sep 17 00:00:00 2001
From: Patrick Georgi <patrick.georgi@coresystems.de>
Date: Tue, 21 Apr 2009 20:34:36 +0000
Subject: Add a helper function to acpigen to create _PSD tables.

Signed-off-by: Patrick Georgi <patrick.georgi@coresystems.de>
Acked-by: Stefan Reinauer <stepan@coresystems.de>


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4154 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
---
 src/arch/i386/boot/acpigen.c         | 18 ++++++++++++++++++
 src/arch/i386/include/arch/acpigen.h |  2 ++
 2 files changed, 20 insertions(+)

(limited to 'src')

diff --git a/src/arch/i386/boot/acpigen.c b/src/arch/i386/boot/acpigen.c
index f1132f610b..5c8bd56548 100644
--- a/src/arch/i386/boot/acpigen.c
+++ b/src/arch/i386/boot/acpigen.c
@@ -260,3 +260,21 @@ int acpigen_write_PSS_package(u32 coreFreq, u32 power, u32 transLat, u32 busmLat
 	acpigen_patch_len(len - 1);
 	return len;
 }
+
+int acpigen_write_PSD_package(u32 domain, u32 numprocs, PSD_coord coordtype)
+{
+	int len, lenh, lenp;
+	lenh = acpigen_write_name("_PSD");
+	lenp = acpigen_write_package(1);
+	len = acpigen_write_package(5);
+	len += acpigen_write_byte(5); // 5 values
+	len += acpigen_write_byte(0); // revision 0
+	len += acpigen_write_dword(domain);
+	len += acpigen_write_dword(coordtype);
+	len += acpigen_write_dword(numprocs);
+	acpigen_patch_len(len-1);
+	len += lenp;
+	acpigen_patch_len(len-1);
+	return len + lenh;
+}
+
diff --git a/src/arch/i386/include/arch/acpigen.h b/src/arch/i386/include/arch/acpigen.h
index 074f6415bb..0abeae5050 100644
--- a/src/arch/i386/include/arch/acpigen.h
+++ b/src/arch/i386/include/arch/acpigen.h
@@ -40,5 +40,7 @@ int acpigen_write_PPC(u8 nr);
 int acpigen_write_empty_PCT(void);
 int acpigen_write_PSS_package(u32 coreFreq, u32 power, u32 transLat, u32 busmLat,
 			u32 control, u32 status);
+typedef enum { SW_ALL=0xfc, SW_ANY=0xfd, HW_ALL=0xfe } PSD_coord;
+int acpigen_write_PSD_package(u32 domain, u32 numprocs, PSD_coord coordtype);
 int acpigen_write_processor(u8 cpuindex, u32 pblock_addr, u8 pblock_len);
 #endif
-- 
cgit v1.2.3