// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "garnet/bin/guest/vmm/arch/x64/e820.h"

#include <zircon/boot/e820.h>

// clang-format off

static constexpr uint64_t kAddr32kb     = 0x0000000000008000;
static constexpr uint64_t kAddr512kb    = 0x0000000000080000;
static constexpr uint64_t kAddr1mb      = 0x0000000000100000;

// clang-format on

E820Map::E820Map(size_t mem_size, const DevMem &dev_mem) {
  // 0 to 32kb is reserved.
  entries.emplace_back(e820entry_t{0, kAddr32kb, E820_RESERVED});
  // 32kb to to 512kb is available (for Linux's real mode trampoline).
  entries.emplace_back(
      e820entry_t{kAddr32kb, kAddr512kb - kAddr32kb, E820_RAM});
  // 512kb to 1mb is reserved.
  entries.emplace_back(
      e820entry_t{kAddr512kb, kAddr1mb - kAddr512kb, E820_RESERVED});
  // 1mb to min(size, 1mb) is available.
  dev_mem.YieldInverseRange(kAddr1mb, mem_size - kAddr1mb, [this](auto range) {
    entries.emplace_back(e820entry_t{range.addr, range.size, E820_RAM});
  });
}
