2014-05-09 19:11:18 -07:00
|
|
|
// Copyright 2014 Citra Emulator Project / PPSSPP Project
|
2014-12-16 21:38:14 -08:00
|
|
|
// Licensed under GPLv2 or any later version
|
2014-11-19 00:49:13 -08:00
|
|
|
// Refer to the license.txt file included.
|
2014-05-09 19:11:18 -07:00
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
2018-10-11 12:19:45 -07:00
|
|
|
#include <string>
|
|
|
|
#include <boost/smart_ptr/intrusive_ptr.hpp>
|
2015-05-06 00:06:12 -07:00
|
|
|
#include "common/common_types.h"
|
2014-05-09 19:11:18 -07:00
|
|
|
|
2014-05-20 15:13:25 -07:00
|
|
|
namespace Kernel {
|
|
|
|
|
2018-10-11 12:19:45 -07:00
|
|
|
class AddressArbiter;
|
2018-10-11 12:48:16 -07:00
|
|
|
class Event;
|
2018-10-11 13:00:09 -07:00
|
|
|
class Mutex;
|
2018-10-11 12:48:16 -07:00
|
|
|
|
|
|
|
enum class ResetType {
|
|
|
|
OneShot,
|
|
|
|
Sticky,
|
|
|
|
Pulse,
|
|
|
|
};
|
2018-10-11 12:19:45 -07:00
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
using SharedPtr = boost::intrusive_ptr<T>;
|
|
|
|
|
2018-10-11 11:49:52 -07:00
|
|
|
class KernelSystem {
|
|
|
|
public:
|
|
|
|
explicit KernelSystem(u32 system_mode);
|
|
|
|
~KernelSystem();
|
2018-10-11 12:19:45 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* 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 12:48:16 -07: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 13:00:09 -07: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-11 11:49:52 -07:00
|
|
|
};
|
2014-06-10 19:43:50 -07:00
|
|
|
|
2017-07-20 21:52:50 -07:00
|
|
|
} // namespace Kernel
|