diff options
| author | bunnei <bunneidev@gmail.com> | 2016-05-13 15:33:44 -0400 | 
|---|---|---|
| committer | bunnei <bunneidev@gmail.com> | 2016-05-13 15:33:44 -0400 | 
| commit | 18b517e236b7f6710567e57dab6a7c5329db948f (patch) | |
| tree | 5257e9ace394fa6062768c27b95e807df87c61b2 /src/core/hle/applets | |
| parent | 193ea9df29e40f8ba3f75a9b8abb92e760e943d0 (diff) | |
| parent | ac2de12ed8a7cc2759e25325f388db92b3f356a6 (diff) | |
Merge pull request #1689 from Subv/shmem
Kernel: Implemented shared memory.
Diffstat (limited to 'src/core/hle/applets')
| -rw-r--r-- | src/core/hle/applets/applet.h | 1 | ||||
| -rw-r--r-- | src/core/hle/applets/mii_selector.cpp | 9 | ||||
| -rw-r--r-- | src/core/hle/applets/swkbd.cpp | 8 | 
3 files changed, 14 insertions, 4 deletions
diff --git a/src/core/hle/applets/applet.h b/src/core/hle/applets/applet.h index af442f81d..754c6f7db 100644 --- a/src/core/hle/applets/applet.h +++ b/src/core/hle/applets/applet.h @@ -65,6 +65,7 @@ protected:      virtual ResultCode StartImpl(const Service::APT::AppletStartupParameter& parameter) = 0;      Service::APT::AppletId id; ///< Id of this Applet +    std::shared_ptr<std::vector<u8>> heap_memory; ///< Heap memory for this Applet  };  /// Returns whether a library applet is currently running diff --git a/src/core/hle/applets/mii_selector.cpp b/src/core/hle/applets/mii_selector.cpp index b4456ca90..bf39eca22 100644 --- a/src/core/hle/applets/mii_selector.cpp +++ b/src/core/hle/applets/mii_selector.cpp @@ -35,9 +35,14 @@ ResultCode MiiSelector::ReceiveParameter(const Service::APT::MessageParameter& p      ASSERT(sizeof(capture_info) == parameter.buffer_size);      memcpy(&capture_info, parameter.data, sizeof(capture_info)); +      using Kernel::MemoryPermission; -    framebuffer_memory = Kernel::SharedMemory::Create(capture_info.size, MemoryPermission::ReadWrite, -                                                      MemoryPermission::ReadWrite, "MiiSelector Memory"); +    // Allocate a heap block of the required size for this applet. +    heap_memory = std::make_shared<std::vector<u8>>(capture_info.size); +    // Create a SharedMemory that directly points to this heap block. +    framebuffer_memory = Kernel::SharedMemory::CreateForApplet(heap_memory, 0, heap_memory->size(), +                                                               MemoryPermission::ReadWrite, MemoryPermission::ReadWrite, +                                                               "MiiSelector Memory");      // Send the response message with the newly created SharedMemory      Service::APT::MessageParameter result; diff --git a/src/core/hle/applets/swkbd.cpp b/src/core/hle/applets/swkbd.cpp index 87238aa1c..90c6adc65 100644 --- a/src/core/hle/applets/swkbd.cpp +++ b/src/core/hle/applets/swkbd.cpp @@ -40,8 +40,12 @@ ResultCode SoftwareKeyboard::ReceiveParameter(Service::APT::MessageParameter con      memcpy(&capture_info, parameter.data, sizeof(capture_info));      using Kernel::MemoryPermission; -    framebuffer_memory = Kernel::SharedMemory::Create(capture_info.size, MemoryPermission::ReadWrite, -                                                      MemoryPermission::ReadWrite, "SoftwareKeyboard Memory"); +    // Allocate a heap block of the required size for this applet. +    heap_memory = std::make_shared<std::vector<u8>>(capture_info.size); +    // Create a SharedMemory that directly points to this heap block. +    framebuffer_memory = Kernel::SharedMemory::CreateForApplet(heap_memory, 0, heap_memory->size(), +                                                               MemoryPermission::ReadWrite, MemoryPermission::ReadWrite, +                                                               "SoftwareKeyboard Memory");      // Send the response message with the newly created SharedMemory      Service::APT::MessageParameter result;  | 
