summaryrefslogtreecommitdiff
path: root/src/arch/i386/boot/acpigen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/i386/boot/acpigen.c')
-rw-r--r--src/arch/i386/boot/acpigen.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/arch/i386/boot/acpigen.c b/src/arch/i386/boot/acpigen.c
index 6342a69572..53bf6d0841 100644
--- a/src/arch/i386/boot/acpigen.c
+++ b/src/arch/i386/boot/acpigen.c
@@ -97,6 +97,21 @@ int acpigen_write_dword(unsigned int data)
return 5;
}
+int acpigen_write_qword(uint64_t data)
+{
+ /* qword op */
+ acpigen_emit_byte(0xe);
+ acpigen_emit_byte(data & 0xff);
+ acpigen_emit_byte((data >> 8) & 0xff);
+ acpigen_emit_byte((data >> 16) & 0xff);
+ acpigen_emit_byte((data >> 24) & 0xff);
+ acpigen_emit_byte((data >> 32) & 0xff);
+ acpigen_emit_byte((data >> 40) & 0xff);
+ acpigen_emit_byte((data >> 48) & 0xff);
+ acpigen_emit_byte((data >> 56) & 0xff);
+ return 9;
+}
+
int acpigen_write_name_byte(char *name, uint8_t val) {
int len;
len = acpigen_write_name(name);
@@ -111,6 +126,13 @@ int acpigen_write_name_dword(char *name, uint32_t val) {
return len;
}
+int acpigen_write_name_qword(char *name, uint64_t val) {
+ int len;
+ len = acpigen_write_name(name);
+ len += acpigen_write_qword(val);
+ return len;
+}
+
int acpigen_emit_stream(char *data, int size) {
int i;
for (i = 0; i < size; i++) {