39 changed files with 34 additions and 423 deletions
-
2src/core/CMakeLists.txt
-
1src/core/core.h
-
17src/core/hle/ipc_helpers.h
-
1src/core/hle/kernel/handle_table.h
-
1src/core/hle/kernel/hle_ipc.cpp
-
10src/core/hle/kernel/hle_ipc.h
-
14src/core/hle/kernel/k_auto_object.h
-
15src/core/hle/kernel/k_client_port.h
-
19src/core/hle/kernel/k_client_session.h
-
11src/core/hle/kernel/k_event.h
-
18src/core/hle/kernel/k_port.h
-
12src/core/hle/kernel/k_readable_event.h
-
15src/core/hle/kernel/k_resource_limit.h
-
1src/core/hle/kernel/k_server_port.cpp
-
15src/core/hle/kernel/k_server_port.h
-
18src/core/hle/kernel/k_server_session.h
-
4src/core/hle/kernel/k_session.cpp
-
14src/core/hle/kernel/k_session.h
-
13src/core/hle/kernel/k_shared_memory.h
-
9src/core/hle/kernel/k_synchronization_object.h
-
1src/core/hle/kernel/k_thread.cpp
-
15src/core/hle/kernel/k_thread.h
-
15src/core/hle/kernel/k_transfer_memory.h
-
12src/core/hle/kernel/k_writable_event.h
-
2src/core/hle/kernel/kernel.h
-
42src/core/hle/kernel/object.cpp
-
98src/core/hle/kernel/object.h
-
15src/core/hle/kernel/process.h
-
2src/core/hle/kernel/time_manager.h
-
1src/core/hle/service/am/applets/applets.h
-
1src/core/hle/service/hid/controllers/npad.h
-
1src/core/hle/service/hid/irs.h
-
1src/core/hle/service/nvflinger/buffer_queue.h
-
1src/core/hle/service/nvflinger/nvflinger.h
-
1src/core/hle/service/service.h
-
2src/core/hle/service/sm/controller.cpp
-
2src/core/hle/service/sm/sm.cpp
-
28src/yuzu/debugger/wait_tree.cpp
-
7src/yuzu/debugger/wait_tree.h
@ -1,42 +0,0 @@ |
|||||
// Copyright 2018 Citra Emulator Project
|
|
||||
// Licensed under GPLv2 or any later version
|
|
||||
// Refer to the license.txt file included.
|
|
||||
|
|
||||
#include "common/assert.h"
|
|
||||
#include "core/hle/kernel/kernel.h"
|
|
||||
#include "core/hle/kernel/object.h"
|
|
||||
|
|
||||
namespace Kernel { |
|
||||
|
|
||||
Object::Object(KernelCore& kernel_) |
|
||||
: kernel{kernel_}, object_id{kernel_.CreateNewObjectID()}, name{"[UNKNOWN KERNEL OBJECT]"} {} |
|
||||
Object::Object(KernelCore& kernel_, std::string&& name_) |
|
||||
: kernel{kernel_}, object_id{kernel_.CreateNewObjectID()}, name{std::move(name_)} {} |
|
||||
Object::~Object() = default; |
|
||||
|
|
||||
bool Object::IsWaitable() const { |
|
||||
switch (GetHandleType()) { |
|
||||
case HandleType::ReadableEvent: |
|
||||
case HandleType::Thread: |
|
||||
case HandleType::Process: |
|
||||
case HandleType::ServerPort: |
|
||||
case HandleType::ServerSession: |
|
||||
return true; |
|
||||
|
|
||||
case HandleType::Unknown: |
|
||||
case HandleType::Event: |
|
||||
case HandleType::WritableEvent: |
|
||||
case HandleType::SharedMemory: |
|
||||
case HandleType::TransferMemory: |
|
||||
case HandleType::ResourceLimit: |
|
||||
case HandleType::ClientPort: |
|
||||
case HandleType::ClientSession: |
|
||||
case HandleType::Session: |
|
||||
return false; |
|
||||
} |
|
||||
|
|
||||
UNREACHABLE(); |
|
||||
return false; |
|
||||
} |
|
||||
|
|
||||
} // namespace Kernel
|
|
||||
@ -1,98 +0,0 @@ |
|||||
// Copyright 2018 Citra Emulator Project |
|
||||
// Licensed under GPLv2 or any later version |
|
||||
// Refer to the license.txt file included. |
|
||||
|
|
||||
#pragma once |
|
||||
|
|
||||
#include <atomic> |
|
||||
#include <memory> |
|
||||
#include <string> |
|
||||
|
|
||||
#include "common/common_types.h" |
|
||||
|
|
||||
namespace Kernel { |
|
||||
|
|
||||
class KernelCore; |
|
||||
|
|
||||
using Handle = u32; |
|
||||
|
|
||||
enum class HandleType : u32 { |
|
||||
Unknown, |
|
||||
Event, |
|
||||
WritableEvent, |
|
||||
ReadableEvent, |
|
||||
SharedMemory, |
|
||||
TransferMemory, |
|
||||
Thread, |
|
||||
Process, |
|
||||
ResourceLimit, |
|
||||
ClientPort, |
|
||||
ServerPort, |
|
||||
ClientSession, |
|
||||
ServerSession, |
|
||||
Session, |
|
||||
}; |
|
||||
|
|
||||
class Object : NonCopyable, public std::enable_shared_from_this<Object> { |
|
||||
public: |
|
||||
explicit Object(KernelCore& kernel_); |
|
||||
explicit Object(KernelCore& kernel_, std::string&& name_); |
|
||||
virtual ~Object(); |
|
||||
|
|
||||
/// Returns a unique identifier for the object. For debugging purposes only. |
|
||||
u32 GetObjectId() const { |
|
||||
return object_id.load(std::memory_order_relaxed); |
|
||||
} |
|
||||
|
|
||||
virtual std::string GetTypeName() const { |
|
||||
return "[BAD KERNEL OBJECT TYPE]"; |
|
||||
} |
|
||||
virtual std::string GetName() const { |
|
||||
return name; |
|
||||
} |
|
||||
virtual HandleType GetHandleType() const = 0; |
|
||||
|
|
||||
void Close() { |
|
||||
// TODO(bunnei): This is a placeholder to decrement the reference count, which we will use |
|
||||
// when we implement KAutoObject instead of using shared_ptr. |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* Check if a thread can wait on the object |
|
||||
* @return True if a thread can wait on the object, otherwise false |
|
||||
*/ |
|
||||
bool IsWaitable() const; |
|
||||
|
|
||||
virtual void Finalize() = 0; |
|
||||
|
|
||||
protected: |
|
||||
/// The kernel instance this object was created under. |
|
||||
KernelCore& kernel; |
|
||||
|
|
||||
private: |
|
||||
std::atomic<u32> object_id{0}; |
|
||||
|
|
||||
protected: |
|
||||
std::string name; |
|
||||
}; |
|
||||
|
|
||||
template <typename T> |
|
||||
std::shared_ptr<T> SharedFrom(T* raw) { |
|
||||
if (raw == nullptr) |
|
||||
return nullptr; |
|
||||
return std::static_pointer_cast<T>(raw->shared_from_this()); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* Attempts to downcast the given Object pointer to a pointer to T. |
|
||||
* @return Derived pointer to the object, or `nullptr` if `object` isn't of type T. |
|
||||
*/ |
|
||||
template <typename T> |
|
||||
inline T* DynamicObjectCast(Object* object) { |
|
||||
if (object != nullptr && object->GetHandleType() == T::HANDLE_TYPE) { |
|
||||
return reinterpret_cast<T*>(object); |
|
||||
} |
|
||||
return nullptr; |
|
||||
} |
|
||||
|
|
||||
} // namespace Kernel |
|
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue