mirror of
https://github.com/LumaTeam/Luma3DS.git
synced 2026-02-22 09:54:38 +00:00
This commit adds all the changes made to the 3GX plugin loader fork of Luma3DS. The most important features are:
- Add 3GX plugin loader support. New service added to rosalina: plg:ldr
- Add svcControlProcess, svcControlMemoryUnsafe and improve svcMapProcessMemoryEx (breaking change)
- Allow applications to override certain configurations depending on their needs:
- Disable core2 thread redirection
- Disable game patching for the next app
- Force New 3DS speedup
- Force next application in a specific memory mode
- Block the opening of the Rosalina menu
- Add GDB commands to list all process handles and catch all SVC (latter is for IDA Pro as gdb client supports it)
- Other changes necessary for plugins to work properly. Please check changed files in this PR for more details.
---------
Co-authored-by: PabloMK7 <hackyglitch@gmail.com>
Co-authored-by: Nanquitas <nath.doidi@gmail.com>
Co-authored-by: TuxSH <1922548+TuxSH@users.noreply.github.com>
130 lines
2.9 KiB
C
130 lines
2.9 KiB
C
#pragma once
|
|
|
|
#include "types.h"
|
|
#include "kernel.h"
|
|
|
|
typedef struct
|
|
{
|
|
u32 bits1_0 : 2; ///< 0b00
|
|
} Desc_TranslationFault;
|
|
|
|
typedef struct
|
|
{
|
|
u32 bits1_0 : 2; ///< 0b01
|
|
u32 sbz : 3;
|
|
u32 domain : 4;
|
|
u32 p : 1;
|
|
u32 addr : 21;
|
|
} Desc_CoarsePageTable;
|
|
|
|
typedef struct
|
|
{
|
|
u32 bits1_0 : 2; ///< 0b10
|
|
u32 b : 1;
|
|
u32 c : 1;
|
|
u32 xn : 1;
|
|
u32 domain : 4;
|
|
u32 p : 1;
|
|
u32 ap : 2;
|
|
u32 tex : 3;
|
|
u32 apx : 1;
|
|
u32 s : 1;
|
|
u32 ng : 1;
|
|
u32 bit18 : 1; ///< 0
|
|
u32 sbz : 1;
|
|
u32 addr : 12;
|
|
} Desc_Section;
|
|
|
|
typedef struct
|
|
{
|
|
u32 bits1_0 : 2; ///< 0b10
|
|
u32 b : 1;
|
|
u32 c : 1;
|
|
u32 xn : 1;
|
|
u32 domain : 4;
|
|
u32 p : 1;
|
|
u32 ap : 2;
|
|
u32 tex : 3;
|
|
u32 sbz : 3;
|
|
u32 bit18 : 1; ///< 1
|
|
u32 sbz2 : 5;
|
|
u32 addr : 8;
|
|
} Desc_Supersection;
|
|
|
|
typedef struct
|
|
{
|
|
u32 bits1_0 : 2; ///< 0b11
|
|
} Desc_Reserved;
|
|
|
|
typedef struct
|
|
{
|
|
u32 bits1_0 : 2; ///< 0b01
|
|
u32 b : 1;
|
|
u32 c : 1;
|
|
u32 ap : 2;
|
|
u32 sbz : 3;
|
|
u32 apx : 1;
|
|
u32 s : 1;
|
|
u32 ng : 1;
|
|
u32 tex : 3;
|
|
u32 xn : 1;
|
|
u32 addr : 16;
|
|
} Desc_LargePage;
|
|
|
|
typedef struct
|
|
{
|
|
u32 xn : 1;
|
|
u32 bit1 : 1; ///< 1
|
|
u32 b : 1;
|
|
u32 c : 1;
|
|
u32 ap : 2;
|
|
u32 tex : 3;
|
|
u32 apx : 1;
|
|
u32 s : 1;
|
|
u32 ng : 1;
|
|
u32 addr : 20;
|
|
} Desc_SmallPage;
|
|
|
|
typedef union
|
|
{
|
|
u32 raw;
|
|
|
|
Desc_TranslationFault translationFault;
|
|
Desc_CoarsePageTable coarsePageTable;
|
|
Desc_Section section;
|
|
Desc_Supersection supersection;
|
|
Desc_Reserved reserved;
|
|
|
|
} L1Descriptor;
|
|
|
|
typedef union
|
|
{
|
|
u32 raw;
|
|
|
|
Desc_TranslationFault translationFault;
|
|
Desc_LargePage largePage;
|
|
Desc_SmallPage smallPage;
|
|
} L2Descriptor;
|
|
|
|
typedef enum
|
|
{
|
|
Descriptor_TranslationFault,
|
|
Descriptor_CoarsePageTable,
|
|
Descriptor_Section,
|
|
Descriptor_Supersection,
|
|
Descriptor_Reserved,
|
|
Descriptor_LargePage,
|
|
Descriptor_SmallPage
|
|
} DescType;
|
|
|
|
void L1MMUTable__RWXForAll(u32 *table);
|
|
void L2MMUTable__RWXForAll(u32 *table);
|
|
u32 L1MMUTable__GetPAFromVA(u32 *table, u32 va);
|
|
u32 L2MMUTable__GetPAFromVA(u32 *table, u32 va);
|
|
u32 L1MMUTable__GetAddressUserPerm(u32 *table, u32 va);
|
|
u32 L2MMUTable__GetAddressUserPerm(u32 *table, u32 va);
|
|
|
|
void KProcessHwInfo__SetMMUTableToRWX(KProcessHwInfo *hwInfo);
|
|
u32 KProcessHwInfo__GetPAFromVA(KProcessHwInfo *hwInfo, u32 va);
|
|
u32 KProcessHwInfo__GetAddressUserPerm(KProcessHwInfo *hwInfo, u32 va);
|