From f8e433c4e75df442822b32646e14c731de5f583f Mon Sep 17 00:00:00 2001 From: Connor Wood Date: Sat, 22 Jul 2017 11:13:30 +0100 Subject: [PATCH] Implemented sleep --- src/acpi/aml/type1opcode.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/acpi/aml/type1opcode.rs b/src/acpi/aml/type1opcode.rs index 73c2c6f..ee9d8cb 100644 --- a/src/acpi/aml/type1opcode.rs +++ b/src/acpi/aml/type1opcode.rs @@ -292,10 +292,22 @@ fn parse_def_sleep(data: &[u8], }) } - // TODO: Sleep the processor for the specified number of milliseconds (minimum) parser_opcode_extended!(data, 0x22); let time = parse_term_arg(&data[2..], ctx)?; + let timeout = time.val.get_as_integer()?; + + let (seconds, nanoseconds) = monotonic(); + let starting_time_ns = nanoseconds + (seconds * 1000000000); + + loop { + let (seconds, nanoseconds) = monotonic(); + let current_time_ns = nanoseconds + (seconds * 1000000000); + + if current_time_ns - starting_time_ns > timeout as u64 * 1000000 { + break; + } + } Ok(AmlParseType { val: AmlValue::None,