Просмотр исходного кода

hle: Remove Domain and SyncObject kernel objects.

bunnei 8 лет назад
Родитель
Сommit
67758857e4

+ 0 - 3
src/core/CMakeLists.txt

@@ -36,8 +36,6 @@ add_library(core STATIC
     hle/kernel/client_session.h
     hle/kernel/condition_variable.cpp
     hle/kernel/condition_variable.h
-    hle/kernel/domain.cpp
-    hle/kernel/domain.h
     hle/kernel/errors.h
     hle/kernel/event.cpp
     hle/kernel/event.h
@@ -67,7 +65,6 @@ add_library(core STATIC
     hle/kernel/svc.cpp
     hle/kernel/svc.h
     hle/kernel/svc_wrap.h
-    hle/kernel/sync_object.h
     hle/kernel/thread.cpp
     hle/kernel/thread.h
     hle/kernel/timer.cpp

+ 0 - 1
src/core/hle/ipc_helpers.h

@@ -11,7 +11,6 @@
 #include "core/hle/ipc.h"
 #include "core/hle/kernel/client_port.h"
 #include "core/hle/kernel/client_session.h"
-#include "core/hle/kernel/domain.h"
 #include "core/hle/kernel/handle_table.h"
 #include "core/hle/kernel/hle_ipc.h"
 #include "core/hle/kernel/kernel.h"

+ 1 - 2
src/core/hle/kernel/client_session.h

@@ -7,7 +7,6 @@
 #include <memory>
 #include <string>
 #include "common/common_types.h"
-#include "core/hle/kernel/sync_object.h"
 #include "core/hle/result.h"
 
 namespace Kernel {
@@ -16,7 +15,7 @@ class ServerSession;
 class Session;
 class Thread;
 
-class ClientSession final : public SyncObject {
+class ClientSession final : public Object {
 public:
     friend class ServerSession;
 

+ 0 - 63
src/core/hle/kernel/domain.cpp

@@ -1,63 +0,0 @@
-// Copyright 2018 yuzu emulator team
-// Licensed under GPLv2 or any later version
-// Refer to the license.txt file included.
-
-#include "common/logging/log.h"
-#include "core/hle/ipc_helpers.h"
-#include "core/hle/kernel/client_port.h"
-#include "core/hle/kernel/domain.h"
-#include "core/hle/kernel/handle_table.h"
-#include "core/hle/kernel/hle_ipc.h"
-#include "core/hle/kernel/process.h"
-#include "core/hle/kernel/session.h"
-#include "core/hle/kernel/thread.h"
-
-namespace Kernel {
-
-ResultVal<SharedPtr<Domain>> Domain::Create(std::string name) {
-    SharedPtr<Domain> domain(new Domain);
-    domain->name = std::move(name);
-    return MakeResult(std::move(domain));
-}
-
-ResultVal<SharedPtr<Domain>> Domain::CreateFromSession(const Session& session) {
-    auto res = Create(session.port->GetName() + "_Domain");
-    auto& domain = res.Unwrap();
-    domain->request_handlers.push_back(std::move(session.server->hle_handler));
-    Kernel::g_handle_table.ConvertSessionToDomain(session, domain);
-    return res;
-}
-
-ResultCode Domain::SendSyncRequest(SharedPtr<Thread> thread) {
-    Kernel::HLERequestContext context(this);
-    u32* cmd_buf = (u32*)Memory::GetPointer(Kernel::GetCurrentThread()->GetTLSAddress());
-    context.PopulateFromIncomingCommandBuffer(cmd_buf, *Kernel::g_current_process,
-                                              Kernel::g_handle_table);
-
-    auto& domain_message_header = context.GetDomainMessageHeader();
-    if (domain_message_header) {
-        // If there is a DomainMessageHeader, then this is CommandType "Request"
-        const u32 object_id{context.GetDomainMessageHeader()->object_id};
-        switch (domain_message_header->command) {
-        case IPC::DomainMessageHeader::CommandType::SendMessage:
-            return request_handlers[object_id - 1]->HandleSyncRequest(context);
-
-        case IPC::DomainMessageHeader::CommandType::CloseVirtualHandle: {
-            LOG_DEBUG(IPC, "CloseVirtualHandle, object_id=0x%08X", object_id);
-
-            request_handlers[object_id - 1] = nullptr;
-
-            IPC::RequestBuilder rb{context, 2};
-            rb.Push(RESULT_SUCCESS);
-
-            return RESULT_SUCCESS;
-        }
-        }
-
-        LOG_CRITICAL(IPC, "Unknown domain command=%d", domain_message_header->command.Value());
-        UNIMPLEMENTED();
-    }
-    return request_handlers.front()->HandleSyncRequest(context);
-}
-
-} // namespace Kernel

+ 0 - 45
src/core/hle/kernel/domain.h

@@ -1,45 +0,0 @@
-// Copyright 2018 yuzu emulator team
-// Licensed under GPLv2 or any later version
-// Refer to the license.txt file included.
-
-#pragma once
-
-#include <memory>
-#include <string>
-#include <vector>
-#include "core/hle/kernel/sync_object.h"
-#include "core/hle/result.h"
-
-namespace Kernel {
-
-class Session;
-class SessionRequestHandler;
-
-class Domain final : public SyncObject {
-public:
-    std::string GetTypeName() const override {
-        return "Domain";
-    }
-
-    static const HandleType HANDLE_TYPE = HandleType::Domain;
-    HandleType GetHandleType() const override {
-        return HANDLE_TYPE;
-    }
-
-    static ResultVal<SharedPtr<Domain>> CreateFromSession(const Session& server);
-
-    ResultCode SendSyncRequest(SharedPtr<Thread> thread) override;
-
-    /// The name of this domain (optional)
-    std::string name;
-
-    std::vector<std::shared_ptr<SessionRequestHandler>> request_handlers;
-
-private:
-    Domain() = default;
-    ~Domain() override = default;
-
-    static ResultVal<SharedPtr<Domain>> Create(std::string name = "Unknown");
-};
-
-} // namespace Kernel

+ 0 - 1
src/core/hle/kernel/hle_ipc.cpp

@@ -7,7 +7,6 @@
 #include "common/common_funcs.h"
 #include "common/common_types.h"
 #include "core/hle/ipc_helpers.h"
-#include "core/hle/kernel/domain.h"
 #include "core/hle/kernel/handle_table.h"
 #include "core/hle/kernel/hle_ipc.h"
 #include "core/hle/kernel/kernel.h"

+ 0 - 16
src/core/hle/kernel/kernel.h

@@ -31,7 +31,6 @@ enum class HandleType : u32 {
     ServerPort,
     ClientSession,
     ServerSession,
-    Domain,
 };
 
 enum {
@@ -84,27 +83,12 @@ public:
         case HandleType::CodeSet:
         case HandleType::ClientPort:
         case HandleType::ClientSession:
-        case HandleType::Domain:
             return false;
         }
 
         UNREACHABLE();
     }
 
-    /**
-     * Check if svcSendSyncRequest can be called on the object
-     * @return True svcSendSyncRequest can be called on the object, otherwise false
-     */
-    bool IsSyncable() const {
-        switch (GetHandleType()) {
-        case HandleType::ClientSession:
-        case HandleType::Domain:
-            return true;
-        }
-
-        UNREACHABLE();
-    }
-
 public:
     static unsigned int next_object_id;
 

+ 1 - 2
src/core/hle/kernel/svc.cpp

@@ -20,7 +20,6 @@
 #include "core/hle/kernel/shared_memory.h"
 #include "core/hle/kernel/svc.h"
 #include "core/hle/kernel/svc_wrap.h"
-#include "core/hle/kernel/sync_object.h"
 #include "core/hle/kernel/thread.h"
 #include "core/hle/lock.h"
 #include "core/hle/result.h"
@@ -87,7 +86,7 @@ static ResultCode ConnectToNamedPort(Handle* out_handle, VAddr port_name_address
 
 /// Makes a blocking IPC call to an OS service.
 static ResultCode SendSyncRequest(Handle handle) {
-    SharedPtr<SyncObject> session = g_handle_table.Get<SyncObject>(handle);
+    SharedPtr<ClientSession> session = g_handle_table.Get<ClientSession>(handle);
     if (!session) {
         LOG_ERROR(Kernel_SVC, "called with invalid handle=0x%08X", handle);
         return ERR_INVALID_HANDLE;

+ 0 - 35
src/core/hle/kernel/sync_object.h

@@ -1,35 +0,0 @@
-// Copyright 2018 yuzu emulator team
-// Licensed under GPLv2 or any later version
-// Refer to the license.txt file included.
-
-#pragma once
-
-#include <boost/smart_ptr/intrusive_ptr.hpp>
-#include "core/hle/kernel/kernel.h"
-#include "core/hle/result.h"
-
-namespace Kernel {
-
-class Thread;
-
-/// Class that represents a Kernel object that svcSendSyncRequest can be called on
-class SyncObject : public Object {
-public:
-    /**
-     * Handle a sync request from the emulated application.
-     * @param thread Thread that initiated the request.
-     * @returns ResultCode from the operation.
-     */
-    virtual ResultCode SendSyncRequest(SharedPtr<Thread> thread) = 0;
-};
-
-// Specialization of DynamicObjectCast for SyncObjects
-template <>
-inline SharedPtr<SyncObject> DynamicObjectCast<SyncObject>(SharedPtr<Object> object) {
-    if (object != nullptr && object->IsSyncable()) {
-        return boost::static_pointer_cast<SyncObject>(std::move(object));
-    }
-    return nullptr;
-}
-
-} // namespace Kernel

+ 0 - 1
src/core/hle/service/sm/controller.cpp

@@ -4,7 +4,6 @@
 
 #include "common/logging/log.h"
 #include "core/hle/ipc_helpers.h"
-#include "core/hle/kernel/domain.h"
 #include "core/hle/service/sm/controller.h"
 
 namespace Service {