12 changed files with 209 additions and 68 deletions
-
4src/core/CMakeLists.txt
-
3src/core/hle/kernel/handle_table.cpp
-
2src/core/hle/kernel/init/init_slab_setup.cpp
-
4src/core/hle/kernel/k_page_table.h
-
45src/core/hle/kernel/k_transfer_memory.cpp
-
82src/core/hle/kernel/k_transfer_memory.h
-
4src/core/hle/kernel/kernel.h
-
93src/core/hle/kernel/svc.cpp
-
12src/core/hle/kernel/svc_wrap.h
-
9src/core/hle/service/am/am.cpp
-
2src/core/hle/service/am/am.h
-
17src/core/hle/service/hid/hid.cpp
@ -0,0 +1,45 @@ |
|||||
|
// Copyright 2021 yuzu emulator team
|
||||
|
// Licensed under GPLv2 or any later version
|
||||
|
// Refer to the license.txt file included.
|
||||
|
|
||||
|
#include "core/hle/kernel/k_resource_limit.h"
|
||||
|
#include "core/hle/kernel/k_transfer_memory.h"
|
||||
|
#include "core/hle/kernel/kernel.h"
|
||||
|
#include "core/hle/kernel/process.h"
|
||||
|
|
||||
|
namespace Kernel { |
||||
|
|
||||
|
KTransferMemory::KTransferMemory(KernelCore& kernel) |
||||
|
: KAutoObjectWithSlabHeapAndContainer{kernel} {} |
||||
|
|
||||
|
KTransferMemory::~KTransferMemory() = default; |
||||
|
|
||||
|
ResultCode KTransferMemory::Initialize(VAddr address_, std::size_t size_, |
||||
|
Svc::MemoryPermission owner_perm_) { |
||||
|
// Set members.
|
||||
|
owner = kernel.CurrentProcess(); |
||||
|
|
||||
|
// TODO(bunnei): Lock for transfer memory
|
||||
|
|
||||
|
// Set remaining tracking members.
|
||||
|
owner->Open(); |
||||
|
owner_perm = owner_perm_; |
||||
|
address = address_; |
||||
|
size = size_; |
||||
|
is_initialized = true; |
||||
|
|
||||
|
return RESULT_SUCCESS; |
||||
|
} |
||||
|
|
||||
|
void KTransferMemory::Finalize() { |
||||
|
// Perform inherited finalization.
|
||||
|
KAutoObjectWithSlabHeapAndContainer<KTransferMemory, KAutoObjectWithList>::Finalize(); |
||||
|
} |
||||
|
|
||||
|
void KTransferMemory::PostDestroy(uintptr_t arg) { |
||||
|
Process* owner = reinterpret_cast<Process*>(arg); |
||||
|
owner->GetResourceLimit()->Release(LimitableResource::TransferMemory, 1); |
||||
|
owner->Close(); |
||||
|
} |
||||
|
|
||||
|
} // namespace Kernel
|
||||
@ -0,0 +1,82 @@ |
|||||
|
// Copyright 2021 yuzu emulator team |
||||
|
// Licensed under GPLv2 or any later version |
||||
|
// Refer to the license.txt file included. |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include <memory> |
||||
|
|
||||
|
#include "core/hle/kernel/slab_helpers.h" |
||||
|
#include "core/hle/kernel/svc_types.h" |
||||
|
#include "core/hle/result.h" |
||||
|
|
||||
|
union ResultCode; |
||||
|
|
||||
|
namespace Core::Memory { |
||||
|
class Memory; |
||||
|
} |
||||
|
|
||||
|
namespace Kernel { |
||||
|
|
||||
|
class KernelCore; |
||||
|
class Process; |
||||
|
|
||||
|
class KTransferMemory final |
||||
|
: public KAutoObjectWithSlabHeapAndContainer<KTransferMemory, KAutoObjectWithList> { |
||||
|
KERNEL_AUTOOBJECT_TRAITS(KTransferMemory, KAutoObject); |
||||
|
|
||||
|
public: |
||||
|
explicit KTransferMemory(KernelCore& kernel); |
||||
|
~KTransferMemory() override; |
||||
|
|
||||
|
static constexpr HandleType HANDLE_TYPE = HandleType::TransferMemory; |
||||
|
|
||||
|
ResultCode Initialize(VAddr address_, std::size_t size_, Svc::MemoryPermission owner_perm_); |
||||
|
|
||||
|
virtual void Finalize() override; |
||||
|
|
||||
|
virtual bool IsInitialized() const override { |
||||
|
return is_initialized; |
||||
|
} |
||||
|
|
||||
|
virtual uintptr_t GetPostDestroyArgument() const override { |
||||
|
return reinterpret_cast<uintptr_t>(owner); |
||||
|
} |
||||
|
|
||||
|
static void PostDestroy(uintptr_t arg); |
||||
|
|
||||
|
Process* GetOwner() const { |
||||
|
return owner; |
||||
|
} |
||||
|
|
||||
|
VAddr GetSourceAddress() const { |
||||
|
return address; |
||||
|
} |
||||
|
|
||||
|
size_t GetSize() const { |
||||
|
return is_initialized ? size * PageSize : 0; |
||||
|
} |
||||
|
|
||||
|
// DEPRECATED |
||||
|
|
||||
|
std::string GetTypeName() const override { |
||||
|
return "TransferMemory"; |
||||
|
} |
||||
|
|
||||
|
std::string GetName() const override { |
||||
|
return GetTypeName(); |
||||
|
} |
||||
|
|
||||
|
HandleType GetHandleType() const override { |
||||
|
return HANDLE_TYPE; |
||||
|
} |
||||
|
|
||||
|
private: |
||||
|
Process* owner{}; |
||||
|
VAddr address{}; |
||||
|
Svc::MemoryPermission owner_perm{}; |
||||
|
size_t size{}; |
||||
|
bool is_initialized{}; |
||||
|
}; |
||||
|
|
||||
|
} // namespace Kernel |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue