diff options
author | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2015-05-04 00:01:16 -0300 |
---|---|---|
committer | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2015-05-08 22:11:02 -0300 |
commit | 6d60acf0f1afcae873988da5218f2f1c7bc9d151 (patch) | |
tree | cec75198ab74759002dd1da78f6ac2af5e61949f /src/core/hle/kernel/process.h | |
parent | 8809d02db350960fc7824f5ae5bc161960910fd9 (diff) |
Kernel: Introduce skeleton Process class to hold process data
Diffstat (limited to 'src/core/hle/kernel/process.h')
-rw-r--r-- | src/core/hle/kernel/process.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/core/hle/kernel/process.h b/src/core/hle/kernel/process.h new file mode 100644 index 00000000..8abd881e --- /dev/null +++ b/src/core/hle/kernel/process.h @@ -0,0 +1,61 @@ +// Copyright 2015 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include <bitset> + +#include <boost/container/static_vector.hpp> + +#include "core/hle/kernel/kernel.h" +#include "core/hle/result.h" + +namespace Kernel { + +struct StaticAddressMapping { + // Address and size must be 4K-aligned + VAddr address; + u32 size; + bool writable; +}; + +enum class MemoryRegion { + APPLICATION = 1, + SYSTEM = 2, + BASE = 3, +}; + +class Process final : public Object { +public: + static SharedPtr<Process> Create(std::string name, u64 program_id); + + std::string GetTypeName() const override { return "Process"; } + std::string GetName() const override { return name; } + + static const HandleType HANDLE_TYPE = HandleType::Process; + HandleType GetHandleType() const override { return HANDLE_TYPE; } + + std::string name; ///< Name of the process + u64 program_id; + + std::bitset<0x80> svc_access_mask; + unsigned int handle_table_size = 0x200; + boost::container::static_vector<StaticAddressMapping, 8> static_address_mappings; // TODO: Determine a good upper limit + + bool loaded_high = false; // Application loaded high (not at 0x00100000) + bool shared_page_writable = false; + bool privileged_priority = false; // Can use priority levels higher than 24 + MemoryRegion memory_region = MemoryRegion::APPLICATION; + + void ParseKernelCaps(const u32* kernel_caps, size_t len); + void Run(VAddr entry_point, s32 main_thread_priority, u32 stack_size); + +private: + Process(); + ~Process() override; +}; + +extern SharedPtr<Process> g_current_process; + +} |