mirror of
https://github.com/Lime3DS/Lime3DS
synced 2024-12-28 01:52:29 -06:00
Serialize service manager, server prt
This commit is contained in:
parent
4f95575d41
commit
7a5bde0b44
11 changed files with 77 additions and 16 deletions
9
TODO
9
TODO
|
@ -2,7 +2,8 @@
|
||||||
✔ CPU @done(19-08-13 15:41)
|
✔ CPU @done(19-08-13 15:41)
|
||||||
✔ Memory @done(19-08-13 15:41)
|
✔ Memory @done(19-08-13 15:41)
|
||||||
✔ DSP @done(19-08-13 15:41)
|
✔ DSP @done(19-08-13 15:41)
|
||||||
☐ Service manager
|
✔ Service manager @started(19-12-23 00:36) @done(19-12-23 11:38) @lasted(11h2m3s)
|
||||||
|
☐ Fix or ignore inverse map
|
||||||
☐ App loader
|
☐ App loader
|
||||||
☐ Archive manager
|
☐ Archive manager
|
||||||
☐ Custom texture cache
|
☐ Custom texture cache
|
||||||
|
@ -30,8 +31,8 @@
|
||||||
✔ Config mem @done(19-08-13 16:40)
|
✔ Config mem @done(19-08-13 16:40)
|
||||||
✔ Event @done(19-12-22 18:44)
|
✔ Event @done(19-12-22 18:44)
|
||||||
✔ Handle table @done(19-08-13 16:42)
|
✔ Handle table @done(19-08-13 16:42)
|
||||||
☐ HLE IPC
|
✔ HLE IPC @done(19-12-23 00:36)
|
||||||
☐ IPC
|
✔ IPC @done(19-12-23 00:36)
|
||||||
✔ Memory @started(19-08-13 16:43) @done(19-12-22 18:34)
|
✔ Memory @started(19-08-13 16:43) @done(19-12-22 18:34)
|
||||||
✔ Mutex @done(19-08-13 16:43)
|
✔ Mutex @done(19-08-13 16:43)
|
||||||
✔ Object @done(19-08-13 15:41)
|
✔ Object @done(19-08-13 15:41)
|
||||||
|
@ -42,6 +43,8 @@
|
||||||
✔ Semaphore @done(19-08-13 16:44)
|
✔ Semaphore @done(19-08-13 16:44)
|
||||||
✔ Server port @done(19-08-13 16:44)
|
✔ Server port @done(19-08-13 16:44)
|
||||||
✔ Server session @done(19-08-13 16:44)
|
✔ Server session @done(19-08-13 16:44)
|
||||||
|
☐ Mapped buffer context
|
||||||
|
This may not be needed!
|
||||||
✔ Session @done(19-08-13 16:44)
|
✔ Session @done(19-08-13 16:44)
|
||||||
☐ Shared memory @started(19-12-22 21:20)
|
☐ Shared memory @started(19-12-22 21:20)
|
||||||
Need to figure out backing memory (a u8*)
|
Need to figure out backing memory (a u8*)
|
||||||
|
|
|
@ -235,7 +235,7 @@ System::ResultStatus System::Init(Frontend::EmuWindow& emu_window, u32 system_mo
|
||||||
|
|
||||||
rpc_server = std::make_unique<RPC::RPCServer>();
|
rpc_server = std::make_unique<RPC::RPCServer>();
|
||||||
|
|
||||||
service_manager = std::make_shared<Service::SM::ServiceManager>(*this);
|
service_manager = std::make_unique<Service::SM::ServiceManager>(*this);
|
||||||
archive_manager = std::make_unique<Service::FS::ArchiveManager>(*this);
|
archive_manager = std::make_unique<Service::FS::ArchiveManager>(*this);
|
||||||
|
|
||||||
HW::Init(*memory);
|
HW::Init(*memory);
|
||||||
|
@ -399,7 +399,7 @@ template<class Archive>
|
||||||
void System::serialize(Archive & ar, const unsigned int file_version)
|
void System::serialize(Archive & ar, const unsigned int file_version)
|
||||||
{
|
{
|
||||||
ar & *cpu_core.get();
|
ar & *cpu_core.get();
|
||||||
//ar & *service_manager.get();
|
ar & *service_manager.get();
|
||||||
ar & GPU::g_regs;
|
ar & GPU::g_regs;
|
||||||
ar & LCD::g_regs;
|
ar & LCD::g_regs;
|
||||||
ar & dsp_core->GetDspMemory();
|
ar & dsp_core->GetDspMemory();
|
||||||
|
|
|
@ -305,7 +305,7 @@ private:
|
||||||
std::unique_ptr<Core::TelemetrySession> telemetry_session;
|
std::unique_ptr<Core::TelemetrySession> telemetry_session;
|
||||||
|
|
||||||
/// Service manager
|
/// Service manager
|
||||||
std::shared_ptr<Service::SM::ServiceManager> service_manager;
|
std::unique_ptr<Service::SM::ServiceManager> service_manager;
|
||||||
|
|
||||||
/// Frontend applets
|
/// Frontend applets
|
||||||
std::shared_ptr<Frontend::MiiSelector> registered_mii_selector;
|
std::shared_ptr<Frontend::MiiSelector> registered_mii_selector;
|
||||||
|
|
|
@ -11,12 +11,19 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <boost/container/small_vector.hpp>
|
#include <boost/container/small_vector.hpp>
|
||||||
|
#include <boost/serialization/unique_ptr.hpp>
|
||||||
|
#include <boost/serialization/shared_ptr.hpp>
|
||||||
|
#include <boost/serialization/vector.hpp>
|
||||||
|
#include <boost/serialization/assume_abstract.hpp>
|
||||||
#include "common/common_types.h"
|
#include "common/common_types.h"
|
||||||
#include "common/swap.h"
|
#include "common/swap.h"
|
||||||
#include "core/hle/ipc.h"
|
#include "core/hle/ipc.h"
|
||||||
#include "core/hle/kernel/object.h"
|
#include "core/hle/kernel/object.h"
|
||||||
#include "core/hle/kernel/server_session.h"
|
#include "core/hle/kernel/server_session.h"
|
||||||
|
|
||||||
|
BOOST_SERIALIZATION_ASSUME_ABSTRACT(Kernel::SessionRequestHandler)
|
||||||
|
BOOST_SERIALIZATION_ASSUME_ABSTRACT(Kernel::SessionRequestHandler::SessionDataBase)
|
||||||
|
|
||||||
namespace Service {
|
namespace Service {
|
||||||
class ServiceFrameworkBase;
|
class ServiceFrameworkBase;
|
||||||
}
|
}
|
||||||
|
@ -90,12 +97,31 @@ protected:
|
||||||
|
|
||||||
std::shared_ptr<ServerSession> session;
|
std::shared_ptr<ServerSession> session;
|
||||||
std::unique_ptr<SessionDataBase> data;
|
std::unique_ptr<SessionDataBase> data;
|
||||||
|
|
||||||
|
private:
|
||||||
|
template <class Archive>
|
||||||
|
void serialize(Archive& ar, const unsigned int file_version)
|
||||||
|
{
|
||||||
|
ar & session;
|
||||||
|
ar & data;
|
||||||
|
}
|
||||||
|
friend class boost::serialization::access;
|
||||||
};
|
};
|
||||||
/// List of sessions that are connected to this handler. A ServerSession whose server endpoint
|
/// List of sessions that are connected to this handler. A ServerSession whose server endpoint
|
||||||
/// is an HLE implementation is kept alive by this list for the duration of the connection.
|
/// is an HLE implementation is kept alive by this list for the duration of the connection.
|
||||||
std::vector<SessionInfo> connected_sessions;
|
std::vector<SessionInfo> connected_sessions;
|
||||||
|
|
||||||
|
private:
|
||||||
|
template <class Archive>
|
||||||
|
void serialize(Archive& ar, const unsigned int file_version)
|
||||||
|
{
|
||||||
|
ar & connected_sessions;
|
||||||
|
}
|
||||||
|
friend class boost::serialization::access;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// NOTE: The below classes are ephemeral and don't need serialization
|
||||||
|
|
||||||
class MappedBuffer {
|
class MappedBuffer {
|
||||||
public:
|
public:
|
||||||
MappedBuffer(Memory::MemorySystem& memory, const Process& process, u32 descriptor,
|
MappedBuffer(Memory::MemorySystem& memory, const Process& process, u32 descriptor,
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <boost/serialization/unique_ptr.hpp>
|
||||||
#include "common/common_types.h"
|
#include "common/common_types.h"
|
||||||
#include "core/hle/ipc.h"
|
#include "core/hle/ipc.h"
|
||||||
#include "core/hle/kernel/thread.h"
|
#include "core/hle/kernel/thread.h"
|
||||||
|
@ -26,6 +27,20 @@ struct MappedBufferContext {
|
||||||
|
|
||||||
std::unique_ptr<u8[]> buffer;
|
std::unique_ptr<u8[]> buffer;
|
||||||
std::unique_ptr<u8[]> reserve_buffer;
|
std::unique_ptr<u8[]> reserve_buffer;
|
||||||
|
|
||||||
|
private:
|
||||||
|
template <class Archive>
|
||||||
|
void serialize(Archive& ar, const unsigned int file_version)
|
||||||
|
{
|
||||||
|
ar & permissions;
|
||||||
|
ar & size;
|
||||||
|
ar & source_address;
|
||||||
|
ar & target_address;
|
||||||
|
// TODO: Check whether we need these. If we do, add a field for the size and/or change to a 'vector'
|
||||||
|
//ar & buffer;
|
||||||
|
//ar & reserve_buffer;
|
||||||
|
}
|
||||||
|
friend class boost::serialization::access;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Performs IPC command buffer translation from one process to another.
|
/// Performs IPC command buffer translation from one process to another.
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include "core/hle/kernel/server_port.h"
|
#include "core/hle/kernel/server_port.h"
|
||||||
#include "core/hle/kernel/server_session.h"
|
#include "core/hle/kernel/server_session.h"
|
||||||
#include "core/hle/kernel/thread.h"
|
#include "core/hle/kernel/thread.h"
|
||||||
|
#include "core/hle/kernel/hle_ipc.h"
|
||||||
|
|
||||||
SERIALIZE_EXPORT_IMPL(Kernel::ServerPort)
|
SERIALIZE_EXPORT_IMPL(Kernel::ServerPort)
|
||||||
|
|
||||||
|
@ -50,4 +51,14 @@ KernelSystem::PortPair KernelSystem::CreatePortPair(u32 max_sessions, std::strin
|
||||||
return std::make_pair(std::move(server_port), std::move(client_port));
|
return std::make_pair(std::move(server_port), std::move(client_port));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class Archive>
|
||||||
|
void ServerPort::serialize(Archive& ar, const unsigned int file_version)
|
||||||
|
{
|
||||||
|
ar & boost::serialization::base_object<WaitObject>(*this);
|
||||||
|
ar & name;
|
||||||
|
ar & pending_sessions;
|
||||||
|
ar & hle_handler;
|
||||||
|
}
|
||||||
|
SERIALIZE_IMPL(ServerPort)
|
||||||
|
|
||||||
} // namespace Kernel
|
} // namespace Kernel
|
||||||
|
|
|
@ -67,13 +67,7 @@ public:
|
||||||
private:
|
private:
|
||||||
friend class boost::serialization::access;
|
friend class boost::serialization::access;
|
||||||
template <class Archive>
|
template <class Archive>
|
||||||
void serialize(Archive& ar, const unsigned int file_version)
|
void serialize(Archive& ar, const unsigned int file_version);
|
||||||
{
|
|
||||||
ar & boost::serialization::base_object<Object>(*this);
|
|
||||||
ar & name;
|
|
||||||
ar & pending_sessions;
|
|
||||||
//ar & hle_handler;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Kernel
|
} // namespace Kernel
|
||||||
|
|
|
@ -115,10 +115,10 @@ private:
|
||||||
ar & boost::serialization::base_object<Object>(*this);
|
ar & boost::serialization::base_object<Object>(*this);
|
||||||
ar & name;
|
ar & name;
|
||||||
ar & parent;
|
ar & parent;
|
||||||
//ar & hle_handler;
|
ar & hle_handler;
|
||||||
ar & pending_requesting_threads;
|
ar & pending_requesting_threads;
|
||||||
ar & currently_handling;
|
ar & currently_handling;
|
||||||
//ar & mapped_buffer_context;
|
ar & mapped_buffer_context;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include "core/hle/kernel/client_session.h"
|
#include "core/hle/kernel/client_session.h"
|
||||||
#include "core/hle/kernel/server_session.h"
|
#include "core/hle/kernel/server_session.h"
|
||||||
#include "core/hle/kernel/client_port.h"
|
#include "core/hle/kernel/client_port.h"
|
||||||
|
#include "core/hle/kernel/hle_ipc.h"
|
||||||
|
|
||||||
SERIALIZE_IMPL(Kernel::Session)
|
SERIALIZE_IMPL(Kernel::Session)
|
||||||
|
|
||||||
|
|
|
@ -117,7 +117,7 @@ private:
|
||||||
ar & owner_process;
|
ar & owner_process;
|
||||||
ar & base_address;
|
ar & base_address;
|
||||||
ar & name;
|
ar & name;
|
||||||
ar & *(reinterpret_cast<MemoryRegionInfo::IntervalSet::ImplSetT*>(&holding_memory));;
|
ar & *(reinterpret_cast<MemoryRegionInfo::IntervalSet::ImplSetT*>(&holding_memory));
|
||||||
}
|
}
|
||||||
friend class boost::serialization::access;
|
friend class boost::serialization::access;
|
||||||
};
|
};
|
||||||
|
|
|
@ -8,6 +8,9 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
#include <boost/serialization/shared_ptr.hpp>
|
||||||
|
#include <boost/serialization/string.hpp>
|
||||||
|
#include <boost/serialization/unordered_map.hpp>
|
||||||
#include "core/hle/kernel/client_port.h"
|
#include "core/hle/kernel/client_port.h"
|
||||||
#include "core/hle/kernel/object.h"
|
#include "core/hle/kernel/object.h"
|
||||||
#include "core/hle/kernel/server_port.h"
|
#include "core/hle/kernel/server_port.h"
|
||||||
|
@ -80,6 +83,14 @@ private:
|
||||||
// For IPC Recorder
|
// For IPC Recorder
|
||||||
/// client port Object id -> service name
|
/// client port Object id -> service name
|
||||||
std::unordered_map<u32, std::string> registered_services_inverse;
|
std::unordered_map<u32, std::string> registered_services_inverse;
|
||||||
|
|
||||||
|
template <class Archive>
|
||||||
|
void serialize(Archive& ar, const unsigned int file_version)
|
||||||
|
{
|
||||||
|
ar & registered_services;
|
||||||
|
ar & registered_services_inverse; // TODO: Instead, compute this from registered_services
|
||||||
|
}
|
||||||
|
friend class boost::serialization::access;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Service::SM
|
} // namespace Service::SM
|
||||||
|
|
Loading…
Reference in a new issue