mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-11-03 23:28:48 +00:00 
			
		
		
		
	Kernel: Convert SharedMemory to not use Handles
This commit is contained in:
		
							parent
							
								
									fc11aff955
								
							
						
					
					
						commit
						4bb33dfc30
					
				
					 8 changed files with 105 additions and 100 deletions
				
			
		| 
						 | 
				
			
			@ -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");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue