summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar bunnei2018-03-30 14:18:57 -0400
committerGravatar GitHub2018-03-30 14:18:57 -0400
commit9cba0f1794976248edfbf5a701a802c9ae406bb8 (patch)
treedd28ca6f569fd7ac18f67430fcefb4e0193f4184 /src
parentMerge pull request #290 from MerryMage/dfix-20180329 (diff)
parentaudren_u: Stub QueryAudioDeviceSystemEvent and GetActiveChannelCount. (diff)
downloadyuzu-9cba0f1794976248edfbf5a701a802c9ae406bb8.tar.gz
yuzu-9cba0f1794976248edfbf5a701a802c9ae406bb8.tar.xz
yuzu-9cba0f1794976248edfbf5a701a802c9ae406bb8.zip
Merge pull request #292 from bunnei/botw-progress
NFP, SVC, and AudRen progress
Diffstat (limited to 'src')
-rw-r--r--src/common/logging/backend.cpp1
-rw-r--r--src/common/logging/log.h1
-rw-r--r--src/core/CMakeLists.txt4
-rw-r--r--src/core/hle/kernel/svc.cpp14
-rw-r--r--src/core/hle/kernel/svc_wrap.h15
-rw-r--r--src/core/hle/service/audio/audren_u.cpp44
-rw-r--r--src/core/hle/service/nfp/nfp.cpp28
-rw-r--r--src/core/hle/service/nfp/nfp.h28
-rw-r--r--src/core/hle/service/nfp/nfp_user.cpp19
-rw-r--r--src/core/hle/service/nfp/nfp_user.h18
-rw-r--r--src/core/hle/service/service.cpp2
11 files changed, 163 insertions, 11 deletions
diff --git a/src/common/logging/backend.cpp b/src/common/logging/backend.cpp
index 9bfac5e7f..a763f4abf 100644
--- a/src/common/logging/backend.cpp
+++ b/src/common/logging/backend.cpp
@@ -42,6 +42,7 @@ namespace Log {
42 SUB(Service, FS) \ 42 SUB(Service, FS) \
43 SUB(Service, HID) \ 43 SUB(Service, HID) \
44 SUB(Service, LM) \ 44 SUB(Service, LM) \
45 SUB(Service, NFP) \
45 SUB(Service, NIFM) \ 46 SUB(Service, NIFM) \
46 SUB(Service, NS) \ 47 SUB(Service, NS) \
47 SUB(Service, NVDRV) \ 48 SUB(Service, NVDRV) \
diff --git a/src/common/logging/log.h b/src/common/logging/log.h
index 6913f6b10..7f079b20f 100644
--- a/src/common/logging/log.h
+++ b/src/common/logging/log.h
@@ -59,6 +59,7 @@ enum class Class : ClassType {
59 Service_FS, ///< The FS (Filesystem) service 59 Service_FS, ///< The FS (Filesystem) service
60 Service_HID, ///< The HID (Human interface device) service 60 Service_HID, ///< The HID (Human interface device) service
61 Service_LM, ///< The LM (Logger) service 61 Service_LM, ///< The LM (Logger) service
62 Service_NFP, ///< The NFP service
62 Service_NIFM, ///< The NIFM (Network interface) service 63 Service_NIFM, ///< The NIFM (Network interface) service
63 Service_NS, ///< The NS services 64 Service_NS, ///< The NS services
64 Service_NVDRV, ///< The NVDRV (Nvidia driver) service 65 Service_NVDRV, ///< The NVDRV (Nvidia driver) service
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 3d187cd40..6f8104516 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -142,6 +142,10 @@ add_library(core STATIC
142 hle/service/nifm/nifm_s.h 142 hle/service/nifm/nifm_s.h
143 hle/service/nifm/nifm_u.cpp 143 hle/service/nifm/nifm_u.cpp
144 hle/service/nifm/nifm_u.h 144 hle/service/nifm/nifm_u.h
145 hle/service/nfp/nfp.cpp
146 hle/service/nfp/nfp.h
147 hle/service/nfp/nfp_user.cpp
148 hle/service/nfp/nfp_user.h
145 hle/service/ns/ns.cpp 149 hle/service/ns/ns.cpp
146 hle/service/ns/ns.h 150 hle/service/ns/ns.h
147 hle/service/ns/pl_u.cpp 151 hle/service/ns/pl_u.cpp
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp
index 311ab4187..171bbd956 100644
--- a/src/core/hle/kernel/svc.cpp
+++ b/src/core/hle/kernel/svc.cpp
@@ -756,8 +756,16 @@ static ResultCode CreateTransferMemory(Handle* handle, VAddr addr, u64 size, u32
756 return RESULT_SUCCESS; 756 return RESULT_SUCCESS;
757} 757}
758 758
759static ResultCode SetThreadCoreMask(u64, u64, u64) { 759static ResultCode GetThreadCoreMask(Handle handle, u32* mask, u64* unknown) {
760 LOG_WARNING(Kernel_SVC, "(STUBBED) called"); 760 LOG_WARNING(Kernel_SVC, "(STUBBED) called, handle=0x%08X", handle);
761 *mask = 0x0;
762 *unknown = 0xf;
763 return RESULT_SUCCESS;
764}
765
766static ResultCode SetThreadCoreMask(Handle handle, u32 mask, u64 unknown) {
767 LOG_WARNING(Kernel_SVC, "(STUBBED) called, handle=0x%08X, mask=0x%08X, unknown=0x%lx", handle,
768 mask, unknown);
761 return RESULT_SUCCESS; 769 return RESULT_SUCCESS;
762} 770}
763 771
@@ -809,7 +817,7 @@ static const FunctionDef SVC_Table[] = {
809 {0x0B, SvcWrap<SleepThread>, "SleepThread"}, 817 {0x0B, SvcWrap<SleepThread>, "SleepThread"},
810 {0x0C, SvcWrap<GetThreadPriority>, "GetThreadPriority"}, 818 {0x0C, SvcWrap<GetThreadPriority>, "GetThreadPriority"},
811 {0x0D, SvcWrap<SetThreadPriority>, "SetThreadPriority"}, 819 {0x0D, SvcWrap<SetThreadPriority>, "SetThreadPriority"},
812 {0x0E, nullptr, "GetThreadCoreMask"}, 820 {0x0E, SvcWrap<GetThreadCoreMask>, "GetThreadCoreMask"},
813 {0x0F, SvcWrap<SetThreadCoreMask>, "SetThreadCoreMask"}, 821 {0x0F, SvcWrap<SetThreadCoreMask>, "SetThreadCoreMask"},
814 {0x10, SvcWrap<GetCurrentProcessorNumber>, "GetCurrentProcessorNumber"}, 822 {0x10, SvcWrap<GetCurrentProcessorNumber>, "GetCurrentProcessorNumber"},
815 {0x11, nullptr, "SignalEvent"}, 823 {0x11, nullptr, "SignalEvent"},
diff --git a/src/core/hle/kernel/svc_wrap.h b/src/core/hle/kernel/svc_wrap.h
index b224f5e67..5da4f5269 100644
--- a/src/core/hle/kernel/svc_wrap.h
+++ b/src/core/hle/kernel/svc_wrap.h
@@ -70,6 +70,21 @@ void SvcWrap() {
70 FuncReturn(retval); 70 FuncReturn(retval);
71} 71}
72 72
73template <ResultCode func(u32, u32, u64)>
74void SvcWrap() {
75 FuncReturn(func((u32)(PARAM(0) & 0xFFFFFFFF), (u32)(PARAM(1) & 0xFFFFFFFF), PARAM(2)).raw);
76}
77
78template <ResultCode func(u32, u32*, u64*)>
79void SvcWrap() {
80 u32 param_1 = 0;
81 u64 param_2 = 0;
82 ResultCode retval = func((u32)(PARAM(2) & 0xFFFFFFFF), &param_1, &param_2);
83 Core::CPU().SetReg(1, param_1);
84 Core::CPU().SetReg(2, param_2);
85 FuncReturn(retval.raw);
86}
87
73template <ResultCode func(u64, u64, u32, u32)> 88template <ResultCode func(u64, u64, u32, u32)>
74void SvcWrap() { 89void SvcWrap() {
75 FuncReturn( 90 FuncReturn(
diff --git a/src/core/hle/service/audio/audren_u.cpp b/src/core/hle/service/audio/audren_u.cpp
index f52cd7d90..6d0461bbc 100644
--- a/src/core/hle/service/audio/audren_u.cpp
+++ b/src/core/hle/service/audio/audren_u.cpp
@@ -59,12 +59,12 @@ private:
59 AudioRendererResponseData response_data{}; 59 AudioRendererResponseData response_data{};
60 60
61 response_data.section_0_size = 61 response_data.section_0_size =
62 response_data.state_entries.size() * sizeof(AudioRendererStateEntry); 62 static_cast<u32>(response_data.state_entries.size() * sizeof(AudioRendererStateEntry));
63 response_data.section_1_size = response_data.section_1.size(); 63 response_data.section_1_size = static_cast<u32>(response_data.section_1.size());
64 response_data.section_2_size = response_data.section_2.size(); 64 response_data.section_2_size = static_cast<u32>(response_data.section_2.size());
65 response_data.section_3_size = response_data.section_3.size(); 65 response_data.section_3_size = static_cast<u32>(response_data.section_3.size());
66 response_data.section_4_size = response_data.section_4.size(); 66 response_data.section_4_size = static_cast<u32>(response_data.section_4.size());
67 response_data.section_5_size = response_data.section_5.size(); 67 response_data.section_5_size = static_cast<u32>(response_data.section_5.size());
68 response_data.total_size = sizeof(AudioRendererResponseData); 68 response_data.total_size = sizeof(AudioRendererResponseData);
69 69
70 for (unsigned i = 0; i < response_data.state_entries.size(); i++) { 70 for (unsigned i = 0; i < response_data.state_entries.size(); i++) {
@@ -156,7 +156,17 @@ public:
156 IAudioDevice() : ServiceFramework("IAudioDevice") { 156 IAudioDevice() : ServiceFramework("IAudioDevice") {
157 static const FunctionInfo functions[] = { 157 static const FunctionInfo functions[] = {
158 {0x0, &IAudioDevice::ListAudioDeviceName, "ListAudioDeviceName"}, 158 {0x0, &IAudioDevice::ListAudioDeviceName, "ListAudioDeviceName"},
159 {0x1, &IAudioDevice::SetAudioDeviceOutputVolume, "SetAudioDeviceOutputVolume"}}; 159 {0x1, &IAudioDevice::SetAudioDeviceOutputVolume, "SetAudioDeviceOutputVolume"},
160 {0x2, nullptr, "GetAudioDeviceOutputVolume"},
161 {0x3, nullptr, "GetActiveAudioDeviceName"},
162 {0x4, &IAudioDevice::QueryAudioDeviceSystemEvent, "QueryAudioDeviceSystemEvent"},
163 {0x5, &IAudioDevice::GetActiveChannelCount, "GetActiveChannelCount"},
164 {0x6, nullptr, "ListAudioDeviceNameAuto"},
165 {0x7, nullptr, "SetAudioDeviceOutputVolumeAuto"},
166 {0x8, nullptr, "GetAudioDeviceOutputVolumeAuto"},
167 {0x10, nullptr, "GetActiveAudioDeviceNameAuto"},
168 {0x11, nullptr, "QueryAudioDeviceInputEvent"},
169 {0x12, nullptr, "QueryAudioDeviceOutputEvent"}};
160 RegisterHandlers(functions); 170 RegisterHandlers(functions);
161 171
162 buffer_event = 172 buffer_event =
@@ -189,8 +199,26 @@ private:
189 rb.Push(RESULT_SUCCESS); 199 rb.Push(RESULT_SUCCESS);
190 } 200 }
191 201
202 void QueryAudioDeviceSystemEvent(Kernel::HLERequestContext& ctx) {
203 LOG_WARNING(Service_Audio, "(STUBBED) called");
204
205 buffer_event->Signal();
206
207 IPC::ResponseBuilder rb{ctx, 2, 1};
208 rb.Push(RESULT_SUCCESS);
209 rb.PushCopyObjects(buffer_event);
210 }
211
212 void GetActiveChannelCount(Kernel::HLERequestContext& ctx) {
213 LOG_WARNING(Service_Audio, "(STUBBED) called");
214 IPC::ResponseBuilder rb{ctx, 3};
215 rb.Push(RESULT_SUCCESS);
216 rb.Push<u32>(1);
217 }
218
192 Kernel::SharedPtr<Kernel::Event> buffer_event; 219 Kernel::SharedPtr<Kernel::Event> buffer_event;
193}; 220
221}; // namespace Audio
194 222
195AudRenU::AudRenU() : ServiceFramework("audren:u") { 223AudRenU::AudRenU() : ServiceFramework("audren:u") {
196 static const FunctionInfo functions[] = { 224 static const FunctionInfo functions[] = {
diff --git a/src/core/hle/service/nfp/nfp.cpp b/src/core/hle/service/nfp/nfp.cpp
new file mode 100644
index 000000000..49870841c
--- /dev/null
+++ b/src/core/hle/service/nfp/nfp.cpp
@@ -0,0 +1,28 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include "common/logging/log.h"
6#include "core/hle/ipc_helpers.h"
7#include "core/hle/service/nfp/nfp.h"
8#include "core/hle/service/nfp/nfp_user.h"
9
10namespace Service {
11namespace NFP {
12
13Module::Interface::Interface(std::shared_ptr<Module> module, const char* name)
14 : ServiceFramework(name), module(std::move(module)) {}
15
16void Module::Interface::Unknown(Kernel::HLERequestContext& ctx) {
17 LOG_WARNING(Service_NFP, "(STUBBED) called");
18 IPC::ResponseBuilder rb{ctx, 2};
19 rb.Push(RESULT_SUCCESS);
20}
21
22void InstallInterfaces(SM::ServiceManager& service_manager) {
23 auto module = std::make_shared<Module>();
24 std::make_shared<NFP_User>(module)->InstallAsService(service_manager);
25}
26
27} // namespace NFP
28} // namespace Service
diff --git a/src/core/hle/service/nfp/nfp.h b/src/core/hle/service/nfp/nfp.h
new file mode 100644
index 000000000..1163e9954
--- /dev/null
+++ b/src/core/hle/service/nfp/nfp.h
@@ -0,0 +1,28 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include "core/hle/service/service.h"
8
9namespace Service {
10namespace NFP {
11
12class Module final {
13public:
14 class Interface : public ServiceFramework<Interface> {
15 public:
16 Interface(std::shared_ptr<Module> module, const char* name);
17
18 void Unknown(Kernel::HLERequestContext& ctx);
19
20 protected:
21 std::shared_ptr<Module> module;
22 };
23};
24
25void InstallInterfaces(SM::ServiceManager& service_manager);
26
27} // namespace NFP
28} // namespace Service
diff --git a/src/core/hle/service/nfp/nfp_user.cpp b/src/core/hle/service/nfp/nfp_user.cpp
new file mode 100644
index 000000000..14e5647c4
--- /dev/null
+++ b/src/core/hle/service/nfp/nfp_user.cpp
@@ -0,0 +1,19 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include "core/hle/service/nfp/nfp_user.h"
6
7namespace Service {
8namespace NFP {
9
10NFP_User::NFP_User(std::shared_ptr<Module> module)
11 : Module::Interface(std::move(module), "nfp:user") {
12 static const FunctionInfo functions[] = {
13 {0, &NFP_User::Unknown, "Unknown"},
14 };
15 RegisterHandlers(functions);
16}
17
18} // namespace NFP
19} // namespace Service
diff --git a/src/core/hle/service/nfp/nfp_user.h b/src/core/hle/service/nfp/nfp_user.h
new file mode 100644
index 000000000..1606444ca
--- /dev/null
+++ b/src/core/hle/service/nfp/nfp_user.h
@@ -0,0 +1,18 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include "core/hle/service/nfp/nfp.h"
8
9namespace Service {
10namespace NFP {
11
12class NFP_User final : public Module::Interface {
13public:
14 explicit NFP_User(std::shared_ptr<Module> module);
15};
16
17} // namespace NFP
18} // namespace Service
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp
index b224b89da..8011d0d71 100644
--- a/src/core/hle/service/service.cpp
+++ b/src/core/hle/service/service.cpp
@@ -25,6 +25,7 @@
25#include "core/hle/service/friend/friend.h" 25#include "core/hle/service/friend/friend.h"
26#include "core/hle/service/hid/hid.h" 26#include "core/hle/service/hid/hid.h"
27#include "core/hle/service/lm/lm.h" 27#include "core/hle/service/lm/lm.h"
28#include "core/hle/service/nfp/nfp.h"
28#include "core/hle/service/nifm/nifm.h" 29#include "core/hle/service/nifm/nifm.h"
29#include "core/hle/service/ns/ns.h" 30#include "core/hle/service/ns/ns.h"
30#include "core/hle/service/nvdrv/nvdrv.h" 31#include "core/hle/service/nvdrv/nvdrv.h"
@@ -187,6 +188,7 @@ void Init() {
187 Friend::InstallInterfaces(*SM::g_service_manager); 188 Friend::InstallInterfaces(*SM::g_service_manager);
188 HID::InstallInterfaces(*SM::g_service_manager); 189 HID::InstallInterfaces(*SM::g_service_manager);
189 LM::InstallInterfaces(*SM::g_service_manager); 190 LM::InstallInterfaces(*SM::g_service_manager);
191 NFP::InstallInterfaces(*SM::g_service_manager);
190 NIFM::InstallInterfaces(*SM::g_service_manager); 192 NIFM::InstallInterfaces(*SM::g_service_manager);
191 NS::InstallInterfaces(*SM::g_service_manager); 193 NS::InstallInterfaces(*SM::g_service_manager);
192 Nvidia::InstallInterfaces(*SM::g_service_manager); 194 Nvidia::InstallInterfaces(*SM::g_service_manager);