diff options
| author | bunnei <bunneidev@gmail.com> | 2018-04-02 13:05:25 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-04-02 13:05:25 -0400 | 
| commit | f92594d744eedc6f8b01c5d5f761b55b7035be1f (patch) | |
| tree | 487a643bbd523b37e95ba1fc1bd3baa576831485 /src/core/hle | |
| parent | 3413f1f7ceef0d35f0dc867f26c185643829918b (diff) | |
| parent | f4ba523992a61bbdec6c849d462389b938beff87 (diff) | |
Merge pull request #296 from bunnei/misc-mem-fsp-fixes
Fix stack region, implement FSP GetSize/SetSize, and some stubs
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/kernel/hle_ipc.cpp | 7 | ||||
| -rw-r--r-- | src/core/hle/kernel/process.cpp | 5 | ||||
| -rw-r--r-- | src/core/hle/kernel/thread.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/service/filesystem/fsp_srv.cpp | 23 | ||||
| -rw-r--r-- | src/core/hle/service/hid/hid.cpp | 8 | 
5 files changed, 38 insertions, 7 deletions
| diff --git a/src/core/hle/kernel/hle_ipc.cpp b/src/core/hle/kernel/hle_ipc.cpp index ffcbfe64f..bef4f15f5 100644 --- a/src/core/hle/kernel/hle_ipc.cpp +++ b/src/core/hle/kernel/hle_ipc.cpp @@ -268,8 +268,11 @@ std::vector<u8> HLERequestContext::ReadBuffer() const {  size_t HLERequestContext::WriteBuffer(const void* buffer, size_t size) const {      const bool is_buffer_b{BufferDescriptorB().size() && BufferDescriptorB()[0].Size()}; - -    ASSERT_MSG(size <= GetWriteBufferSize(), "Size %lx is too big", size); +    const size_t buffer_size{GetWriteBufferSize()}; +    if (size > buffer_size) { +        LOG_CRITICAL(Core, "size (%016zx) is greater than buffer_size (%016zx)", size, buffer_size); +        size = buffer_size; // TODO(bunnei): This needs to be HW tested +    }      if (is_buffer_b) {          Memory::WriteBlock(BufferDescriptorB()[0].Address(), buffer, size); diff --git a/src/core/hle/kernel/process.cpp b/src/core/hle/kernel/process.cpp index 3694afc60..2cffec198 100644 --- a/src/core/hle/kernel/process.cpp +++ b/src/core/hle/kernel/process.cpp @@ -121,8 +121,9 @@ void Process::Run(VAddr entry_point, s32 main_thread_priority, u32 stack_size) {      // TODO(bunnei): This is heap area that should be allocated by the kernel and not mapped as part      // of the user address space.      vm_manager -        .MapMemoryBlock(Memory::STACK_VADDR, std::make_shared<std::vector<u8>>(stack_size, 0), 0, -                        stack_size, MemoryState::Mapped) +        .MapMemoryBlock(Memory::STACK_AREA_VADDR_END - stack_size, +                        std::make_shared<std::vector<u8>>(stack_size, 0), 0, stack_size, +                        MemoryState::Mapped)          .Unwrap();      misc_memory_used += stack_size;      memory_region->used += stack_size; diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index 145f50887..f3a8aa4aa 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -342,7 +342,7 @@ SharedPtr<Thread> SetupMainThread(VAddr entry_point, u32 priority,      // Initialize new "main" thread      auto thread_res = Thread::Create("main", entry_point, priority, 0, THREADPROCESSORID_0, -                                     Memory::STACK_VADDR_END, owner_process); +                                     Memory::STACK_AREA_VADDR_END, owner_process);      SharedPtr<Thread> thread = std::move(thread_res).Unwrap(); diff --git a/src/core/hle/service/filesystem/fsp_srv.cpp b/src/core/hle/service/filesystem/fsp_srv.cpp index 41b8cbfd2..89fa70ae6 100644 --- a/src/core/hle/service/filesystem/fsp_srv.cpp +++ b/src/core/hle/service/filesystem/fsp_srv.cpp @@ -72,8 +72,8 @@ public:      explicit IFile(std::unique_ptr<FileSys::StorageBackend>&& backend)          : ServiceFramework("IFile"), backend(std::move(backend)) {          static const FunctionInfo functions[] = { -            {0, &IFile::Read, "Read"}, {1, &IFile::Write, "Write"}, {2, nullptr, "Flush"}, -            {3, nullptr, "SetSize"},   {4, nullptr, "GetSize"}, +            {0, &IFile::Read, "Read"},       {1, &IFile::Write, "Write"},     {2, nullptr, "Flush"}, +            {3, &IFile::SetSize, "SetSize"}, {4, &IFile::GetSize, "GetSize"},          };          RegisterHandlers(functions);      } @@ -150,6 +150,25 @@ private:          IPC::ResponseBuilder rb{ctx, 2};          rb.Push(RESULT_SUCCESS);      } + +    void SetSize(Kernel::HLERequestContext& ctx) { +        IPC::RequestParser rp{ctx}; +        const u64 size = rp.Pop<u64>(); +        backend->SetSize(size); +        LOG_DEBUG(Service_FS, "called, size=%" PRIu64, size); + +        IPC::ResponseBuilder rb{ctx, 2}; +        rb.Push(RESULT_SUCCESS); +    } + +    void GetSize(Kernel::HLERequestContext& ctx) { +        const u64 size = backend->GetSize(); +        LOG_DEBUG(Service_FS, "called, size=%" PRIu64, size); + +        IPC::ResponseBuilder rb{ctx, 4}; +        rb.Push(RESULT_SUCCESS); +        rb.Push<u64>(size); +    }  };  class IDirectory final : public ServiceFramework<IDirectory> { diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index a0b8c6243..f1936991c 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp @@ -185,6 +185,7 @@ public:              {66, &Hid::StartSixAxisSensor, "StartSixAxisSensor"},              {79, &Hid::SetGyroscopeZeroDriftMode, "SetGyroscopeZeroDriftMode"},              {100, &Hid::SetSupportedNpadStyleSet, "SetSupportedNpadStyleSet"}, +            {101, &Hid::GetSupportedNpadStyleSet, "GetSupportedNpadStyleSet"},              {102, &Hid::SetSupportedNpadIdType, "SetSupportedNpadIdType"},              {103, &Hid::ActivateNpad, "ActivateNpad"},              {106, &Hid::AcquireNpadStyleSetUpdateEventHandle, @@ -265,6 +266,13 @@ private:          LOG_WARNING(Service_HID, "(STUBBED) called");      } +    void GetSupportedNpadStyleSet(Kernel::HLERequestContext& ctx) { +        IPC::ResponseBuilder rb{ctx, 3}; +        rb.Push(RESULT_SUCCESS); +        rb.Push<u32>(0); +        LOG_WARNING(Service_HID, "(STUBBED) called"); +    } +      void SetSupportedNpadIdType(Kernel::HLERequestContext& ctx) {          IPC::ResponseBuilder rb{ctx, 2};          rb.Push(RESULT_SUCCESS); | 
