1// Copyright 2018 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4//
5
6#pragma once
7
8#include <stdint.h>
9#include <zircon/compiler.h>
10#include <zircon/types.h>
11#include <acpica/acpi.h>
12#include <acpica/actypes.h>
13
14#define ACPI_UUID_SIZE 16u
15
16__BEGIN_CDECLS;
17
18zx_status_t acpi_bbn_call(ACPI_HANDLE dev_obj, uint8_t* out_bbn);
19zx_status_t acpi_crt_call(ACPI_HANDLE dev_obj, uint64_t* out);
20
21// Call the ACPI _OSC method on a device object.
22//
23// Returns values:
24//  ZX_ERR_INVALID_ARGS: dwords_in or dwords_out are NULL, dword_cnt is less than 2,
25//                       or the UUID is incorrectly formatted.
26//  ZX_ERR_BUFFER_TOO_SMALL: The dwords provided are not large enough for the result
27//                           from the method.
28//  ZX_ERR_INTERNAL: The method returned an error bit that should be checked in dwords_out[0]
29zx_status_t acpi_osc_call(ACPI_HANDLE dev_obj,
30                          const char* uuid_str,
31                          uint64_t revision,
32                          size_t dword_cnt,
33                          uint32_t* dwords_in,
34                          uint32_t* dwords_out,
35                          bool* bit_masked);
36zx_status_t acpi_psv_call(ACPI_HANDLE dev_obj, uint64_t* out);
37zx_status_t acpi_seg_call(ACPI_HANDLE dev_obj, uint8_t* out_seg);
38zx_status_t acpi_tmp_call(ACPI_HANDLE dev_obj, uint64_t* out);
39
40__END_CDECLS;
41