Kernel: Convert SharedMemory to not use Handles

This commit is contained in:
Yuri Kunde Schlesner 2015-01-11 03:43:29 -02:00
parent fc11aff955
commit 4bb33dfc30
8 changed files with 105 additions and 100 deletions

View file

@ -12,7 +12,7 @@
namespace Service {
namespace HID {
Handle g_shared_mem = 0;
Kernel::SharedPtr<Kernel::SharedMemory> g_shared_mem = nullptr;
Handle g_event_pad_or_touch_1 = 0;
Handle g_event_pad_or_touch_2 = 0;
@ -30,7 +30,7 @@ static s16 next_circle_y = 0;
* Gets a pointer to the PadData structure inside HID shared memory
*/
static inline PadData* GetPadData() {
return reinterpret_cast<PadData*>(Kernel::GetSharedMemoryPointer(g_shared_mem, 0).ValueOr(nullptr));
return reinterpret_cast<PadData*>(g_shared_mem->GetPointer().ValueOr(nullptr));
}
/**
@ -120,7 +120,7 @@ void PadUpdateComplete() {
}
void HIDInit() {
g_shared_mem = Kernel::CreateSharedMemory("HID:SharedMem"); // Create shared memory object
g_shared_mem = Kernel::SharedMemory::Create("HID:SharedMem").MoveFrom();
// Create event handles
g_event_pad_or_touch_1 = Kernel::CreateEvent(RESETTYPE_ONESHOT, "HID:EventPadOrTouch1");

View file

@ -9,11 +9,15 @@
#include "core/hle/kernel/kernel.h"
#include "common/bit_field.h"
namespace Kernel {
class SharedMemory;
}
namespace Service {
namespace HID {
// Handle to shared memory region designated to HID_User service
extern Handle g_shared_mem;
extern Kernel::SharedPtr<Kernel::SharedMemory> g_shared_mem;
// Event handles
extern Handle g_event_pad_or_touch_1;

View file

@ -5,6 +5,7 @@
#include "common/log.h"
#include "core/hle/hle.h"
#include "core/hle/kernel/shared_memory.h"
#include "core/hle/service/hid/hid.h"
#include "hid_user.h"
@ -46,7 +47,8 @@ void GetIPCHandles(Service::Interface* self) {
u32* cmd_buff = Kernel::GetCommandBuffer();
cmd_buff[1] = 0; // No error
cmd_buff[3] = Service::HID::g_shared_mem;
// TODO(yuriks): Return error from SendSyncRequest is this fails (part of IPC marshalling)
cmd_buff[3] = Kernel::g_handle_table.Create(Service::HID::g_shared_mem).MoveFrom();
cmd_buff[4] = Service::HID::g_event_pad_or_touch_1;
cmd_buff[5] = Service::HID::g_event_pad_or_touch_2;
cmd_buff[6] = Service::HID::g_event_accelerometer;