2020-04-05 20:39:08 +02:00
|
|
|
|
// Copyright 2020 yuzu Emulator Project
|
|
|
|
|
// Licensed under GPLv2 or any later version
|
|
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
2020-04-15 03:50:19 +02:00
|
|
|
|
// This file references various implementation details from Atmosph<70>re, an open-source firmware for
|
|
|
|
|
// the Nintendo Switch. Copyright 2018-2020 Atmosph<70>re-NX.
|
|
|
|
|
|
2020-04-05 20:39:08 +02:00
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "common/common_funcs.h"
|
|
|
|
|
#include "common/common_types.h"
|
|
|
|
|
|
|
|
|
|
namespace Kernel::Memory {
|
|
|
|
|
|
|
|
|
|
class AddressSpaceInfo final : NonCopyable {
|
|
|
|
|
public:
|
|
|
|
|
enum class Type : u32 {
|
|
|
|
|
Is32Bit = 0,
|
|
|
|
|
Small64Bit = 1,
|
|
|
|
|
Large64Bit = 2,
|
|
|
|
|
Heap = 3,
|
|
|
|
|
Stack = 4,
|
|
|
|
|
Alias = 5,
|
|
|
|
|
Count,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
std::size_t bit_width{};
|
|
|
|
|
std::size_t addr{};
|
|
|
|
|
std::size_t size{};
|
|
|
|
|
Type type{};
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
static u64 GetAddressSpaceStart(std::size_t width, Type type);
|
|
|
|
|
static std::size_t GetAddressSpaceSize(std::size_t width, Type type);
|
|
|
|
|
|
|
|
|
|
constexpr AddressSpaceInfo(std::size_t bit_width, std::size_t addr, std::size_t size, Type type)
|
|
|
|
|
: bit_width{bit_width}, addr{addr}, size{size}, type{type} {}
|
|
|
|
|
|
|
|
|
|
constexpr std::size_t GetWidth() const {
|
|
|
|
|
return bit_width;
|
|
|
|
|
}
|
|
|
|
|
constexpr std::size_t GetAddress() const {
|
|
|
|
|
return addr;
|
|
|
|
|
}
|
|
|
|
|
constexpr std::size_t GetSize() const {
|
|
|
|
|
return size;
|
|
|
|
|
}
|
|
|
|
|
constexpr Type GetType() const {
|
|
|
|
|
return type;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
} // namespace Kernel::Memory
|