Browse Source
vi: rewrite IApplicationRootService, IManagerRootService, ISystemRootService
pull/15/merge
vi: rewrite IApplicationRootService, IManagerRootService, ISystemRootService
pull/15/merge
12 changed files with 145 additions and 90 deletions
-
2src/core/CMakeLists.txt
-
21src/core/hle/service/vi/application_root_service.cpp
-
17src/core/hle/service/vi/application_root_service.h
-
21src/core/hle/service/vi/manager_root_service.cpp
-
16src/core/hle/service/vi/manager_root_service.h
-
39src/core/hle/service/vi/service_creator.cpp
-
33src/core/hle/service/vi/service_creator.h
-
21src/core/hle/service/vi/system_root_service.cpp
-
16src/core/hle/service/vi/system_root_service.h
-
34src/core/hle/service/vi/vi.cpp
-
13src/core/hle/service/vi/vi.h
-
2src/core/hle/service/vi/vi_types.h
@ -0,0 +1,39 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include "core/hle/service/vi/application_display_service.h"
|
|||
#include "core/hle/service/vi/service_creator.h"
|
|||
#include "core/hle/service/vi/vi_results.h"
|
|||
#include "core/hle/service/vi/vi_types.h"
|
|||
|
|||
namespace Service::VI { |
|||
|
|||
static bool IsValidServiceAccess(Permission permission, Policy policy) { |
|||
if (permission == Permission::User) { |
|||
return policy == Policy::User; |
|||
} |
|||
|
|||
if (permission == Permission::System || permission == Permission::Manager) { |
|||
return policy == Policy::User || policy == Policy::Compositor; |
|||
} |
|||
|
|||
return false; |
|||
} |
|||
|
|||
Result GetApplicationDisplayService( |
|||
std::shared_ptr<IApplicationDisplayService>* out_application_display_service, |
|||
Core::System& system, Nvnflinger::Nvnflinger& nvnflinger, |
|||
Nvnflinger::HosBinderDriverServer& hos_binder_driver_server, Permission permission, |
|||
Policy policy) { |
|||
|
|||
if (!IsValidServiceAccess(permission, policy)) { |
|||
LOG_ERROR(Service_VI, "Permission denied for policy {}", policy); |
|||
R_THROW(ResultPermissionDenied); |
|||
} |
|||
|
|||
*out_application_display_service = |
|||
std::make_shared<IApplicationDisplayService>(system, nvnflinger, hos_binder_driver_server); |
|||
R_SUCCEED(); |
|||
} |
|||
|
|||
} // namespace Service::VI
|
|||
@ -0,0 +1,33 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
#pragma once |
|||
|
|||
#include <memory> |
|||
|
|||
#include "common/common_types.h" |
|||
|
|||
namespace Core { |
|||
class System; |
|||
} |
|||
|
|||
namespace Service::Nvnflinger { |
|||
class HosBinderDriverServer; |
|||
class Nvnflinger; |
|||
} // namespace Service::Nvnflinger |
|||
|
|||
union Result; |
|||
|
|||
namespace Service::VI { |
|||
|
|||
class IApplicationDisplayService; |
|||
enum class Permission; |
|||
enum class Policy : u32; |
|||
|
|||
Result GetApplicationDisplayService( |
|||
std::shared_ptr<IApplicationDisplayService>* out_application_display_service, |
|||
Core::System& system, Nvnflinger::Nvnflinger& nvnflinger, |
|||
Nvnflinger::HosBinderDriverServer& hos_binder_driver_server, Permission permission, |
|||
Policy policy); |
|||
|
|||
} // namespace Service::VI |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue