/* Memory managment.
 *
 * Author: Daniel Krebs <github@daniel-krebs.net>
 * SPDX-FileCopyrightText: 2017 Institute for Automation of Complex Power Systems, RWTH Aachen University
 * SPDX-License-Identifier: Apache-2.0
 */

#include <sys/mman.h>
#include <unistd.h>

#include <villas/memory.hpp>

using namespace villas;

bool HostRam::free(void *addr, size_t length) {
  return munmap(addr, length) == 0;
}

void *HostRam::allocate(size_t length, int flags) {
  const int mmap_flags = flags | MAP_PRIVATE | MAP_ANONYMOUS | MAP_32BIT;
  const int mmap_protection = PROT_READ | PROT_WRITE;

  return mmap(nullptr, length, mmap_protection, mmap_flags, 0, 0);
}