qemu/hw/i386/e820_memory_layout.c
<<
>>
Prefs
   1/*
   2 * QEMU BIOS e820 routines
   3 *
   4 * Copyright (c) 2003-2004 Fabrice Bellard
   5 *
   6 * SPDX-License-Identifier: MIT
   7 */
   8
   9#include "qemu/osdep.h"
  10#include "qemu/bswap.h"
  11#include "e820_memory_layout.h"
  12
  13static size_t e820_entries;
  14struct e820_entry *e820_table;
  15
  16int e820_add_entry(uint64_t address, uint64_t length, uint32_t type)
  17{
  18    /* new "etc/e820" file -- include ram and reserved entries */
  19    e820_table = g_renew(struct e820_entry, e820_table, e820_entries + 1);
  20    e820_table[e820_entries].address = cpu_to_le64(address);
  21    e820_table[e820_entries].length = cpu_to_le64(length);
  22    e820_table[e820_entries].type = cpu_to_le32(type);
  23    e820_entries++;
  24
  25    return e820_entries;
  26}
  27
  28int e820_get_num_entries(void)
  29{
  30    return e820_entries;
  31}
  32
  33bool e820_get_entry(int idx, uint32_t type, uint64_t *address, uint64_t *length)
  34{
  35    if (idx < e820_entries && e820_table[idx].type == cpu_to_le32(type)) {
  36        *address = le64_to_cpu(e820_table[idx].address);
  37        *length = le64_to_cpu(e820_table[idx].length);
  38        return true;
  39    }
  40    return false;
  41}
  42