* Memory: Rework FCRAM management entirely Disables a lot of functionality... but I didn't want to commit too much to this commit Also reworks virtual memory management somewhat (but needs more work) * Accurately handle MemoryState for virtual memory Previously all non-free blocks were marked as Reserved * Memory: Consolidate state and permission changes Can now use a single function to change either state, permissions, or both Also merge vmem blocks that have the same state and permissions * Memory: Fix double reset for FCRAM manager Fix minor bug with permission tracking * Memory: Implement Protect operation in ControlMemory * Memory: Implement Unmap in ControlMemory Also do a sanity check to make sure the memory region is free for linear allocations * Memory: Make TLS only 0x200 bytes for each thread Also move TLS to Base region * RO: Unmap CROs when unloaded Thanks @noumidev * Kernel: Return used app memory for Commit ResourceLimit Not quite correct, but nothing to be done until process management is improved Also remove the stack limit for CXIs (thanks amogus) * Kernel: Report used app memory for GetProcessInfo 2 Not really correct, but it should be accurate for applications at least * Formatting changes * Initial fastmem support * PCSX2 fastmem depression * Move away from PCSX2 fastmem * Add enum_flag_ops.hpp * Finally building on Windows * Almost got a PoC * Fix arm64 builds * This somehow works * This also works... * Properly fix fastmem * Add free region manager * Update boost * Add ScopeExit * Comment out asserts on Linux/Mac/Android * Comment out ASSERT_MSG asserts too * Fix derp * Attempt to fix Android * Disable fastmem on Android * Fix Android again maybe pt 2 * android pls * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA * Update host_memory.cpp * Properly reset memory arena on reset * Proper ashmem code for Android * more * Add temporary Android buildjet script for faster prototype builds * Fix fastmem (again) * Clean up shared memory * Remove Android BuildJet runner * a * Revert "a" This reverts commit 5443ad6f2a794c19c9b1a1567ca1c7f58eed78cd. * Re-add ELF support * Re-add 3DSX support * GetSystemInfo, GetProcessInfo: Memory sizes should be in bytes * Update Boost * Update metal-cpp * Fix metal renderer compilation * Fix fastmem mapping * Clean up fastmem code * Fix oopsie again * Emulator: Reorder struct * Kernel types: Cleanup * Cleanup * More cleanup * Make invalid mprotects warn instead of panicking * Add setting for toggling fastmem * More cleanup * Properly initialize BSS to zeroes * Remove unused code * Formatting * Cleanup * Memory/CRO: Workaround for Pokemon XY * NCSD loader: Fix BSS (again) * NCSD loader: Fix BSS (again) (again) * More memory fixes * Memory: Remove unused code * FS: Warn on unimplemented functions instead of panic * Update software_keyboard.cpp * Libretro: Add fastmem option * FRD: Stub SaveLocalAccountData --------- Co-authored-by: PSI-Rockin <PSI-Rockin@users.noreply.github.com>
68 lines
1.7 KiB
C++
68 lines
1.7 KiB
C++
#pragma once
|
|
#include <cassert>
|
|
|
|
#include "helpers.hpp"
|
|
#include "kernel_types.hpp"
|
|
#include "logger.hpp"
|
|
#include "memory.hpp"
|
|
#include "result/result.hpp"
|
|
|
|
// It's important to keep this struct to 16 bytes as we use its sizeof in the service functions in frd.cpp
|
|
struct FriendKey {
|
|
u32 friendID;
|
|
u32 dummy;
|
|
u64 friendCode;
|
|
};
|
|
static_assert(sizeof(FriendKey) == 16);
|
|
|
|
class FRDService {
|
|
using Handle = HorizonHandle;
|
|
|
|
Memory& mem;
|
|
MAKE_LOG_FUNCTION(log, frdLogger)
|
|
|
|
bool loggedIn = false;
|
|
|
|
// Service commands
|
|
void attachToEventNotification(u32 messagePointer);
|
|
void getFriendAttributeFlags(u32 messagePointer);
|
|
void getFriendKeyList(u32 messagePointer);
|
|
void getFriendPresence(u32 messagePointer);
|
|
void getFriendProfile(u32 messagePointer);
|
|
void getFriendRelationship(u32 messagePointer);
|
|
void getMyComment(u32 messagePointer);
|
|
void getMyFavoriteGame(u32 messagePointer);
|
|
void getMyFriendKey(u32 messagePointer);
|
|
void getMyMii(u32 messagePointer);
|
|
void getMyPresence(u32 messagePointer);
|
|
void getMyProfile(u32 messagePointer);
|
|
void getMyScreenName(u32 messsagePointer);
|
|
void hasLoggedIn(u32 messagePointer);
|
|
void isOnline(u32 messagePointer);
|
|
void logout(u32 messagePointer);
|
|
void saveLocalAccountData(u32 messagePointer);
|
|
void setClientSDKVersion(u32 messagePointer);
|
|
void setNotificationMask(u32 messagePointer);
|
|
void updateGameModeDescription(u32 messagePointer);
|
|
void updateMii(u32 messagePointer);
|
|
|
|
struct Profile {
|
|
u8 region;
|
|
u8 country;
|
|
u8 area;
|
|
u8 language;
|
|
u32 unknown;
|
|
};
|
|
static_assert(sizeof(Profile) == 8);
|
|
|
|
public:
|
|
enum class Type {
|
|
A, // frd:a
|
|
N, // frd:n
|
|
U, // frd:u
|
|
};
|
|
|
|
FRDService(Memory& mem) : mem(mem) {}
|
|
void reset();
|
|
void handleSyncRequest(u32 messagePointer, Type type);
|
|
}; |