// Copyright 2020 The Fuchsia Authors
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT

#ifndef ZIRCON_KERNEL_LIB_ACPI_LITE_INCLUDE_LIB_ACPI_LITE_ZIRCON_H_
#define ZIRCON_KERNEL_LIB_ACPI_LITE_INCLUDE_LIB_ACPI_LITE_ZIRCON_H_

#include <lib/acpi_lite.h>
#include <lib/zx/result.h>
#include <zircon/types.h>

namespace acpi_lite {

// Convert physical addresses to virtual addresses using Zircon's standard conversion
// functions.
class ZirconPhysmemReader final : public PhysMemReader {
 public:
  constexpr ZirconPhysmemReader() = default;

  zx::result<const void*> PhysToPtr(uintptr_t phys, size_t length) final;
};

// Create a new AcpiParser, starting at the given Root System Description Pointer (RSDP),
// and using Zircon's |paddr_to_physmap| implementation to convert physical addresses
// to virtual addresses.
zx::result<AcpiParser> AcpiParserInit(zx_paddr_t rsdp_pa);

}  // namespace acpi_lite

#endif  // ZIRCON_KERNEL_LIB_ACPI_LITE_INCLUDE_LIB_ACPI_LITE_ZIRCON_H_
