// Copyright 2016 The Fuchsia Authors
// Copyright (c) 2014 Travis Geiselbrecht
//
// 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

#pragma once

// initial mapping table, used in ARM builds to set up the default memory map.
// TODO: replace this with MDI driven configuration.

// some assembly #defines, need to match the structure below
#define __MMU_INITIAL_MAPPING_PHYS_OFFSET 0
#define __MMU_INITIAL_MAPPING_VIRT_OFFSET 8
#define __MMU_INITIAL_MAPPING_SIZE_OFFSET 16
#define __MMU_INITIAL_MAPPING_FLAGS_OFFSET 24
#define __MMU_INITIAL_MAPPING_SIZE 40

// flags for initial mapping struct
#define MMU_INITIAL_MAPPING_TEMPORARY (0x1)
#define MMU_INITIAL_MAPPING_FLAG_UNCACHED (0x2)
#define MMU_INITIAL_MAPPING_FLAG_DEVICE (0x4)
#define MMU_INITIAL_MAPPING_FLAG_DYNAMIC (0x8) // entry has to be patched up by platform_reset

// this file can be included from assembly to get to the defines above
#ifndef ASSEMBLY

#include <zircon/compiler.h>
#include <sys/types.h>

struct mmu_initial_mapping {
    paddr_t phys;
    vaddr_t virt;
    size_t size;
    unsigned int flags;
    const char* name;
};

// Assert that the assembly macros above match this struct.
static_assert(__offsetof(struct mmu_initial_mapping, phys) == __MMU_INITIAL_MAPPING_PHYS_OFFSET, "");
static_assert(__offsetof(struct mmu_initial_mapping, virt) == __MMU_INITIAL_MAPPING_VIRT_OFFSET, "");
static_assert(__offsetof(struct mmu_initial_mapping, size) == __MMU_INITIAL_MAPPING_SIZE_OFFSET, "");
static_assert(__offsetof(struct mmu_initial_mapping, flags) == __MMU_INITIAL_MAPPING_FLAGS_OFFSET, "");
static_assert(sizeof(struct mmu_initial_mapping) == __MMU_INITIAL_MAPPING_SIZE, "");

// Platform or target must fill out one of these to set up the initial memory map
// for kernel and enough IO space to boot.
// Declared extern C because it may be accessed from assembly.
extern "C" struct mmu_initial_mapping mmu_initial_mappings[];

#endif // !ASSEMBLY
