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