diff options
Diffstat (limited to 'src/core/hle/service')
| -rw-r--r-- | src/core/hle/service/apt/apt.cpp | 4 | ||||
| -rw-r--r-- | src/core/hle/service/gsp_gpu.cpp | 30 | ||||
| -rw-r--r-- | src/core/hle/service/hid/hid.cpp | 6 | ||||
| -rw-r--r-- | src/core/hle/service/ir/ir.cpp | 4 | 
4 files changed, 27 insertions, 17 deletions
| diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index 560c9dcf6..09d463dd5 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp @@ -304,7 +304,9 @@ void Init() {          file.ReadBytes(shared_font.data(), (size_t)file.GetSize());          // Create shared font memory object -        shared_font_mem = Kernel::SharedMemory::Create("APT_U:shared_font_mem"); +        using Kernel::MemoryPermission; +        shared_font_mem = Kernel::SharedMemory::Create(3 * 1024 * 1024, // 3MB +                MemoryPermission::ReadWrite, MemoryPermission::Read, "APT_U:shared_font_mem");      } else {          LOG_WARNING(Service_APT, "Unable to load shared font: %s", filepath.c_str());          shared_font_mem = nullptr; diff --git a/src/core/hle/service/gsp_gpu.cpp b/src/core/hle/service/gsp_gpu.cpp index 8da063bd2..c6252a03b 100644 --- a/src/core/hle/service/gsp_gpu.cpp +++ b/src/core/hle/service/gsp_gpu.cpp @@ -30,13 +30,12 @@ namespace GSP_GPU {  Kernel::SharedPtr<Kernel::Event> g_interrupt_event;  /// GSP shared memoryings  Kernel::SharedPtr<Kernel::SharedMemory> g_shared_memory; -/// Thread index into interrupt relay queue, 1 is arbitrary -u32 g_thread_id = 1; +/// Thread index into interrupt relay queue +u32 g_thread_id = 0;  /// Gets a pointer to a thread command buffer in GSP shared memory  static inline u8* GetCommandBuffer(u32 thread_id) { -    ResultVal<u8*> ptr = g_shared_memory->GetPointer(0x800 + (thread_id * sizeof(CommandBuffer))); -    return ptr.ValueOr(nullptr); +    return g_shared_memory->GetPointer(0x800 + (thread_id * sizeof(CommandBuffer)));  }  static inline FrameBufferUpdate* GetFrameBufferInfo(u32 thread_id, u32 screen_index) { @@ -44,14 +43,14 @@ static inline FrameBufferUpdate* GetFrameBufferInfo(u32 thread_id, u32 screen_in      // For each thread there are two FrameBufferUpdate fields      u32 offset = 0x200 + (2 * thread_id + screen_index) * sizeof(FrameBufferUpdate); -    ResultVal<u8*> ptr = g_shared_memory->GetPointer(offset); -    return reinterpret_cast<FrameBufferUpdate*>(ptr.ValueOr(nullptr)); +    u8* ptr = g_shared_memory->GetPointer(offset); +    return reinterpret_cast<FrameBufferUpdate*>(ptr);  }  /// Gets a pointer to the interrupt relay queue for a given thread index  static inline InterruptRelayQueue* GetInterruptRelayQueue(u32 thread_id) { -    ResultVal<u8*> ptr = g_shared_memory->GetPointer(sizeof(InterruptRelayQueue) * thread_id); -    return reinterpret_cast<InterruptRelayQueue*>(ptr.ValueOr(nullptr)); +    u8* ptr = g_shared_memory->GetPointer(sizeof(InterruptRelayQueue) * thread_id); +    return reinterpret_cast<InterruptRelayQueue*>(ptr);  }  /** @@ -278,7 +277,7 @@ static void FlushDataCache(Service::Interface* self) {   *      1 : "Flags" field, purpose is unknown   *      3 : Handle to GSP synchronization event   *  Outputs: - *      0 : Result of function, 0 on success, otherwise error code + *      1 : Result of function, 0x2A07 on success, otherwise error code   *      2 : Thread index into GSP command buffer   *      4 : Handle to GSP shared memory   */ @@ -288,11 +287,12 @@ static void RegisterInterruptRelayQueue(Service::Interface* self) {      g_interrupt_event = Kernel::g_handle_table.Get<Kernel::Event>(cmd_buff[3]);      ASSERT_MSG((g_interrupt_event != nullptr), "handle is not valid!"); -    g_shared_memory = Kernel::SharedMemory::Create("GSPSharedMem");      Handle shmem_handle = Kernel::g_handle_table.Create(g_shared_memory).MoveFrom(); -    cmd_buff[1] = 0x2A07; // Value verified by 3dmoo team, purpose unknown, but needed for GSP init +    // This specific code is required for a successful initialization, rather than 0 +    cmd_buff[1] = ResultCode((ErrorDescription)519, ErrorModule::GX, +                             ErrorSummary::Success, ErrorLevel::Success).raw;      cmd_buff[2] = g_thread_id++; // Thread ID      cmd_buff[4] = shmem_handle; // GSP shared memory @@ -527,8 +527,12 @@ Interface::Interface() {      Register(FunctionTable);      g_interrupt_event = 0; -    g_shared_memory = 0; -    g_thread_id = 1; + +    using Kernel::MemoryPermission; +    g_shared_memory = Kernel::SharedMemory::Create(0x1000, MemoryPermission::ReadWrite, +            MemoryPermission::ReadWrite, "GSPSharedMem"); + +    g_thread_id = 0;  }  } // namespace diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index dd85848d0..9695f7e56 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp @@ -48,7 +48,7 @@ static u32 next_touch_index;  //     * Set PadData.current_state.circle_right = 1 if current PadEntry.circle_pad_y <= -41  void Update() { -    SharedMem* mem = reinterpret_cast<SharedMem*>(shared_mem->GetPointer().ValueOr(nullptr)); +    SharedMem* mem = reinterpret_cast<SharedMem*>(shared_mem->GetPointer());      const PadState state = VideoCore::g_emu_window->GetPadState();      if (mem == nullptr) { @@ -163,7 +163,9 @@ void Init() {      AddService(new HID_U_Interface);      AddService(new HID_SPVR_Interface); -    shared_mem = SharedMemory::Create("HID:SharedMem"); +    using Kernel::MemoryPermission; +    shared_mem = SharedMemory::Create(0x1000, MemoryPermission::ReadWrite, +            MemoryPermission::Read, "HID:SharedMem");      next_pad_index = 0;      next_touch_index = 0; diff --git a/src/core/hle/service/ir/ir.cpp b/src/core/hle/service/ir/ir.cpp index 15ac477ef..adfbb258d 100644 --- a/src/core/hle/service/ir/ir.cpp +++ b/src/core/hle/service/ir/ir.cpp @@ -34,7 +34,9 @@ void Init() {      AddService(new IR_U_Interface);      AddService(new IR_User_Interface); -    shared_memory = SharedMemory::Create("IR:SharedMemory"); +    using Kernel::MemoryPermission; +    shared_memory = SharedMemory::Create(0x1000, Kernel::MemoryPermission::ReadWrite, +            Kernel::MemoryPermission::ReadWrite, "IR:SharedMemory");      // Create event handle(s)      handle_event  = Event::Create(RESETTYPE_ONESHOT, "IR:HandleEvent"); | 
