mirror of
https://github.com/PabloMK7/citra.git
synced 2024-11-29 19:00:17 +00:00
kernel/shared_memory: Make data members private
Rather than allow unfettered access to the class internals, we hide all members by default and create and API that other code can operate against.
This commit is contained in:
parent
662c3ff684
commit
1cb9bea504
7 changed files with 31 additions and 18 deletions
|
@ -65,7 +65,7 @@ ResultCode SoftwareKeyboard::StartImpl(Service::APT::AppletStartupParameter cons
|
||||||
boost::static_pointer_cast<Kernel::SharedMemory, Kernel::Object>(parameter.object);
|
boost::static_pointer_cast<Kernel::SharedMemory, Kernel::Object>(parameter.object);
|
||||||
|
|
||||||
// TODO(Subv): Verify if this is the correct behavior
|
// TODO(Subv): Verify if this is the correct behavior
|
||||||
memset(text_memory->GetPointer(), 0, text_memory->size);
|
memset(text_memory->GetPointer(), 0, text_memory->GetSize());
|
||||||
|
|
||||||
DrawScreenKeyboard();
|
DrawScreenKeyboard();
|
||||||
|
|
||||||
|
|
|
@ -20,12 +20,25 @@ public:
|
||||||
std::string GetName() const override {
|
std::string GetName() const override {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
void SetName(std::string name) {
|
||||||
|
this->name = name;
|
||||||
|
}
|
||||||
|
|
||||||
static const HandleType HANDLE_TYPE = HandleType::SharedMemory;
|
static const HandleType HANDLE_TYPE = HandleType::SharedMemory;
|
||||||
HandleType GetHandleType() const override {
|
HandleType GetHandleType() const override {
|
||||||
return HANDLE_TYPE;
|
return HANDLE_TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Gets the size of the underlying memory block in bytes.
|
||||||
|
u64 GetSize() const {
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Gets the linear heap physical offset
|
||||||
|
u64 GetLinearHeapPhysicalOffset() const {
|
||||||
|
return linear_heap_phys_offset;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts the specified MemoryPermission into the equivalent VMAPermission.
|
* Converts the specified MemoryPermission into the equivalent VMAPermission.
|
||||||
* @param permission The MemoryPermission to convert.
|
* @param permission The MemoryPermission to convert.
|
||||||
|
@ -57,30 +70,30 @@ public:
|
||||||
*/
|
*/
|
||||||
u8* GetPointer(u32 offset = 0);
|
u8* GetPointer(u32 offset = 0);
|
||||||
|
|
||||||
/// Process that created this shared memory block.
|
private:
|
||||||
Process* owner_process;
|
explicit SharedMemory(KernelSystem& kernel);
|
||||||
/// Address of shared memory block in the owner process if specified.
|
~SharedMemory() override;
|
||||||
VAddr base_address;
|
|
||||||
/// Offset in FCRAM of the shared memory block in the linear heap if no address was specified
|
/// Offset in FCRAM of the shared memory block in the linear heap if no address was specified
|
||||||
/// during creation.
|
/// during creation.
|
||||||
PAddr linear_heap_phys_offset;
|
PAddr linear_heap_phys_offset = 0;
|
||||||
/// Backing memory for this shared memory block.
|
/// Backing memory for this shared memory block.
|
||||||
std::vector<std::pair<u8*, u32>> backing_blocks;
|
std::vector<std::pair<u8*, u32>> backing_blocks;
|
||||||
/// Size of the memory block. Page-aligned.
|
/// Size of the memory block. Page-aligned.
|
||||||
u32 size;
|
u32 size = 0;
|
||||||
/// Permission restrictions applied to the process which created the block.
|
/// Permission restrictions applied to the process which created the block.
|
||||||
MemoryPermission permissions;
|
MemoryPermission permissions{};
|
||||||
/// Permission restrictions applied to other processes mapping the block.
|
/// Permission restrictions applied to other processes mapping the block.
|
||||||
MemoryPermission other_permissions;
|
MemoryPermission other_permissions{};
|
||||||
|
/// Process that created this shared memory block.
|
||||||
|
SharedPtr<Process> owner_process;
|
||||||
|
/// Address of shared memory block in the owner process if specified.
|
||||||
|
VAddr base_address = 0;
|
||||||
/// Name of shared memory object.
|
/// Name of shared memory object.
|
||||||
std::string name;
|
std::string name;
|
||||||
|
|
||||||
MemoryRegionInfo::IntervalSet holding_memory;
|
MemoryRegionInfo::IntervalSet holding_memory;
|
||||||
|
|
||||||
private:
|
|
||||||
explicit SharedMemory(KernelSystem& kernel);
|
|
||||||
~SharedMemory() override;
|
|
||||||
|
|
||||||
friend class KernelSystem;
|
friend class KernelSystem;
|
||||||
KernelSystem& kernel;
|
KernelSystem& kernel;
|
||||||
};
|
};
|
||||||
|
|
|
@ -217,7 +217,7 @@ void Module::Interface::GetSharedFont(Kernel::HLERequestContext& ctx) {
|
||||||
// shared font, different linear heap region would have required shared font to relocate
|
// shared font, different linear heap region would have required shared font to relocate
|
||||||
// according to two different addresses at the same time, which is impossible.
|
// according to two different addresses at the same time, which is impossible.
|
||||||
VAddr target_address =
|
VAddr target_address =
|
||||||
apt->shared_font_mem->linear_heap_phys_offset + Memory::LINEAR_HEAP_VADDR;
|
apt->shared_font_mem->GetLinearHeapPhysicalOffset() + Memory::LINEAR_HEAP_VADDR;
|
||||||
if (!apt->shared_font_relocated) {
|
if (!apt->shared_font_relocated) {
|
||||||
BCFNT::RelocateSharedFont(apt->shared_font_mem, target_address);
|
BCFNT::RelocateSharedFont(apt->shared_font_mem, target_address);
|
||||||
apt->shared_font_relocated = true;
|
apt->shared_font_relocated = true;
|
||||||
|
|
|
@ -50,7 +50,7 @@ void HTTP_C::Initialize(Kernel::HLERequestContext& ctx) {
|
||||||
u32 pid = rp.PopPID();
|
u32 pid = rp.PopPID();
|
||||||
shared_memory = rp.PopObject<Kernel::SharedMemory>();
|
shared_memory = rp.PopObject<Kernel::SharedMemory>();
|
||||||
if (shared_memory) {
|
if (shared_memory) {
|
||||||
shared_memory->name = "HTTP_C:shared_memory";
|
shared_memory->SetName("HTTP_C:shared_memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_WARNING(Service_HTTP, "(STUBBED) called, shared memory size: {} pid: {}", shmem_size, pid);
|
LOG_WARNING(Service_HTTP, "(STUBBED) called, shared memory size: {} pid: {}", shmem_size, pid);
|
||||||
|
|
|
@ -240,7 +240,7 @@ void IR_USER::InitializeIrNopShared(Kernel::HLERequestContext& ctx) {
|
||||||
|
|
||||||
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
||||||
|
|
||||||
shared_memory->name = "IR_USER: shared memory";
|
shared_memory->SetName("IR_USER: shared memory");
|
||||||
|
|
||||||
receive_buffer = std::make_unique<BufferManager>(shared_memory, 0x10, 0x20,
|
receive_buffer = std::make_unique<BufferManager>(shared_memory, 0x10, 0x20,
|
||||||
recv_buff_packet_count, recv_buff_size);
|
recv_buff_packet_count, recv_buff_size);
|
||||||
|
|
|
@ -40,7 +40,7 @@ struct MIC_U::Impl {
|
||||||
shared_memory = rp.PopObject<Kernel::SharedMemory>();
|
shared_memory = rp.PopObject<Kernel::SharedMemory>();
|
||||||
|
|
||||||
if (shared_memory) {
|
if (shared_memory) {
|
||||||
shared_memory->name = "MIC_U:shared_memory";
|
shared_memory->SetName("MIC_U:shared_memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
||||||
|
|
|
@ -724,7 +724,7 @@ void NWM_UDS::InitializeWithVersion(Kernel::HLERequestContext& ctx) {
|
||||||
|
|
||||||
initialized = true;
|
initialized = true;
|
||||||
|
|
||||||
ASSERT_MSG(recv_buffer_memory->size == sharedmem_size, "Invalid shared memory size.");
|
ASSERT_MSG(recv_buffer_memory->GetSize() == sharedmem_size, "Invalid shared memory size.");
|
||||||
|
|
||||||
if (auto room_member = Network::GetRoomMember().lock()) {
|
if (auto room_member = Network::GetRoomMember().lock()) {
|
||||||
wifi_packet_received = room_member->BindOnWifiPacketReceived(OnWifiPacketReceived);
|
wifi_packet_received = room_member->BindOnWifiPacketReceived(OnWifiPacketReceived);
|
||||||
|
|
Loading…
Reference in a new issue