FIOS sits on top of filesystem and provides the following functionality:
- Schedule I/O requests - queue I/O operations, prioritize I/O operations, delayed (scheduled for specific time) async I/O operations, parallelized I/O operations.
- Overlays - remap I/O operations to different location. Good example is patches or localization.
- Caching - caching layer for I/O operations. I/O operations are split into chunks. Chunks can be cached in RAM. Performance can increase.
- Dearchiving - transparent filter for I/O operations that dearchives data. Good usage would be for psarc files.
Most of these functionalities are implemented in usermode in the fios2.suprx
module.
This kernel module is only used for overlays, so that the kernel, especially SceIofilemgr, is aware of FIOS2 remapping.
Module
Version |
World |
Privilege
|
1.69-3.60 |
Non-secure |
Kernel
|
Libraries
Known NIDs
Types
typedef int32_t SceFiosOverlayID;
typedef struct SceFiosOverlay {
uint8_t type;
uint8_t order;
uint16_t dst_len;
uint16_t src_len;
uint16_t unk2;
SceUID pid;
SceFiosOverlayID id;
char dst[292];
char src[292]; // src path replaces dst path based on type policy
} SceFiosOverlay;
SceFios2KernelForDriver
sceFiosKernelOverlayAddForDriver
Version |
NID
|
3.60 |
0x2607EE4C
|
derived from _sceFiosKernelOverlayAdd
sceFiosKernelOverlayAddForProcessForDriver
Version |
NID
|
3.60 |
0x17E65A1C
|
derived from _sceFiosKernelOverlayAddForProcess
int sceFiosKernelOverlayAddForProcessForDriver(SceUID pid, SceFiosOverlay *overlay, SceFiosOverlayID *outID);
sceFiosKernelOverlayGetInfoForDriver
Version |
NID
|
3.60 |
0x725E6817
|
derived from _sceFiosKernelOverlayGetInfo
sceFiosKernelOverlayGetInfoForProcessForDriver
Version |
NID
|
3.60 |
0xF1762BC2
|
derived from _sceFiosKernelOverlayGetInfoForProcess
int sceFiosKernelOverlayGetInfoForProcessForDriver(SceUID pid, SceFiosOverlayID id, SceFiosOverlay *overla);
sceFiosKernelOverlayGetListForDriver
Version |
NID
|
3.60 |
0xFF42AAF0
|
derived from _sceFiosKernelOverlayGetList
int sceFiosKernelOverlayGetListForDriver(SceUID pid, char loOrderFilter, char hiOrderFilter, SceFiosOverlayID *outIDs, size_t maxIDs, size_t *actualIDs);
sceFiosKernelOverlayGetRecommendedSchedulerForDriver
Version |
NID
|
3.60 |
0x241BF0D6
|
derived from _sceFiosKernelOverlayGetRecommendedScheduler
int sceFiosKernelOverlayGetRecommendedSchedulerForDriver(int some_index, char *path);
sceFiosKernelOverlayModifyForDriver
Version |
NID
|
3.60 |
0x7F8B960C
|
derived from _sceFiosKernelOverlayModify
sceFiosKernelOverlayModifyForProcessForDriver
Version |
NID
|
3.60 |
0x853EA82A
|
derived from _sceFiosKernelOverlayModifyForProcess
int sceFiosKernelOverlayModifyForProcessForDriver(SceUID pid, SceFiosOverlayID id, const SceFiosOverlay *newValue);
sceFiosKernelOverlayRemoveForDriver
Version |
NID
|
3.60 |
0x2368FEB5
|
derived from _sceFiosKernelOverlayRemove
sceFiosKernelOverlayRemoveForProcessForDriver
Version |
NID
|
3.60 |
0x23247EFB
|
derived from _sceFiosKernelOverlayRemoveForProcess
int sceFiosKernelOverlayRemoveForProcessForDriver(SceUID pid, SceFiosOverlayID id);
sceFiosKernelOverlayResolveSyncForDriver
Version |
NID
|
3.60 |
0x0F456345
|
derived from _sceFiosKernelOverlayResolveSync
int sceFiosKernelOverlayResolveSyncForDriver(SceUID pid, int resolveFlag, const char *inPath, char *outPath, size_t maxPath);
sceFiosKernelOverlayResolveWithRangeSyncForDriver
Version |
NID
|
3.60 |
0xD3D968FC
|
derived from _sceFiosKernelOverlayResolveWithRangeSync
int sceFiosKernelOverlayResolveWithRangeSyncForDriver(SceUID pid, int resolveFlag, const char *inPath, char *outPath, size_t maxPath, char loOrderFilter, char hiOrderFilter);
sceFiosKernelOverlayThreadIsDisabledForDriver
Version |
NID
|
3.60 |
0xE71192C5
|
derived from _sceFiosKernelOverlayThreadIsDisabled
int sceFiosKernelOverlayThreadIsDisabledForDriver();
sceFiosKernelOverlayThreadSetDisabledForDriver
Version |
NID
|
3.60 |
0x03727E5E
|
derived from _sceFiosKernelOverlayThreadSetDisabled
int sceFiosKernelOverlayThreadSetDisabledForDriver(int value);
SceFios2KernelForDriver_unk_2649408B
Version |
NID
|
3.60 |
0x2649408B
|
should map to one of six functions that return 0x80820000
used by SceIofilemgr
so probably can be derived
SceFios2KernelForDriver_unk_28E28A58
Version |
NID
|
3.60 |
0x28E28A58
|
should map to one of six functions that return 0x80820000
used by SceIofilemgr
so probably can be derived
SceFios2KernelForDriver_unk_35E7E75C
Version |
NID
|
3.60 |
0x35E7E75C
|
should map to one of six functions that return 0x80820000
used by SceIofilemgr
so probably can be derived
SceFios2KernelForDriver_unk_3B329E86
Version |
NID
|
3.60 |
0x3B329E86
|
should map to one of six functions that return 0x80820000
used by SceIofilemgr
so probably can be derived
SceFios2KernelForDriver_unk_990F46A5
Version |
NID
|
3.60 |
0x990F46A5
|
Sync fd with param.
should map to one of six functions that return 0x80820000
used by SceIofilemgr
so probably can be derived
SceFios2KernelForDriver_unk_DD7627EC
Version |
NID
|
3.60 |
0xDD7627EC
|
Close dir fd and free param memory.
should map to one of six functions that return 0x80820000
used by SceIofilemgr
so probably can be derived
SceFios2Kernel02
sceFiosKernelOverlayAddForProcess02
Version |
NID
|
3.60 |
0xB77C366D
|
derived from _sceFiosKernelOverlayAddForProcess
int sceFiosKernelOverlayAddForProcess02(SceUID pid, SceFiosOverlay *overlay, SceFiosOverlayID *outID);
sceFiosKernelOverlayGetInfoForProcess02
Version |
NID
|
3.60 |
0x111DCCFA
|
derived from _sceFiosKernelOverlayGetInfoForProcess
int sceFiosKernelOverlayGetInfoForProcess02(SceUID pid, SceFiosOverlayID id, SceFiosOverlay *overlay);
sceFiosKernelOverlayGetList02
Version |
NID
|
3.60 |
0xD90FC293
|
derived from _sceFiosKernelOverlayGetList
typedef struct sceFiosKernelOverlayGetList02_opt { // size is 0x18
SceFiosOverlayID *outIDs;
size_t maxIDs;
size_t *actualIDs;
int buffer_size;
int reserved1;
int reserved2;
} sceFiosKernelOverlayGetList02_opt;
int sceFiosKernelOverlayGetList02(SceUID pid, char loOrderFilter, char hiOrderFilter, sceFiosKernelOverlayGetList02_opt *opt);
sceFiosKernelOverlayGetRecommendedScheduler02
Version |
NID
|
3.60 |
0x26B9D08A
|
derived from _sceFiosKernelOverlayGetRecommendedScheduler
typedef struct sceFiosKernelOverlayGetRecommendedScheduler02_opt { // size is 8
int reserved1;
int reserved2;
} sceFiosKernelOverlayGetRecommendedScheduler02_opt;
int sceFiosKernelOverlayGetRecommendedScheduler02(int some_index, char *path, sceFiosKernelOverlayGetRecommendedScheduler02_opt *opt);
sceFiosKernelOverlayModifyForProcess02
Version |
NID
|
3.60 |
0x6A976528
|
derived from _sceFiosKernelOverlayModifyForProcess
int sceFiosKernelOverlayModifyForProcess02(SceUID pid, SceFiosOverlayID id, const SceFiosOverlay *newValue);
sceFiosKernelOverlayRemoveForProcess02
Version |
NID
|
3.60 |
0x50A7167C
|
derived from _sceFiosKernelOverlayRemoveForProcess
int sceFiosKernelOverlayRemoveForProcess02(SceUID pid, SceFiosOverlayID id);
sceFiosKernelOverlayResolveSync02
Version |
NID
|
3.60 |
0xD76F046A
|
derived from _sceFiosKernelOverlayResolveSync
typedef struct sceFiosKernelOverlayResolveSync02_opt { // size is 0x18
char *outPath;
size_t maxPath;
int reserved1;
int reserved2;
int reserved3;
int reserved4;
} sceFiosKernelOverlayResolveSync02_opt;
int sceFiosKernelOverlayResolveSync02(SceUID pid, int resolveFlag, const char *inPath, sceFiosKernelOverlayResolveSync02_opt *opt);
sceFiosKernelOverlayResolveWithRangeSync02
Version |
NID
|
3.60 |
0x8DAD1FED
|
derived from _sceFiosKernelOverlayResolveWithRangeSync
typedef struct sceFiosKernelOverlayResolveWithRangeSync02_opt { // size is 0x1C
char *outPath;
size_t maxPath;
char loOrderFilter;
char hiOrderFilter;
char reserved1;
char reserved2;
int reserved3;
int reserved4;
int reserved5;
int reserved6;
} sceFiosKernelOverlayResolveWithRangeSync02_opt;
int sceFiosKernelOverlayResolveWithRangeSync02(SceUID pid, int resolveFlag, const char *inPath, sceFiosKernelOverlayResolveWithRangeSync02_opt *opt);
sceFiosKernelOverlayThreadIsDisabled02
Version |
NID
|
3.60 |
0xD6A4FDD6
|
derived from _sceFiosKernelOverlayThreadIsDisabled
int sceFiosKernelOverlayThreadIsDisabled02(void);
sceFiosKernelOverlayThreadSetDisabled02
Version |
NID
|
3.60 |
0x7F26D4DD
|
derived from _sceFiosKernelOverlayThreadSetDisabled
int sceFiosKernelOverlayThreadSetDisabled02(int value);
SceFios2Kernel
_sceFiosKernelOverlayAddForProcess
Version |
NID
|
1.69-3.60 |
0x2A381357
|
_sceFiosKernelOverlayAdd
Version |
NID
|
1.69-3.60 |
0x6DBCF0B2
|
_sceFiosKernelOverlayDHChstatSync
Version |
NID
|
1.69-3.60 |
0xF6A3E335
|
returns 0x80820000
? is it not callable from userspace?
_sceFiosKernelOverlayDHCloseSync
Version |
NID
|
1.69-3.60 |
0x021B4AF7
|
returns 0x80820000
? is it not callable from userspace?
_sceFiosKernelOverlayDHOpenSync
Version |
NID
|
1.69-3.60 |
0x5D6A1CCE
|
returns 0x80820000
? is it not callable from userspace?
_sceFiosKernelOverlayDHReadSync
Version |
NID
|
1.69-3.60 |
0x2F06ADC6
|
returns 0x80820000
? is it not callable from userspace?
_sceFiosKernelOverlayDHStatSync
Version |
NID
|
1.69-3.60 |
0x759EBEE6
|
returns 0x80820000
? is it not callable from userspace?
_sceFiosKernelOverlayDHSyncSync
Version |
NID
|
1.69-3.60 |
0x2A9724C9
|
returns 0x80820000
? is it not callable from userspace?
_sceFiosKernelOverlayGetInfoForProcess
Version |
NID
|
1.69-3.60 |
0xBC6B3CC5
|
_sceFiosKernelOverlayGetInfo
Version |
NID
|
1.69-3.60 |
0xF44F3505
|
_sceFiosKernelOverlayGetList
Version |
NID
|
1.69-3.60 |
0x9379E2D5
|
_sceFiosKernelOverlayGetRecommendedScheduler
Version |
NID
|
1.69-3.60 |
0xB02E0B26
|
_sceFiosKernelOverlayModifyForProcess
Version |
NID
|
1.69-3.60 |
0x6DF2FC05
|
_sceFiosKernelOverlayModify
Version |
NID
|
1.69-3.60 |
0x6D6CDE05
|
_sceFiosKernelOverlayRemoveForProcess
Version |
NID
|
1.69-3.60 |
0xF8277E07
|
_sceFiosKernelOverlayRemove
Version |
NID
|
1.69-3.60 |
0xB4927173
|
_sceFiosKernelOverlayResolveSync
Version |
NID
|
1.69-3.60 |
0xE9AE60FB
|
_sceFiosKernelOverlayResolveWithRangeSync
Version |
NID
|
1.69-3.60 |
0x8CCA471A
|
_sceFiosKernelOverlayThreadIsDisabled
Version |
NID
|
1.69-3.60 |
0x629F4FE4
|
_sceFiosKernelOverlayThreadSetDisabled
Version |
NID
|
1.69-3.60 |
0x3E9172EA
|