mirror of
https://github.com/mikage-emu/mikage-dev.git
synced 2025-01-23 05:51:07 +01:00
OS/HPV: Add CFG
This commit is contained in:
parent
6dc6de3422
commit
3a9af165ee
4 changed files with 72 additions and 0 deletions
|
@ -31,6 +31,7 @@ target_sources(mikage PRIVATE
|
||||||
processes/cam.cpp
|
processes/cam.cpp
|
||||||
processes/cdc.cpp
|
processes/cdc.cpp
|
||||||
processes/cecd.cpp
|
processes/cecd.cpp
|
||||||
|
processes/cfg_hpv.cpp
|
||||||
processes/csnd.cpp
|
processes/csnd.cpp
|
||||||
processes/dlp.cpp
|
processes/dlp.cpp
|
||||||
processes/dsp.cpp
|
processes/dsp.cpp
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include "os_hypervisor_private.hpp"
|
#include "os_hypervisor_private.hpp"
|
||||||
|
|
||||||
#include "processes/am_hpv.hpp"
|
#include "processes/am_hpv.hpp"
|
||||||
|
#include "processes/cfg_hpv.hpp"
|
||||||
#include "processes/dsp_hpv.hpp"
|
#include "processes/dsp_hpv.hpp"
|
||||||
#include "processes/fs_hpv.hpp"
|
#include "processes/fs_hpv.hpp"
|
||||||
#include "processes/ns_hpv.hpp"
|
#include "processes/ns_hpv.hpp"
|
||||||
|
@ -45,6 +46,7 @@ struct State {
|
||||||
|
|
||||||
HPV::NullContext null_context;
|
HPV::NullContext null_context;
|
||||||
HPV::AMContext am_context;
|
HPV::AMContext am_context;
|
||||||
|
HPV::CFGContext cfg_context;
|
||||||
HPV::DSPContext dsp_context;
|
HPV::DSPContext dsp_context;
|
||||||
HPV::FSContext fs_context;
|
HPV::FSContext fs_context;
|
||||||
HPV::SMContext sm_context;
|
HPV::SMContext sm_context;
|
||||||
|
@ -113,6 +115,10 @@ std::unordered_map<std::string_view, SessionFactoryType> service_factory_map = {
|
||||||
{ "am:sys"sv, WrapSessionFactory<HPV::CreateAmService, &HPV::State::am_context> },
|
{ "am:sys"sv, WrapSessionFactory<HPV::CreateAmService, &HPV::State::am_context> },
|
||||||
{ "am:u"sv, WrapSessionFactory<HPV::CreateAmService, &HPV::State::am_context> },
|
{ "am:u"sv, WrapSessionFactory<HPV::CreateAmService, &HPV::State::am_context> },
|
||||||
|
|
||||||
|
{ "cfg:i"sv, WrapSessionFactory<HPV::CreateCfgService, &HPV::State::cfg_context> },
|
||||||
|
{ "cfg:s"sv, WrapSessionFactory<HPV::CreateCfgService, &HPV::State::cfg_context> },
|
||||||
|
{ "cfg:u"sv, WrapSessionFactory<HPV::CreateCfgService, &HPV::State::cfg_context> },
|
||||||
|
|
||||||
{ "dsp::DSP"sv, WrapSessionFactory<HPV::CreateDspService, &HPV::State::dsp_context> },
|
{ "dsp::DSP"sv, WrapSessionFactory<HPV::CreateDspService, &HPV::State::dsp_context> },
|
||||||
|
|
||||||
{ "fs:USER"sv, WrapSessionFactory<HPV::CreateFSUserService, &HPV::State::fs_context> },
|
{ "fs:USER"sv, WrapSessionFactory<HPV::CreateFSUserService, &HPV::State::fs_context> },
|
||||||
|
|
45
source/processes/cfg_hpv.cpp
Normal file
45
source/processes/cfg_hpv.cpp
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
#include "cfg_hpv.hpp"
|
||||||
|
#include "os_hypervisor_private.hpp"
|
||||||
|
#include "os.hpp"
|
||||||
|
|
||||||
|
#include <platform/config.hpp>
|
||||||
|
|
||||||
|
#include <framework/exceptions.hpp>
|
||||||
|
|
||||||
|
namespace HLE {
|
||||||
|
|
||||||
|
namespace OS {
|
||||||
|
|
||||||
|
namespace HPV {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
struct CfgService : SessionToPort {
|
||||||
|
CfgService(RefCounted<Port> port_, CFGContext& context_) : SessionToPort(port_, context_) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnRequest(Hypervisor& hypervisor, Thread& thread, Handle session) override {
|
||||||
|
const uint32_t command_header = thread.ReadTLS(0x80);
|
||||||
|
auto dispatcher = RequestDispatcher<> { thread, *this, command_header };
|
||||||
|
|
||||||
|
namespace Cmd = Platform::Config;
|
||||||
|
|
||||||
|
dispatcher.DecodeRequest<Cmd::GetConfigInfoBlk2>([&](auto& response, uint32_t size, uint32_t block_id, IPC::MappedBuffer output) {
|
||||||
|
auto description = fmt::format( "GetConfigInfoBlk2, size={:#x}, block_id={:#x}",
|
||||||
|
size, block_id);
|
||||||
|
Session::OnRequest(hypervisor, thread, session, description);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
HPV::RefCounted<Object> CreateCfgService(RefCounted<Port> port, CFGContext& context) {
|
||||||
|
return HPV::RefCounted<Object>(new CfgService(port, context));
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace HPV
|
||||||
|
|
||||||
|
} // namespace OS
|
||||||
|
|
||||||
|
} // namespace HLE
|
20
source/processes/cfg_hpv.hpp
Normal file
20
source/processes/cfg_hpv.hpp
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "os_hypervisor_private.hpp"
|
||||||
|
|
||||||
|
namespace HLE {
|
||||||
|
|
||||||
|
namespace OS {
|
||||||
|
|
||||||
|
namespace HPV {
|
||||||
|
|
||||||
|
struct CFGContext : SessionContext {
|
||||||
|
};
|
||||||
|
|
||||||
|
HPV::RefCounted<Object> CreateCfgService(RefCounted<Port> port, CFGContext&);
|
||||||
|
|
||||||
|
} // namespace HPV
|
||||||
|
|
||||||
|
} // namespace HOS
|
||||||
|
|
||||||
|
} // namespace HLE
|
Loading…
Reference in a new issue