citra/src/core/hle/kernel/kernel.h

62 lines
1.5 KiB
C++
Raw Normal View History

2014-05-10 03:11:18 +01:00
// Copyright 2014 Citra Emulator Project / PPSSPP Project
2014-12-17 05:38:14 +00:00
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
2014-05-10 03:11:18 +01:00
#pragma once
#include <string>
#include <boost/smart_ptr/intrusive_ptr.hpp>
2015-05-06 08:06:12 +01:00
#include "common/common_types.h"
2014-05-10 03:11:18 +01:00
namespace Kernel {
class AddressArbiter;
2018-10-11 20:48:16 +01:00
class Event;
2018-10-11 21:00:09 +01:00
class Mutex;
2018-10-12 20:21:32 +01:00
class CodeSet;
2018-10-12 20:33:36 +01:00
class Process;
2018-10-11 20:48:16 +01:00
enum class ResetType {
OneShot,
Sticky,
Pulse,
};
template <typename T>
using SharedPtr = boost::intrusive_ptr<T>;
2018-10-11 19:49:52 +01:00
class KernelSystem {
public:
explicit KernelSystem(u32 system_mode);
~KernelSystem();
/**
* Creates an address arbiter.
*
* @param name Optional name used for debugging.
* @returns The created AddressArbiter.
*/
SharedPtr<AddressArbiter> CreateAddressArbiter(std::string name = "Unknown");
2018-10-11 20:48:16 +01:00
/**
* Creates an event
* @param reset_type ResetType describing how to create event
* @param name Optional name of event
*/
SharedPtr<Event> CreateEvent(ResetType reset_type, std::string name = "Unknown");
2018-10-11 21:00:09 +01:00
/**
* Creates a mutex.
* @param initial_locked Specifies if the mutex should be locked initially
* @param name Optional name of mutex
* @return Pointer to new Mutex object
*/
SharedPtr<Mutex> CreateMutex(bool initial_locked, std::string name = "Unknown");
2018-10-12 20:21:32 +01:00
SharedPtr<CodeSet> CreateCodeSet(std::string name, u64 program_id);
2018-10-12 20:33:36 +01:00
SharedPtr<Process> CreateProcess(SharedPtr<CodeSet> code_set);
2018-10-11 19:49:52 +01:00
};
} // namespace Kernel