SceFios2Kernel: Difference between revisions

From Vita Development Wiki
Jump to navigation Jump to search
No edit summary
 
(59 intermediate revisions by 4 users not shown)
Line 1: Line 1:
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 <code>fios2.suprx</code> module.
This kernel module is only used for overlays, so that the kernel, especially [[SceIofilemgr]], is aware of FIOS2 remapping.
== Module ==
== Module ==


=== Known NIDs ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! Name !! World !! Privilege !! NID
! Version !! World !! Privilege
|-
| 1.69 || SceFios2Kernel || Non-secure || Kernel || 0x26E15F8F
|-
|-
| 3.60 || SceFios2Kernel || ? || Kernel || 0x10ECF2D0
| 1.69-3.60 || Non-secure || Kernel
|}
|}


Line 19: Line 27:
! Version !! Name !! World !! Visibility !! NID
! Version !! Name !! World !! Visibility !! NID
|-
|-
| 1.69 || [[SceFios2Kernel#SceFios2KernelForDriver|SceFios2KernelForDriver]] || Non-secure || Kernel || 0x54D6B9EB
| 1.69-3.60 || [[SceFios2Kernel#SceFios2KernelForDriver|SceFios2KernelForDriver]] || Non-secure || Kernel || 0x54D6B9EB
|-
| 3.60 || [[SceFios2Kernel#SceFios2KernelForDriver|SceFios2KernelForDriver]] || ? || Kernel || 0x54D6B9EB
|-
|-
| 1.69 || [[SceFios2Kernel#SceFios2Kernel|SceFios2Kernel]] || Non-secure || User || 0x8757B742
| 1.69-3.60 || [[SceFios2Kernel#SceFios2Kernel|SceFios2Kernel]] || Non-secure || User || 0x8757B742
|-
|-
| 3.60 || [[SceFios2Kernel#SceFios2Kernel|SceFios2Kernel]] || ? || User || 0x8757B742
| 3.60 || [[SceFios2Kernel#SceFios2Kernel02|SceFios2Kernel02]] || Non-secure || ? || 0xE83E40A6
|-
| 3.60 || [[SceFios2Kernel#SceFios2Kernel02|SceFios2Kernel02]] || ? || ? || 0xE83E40A6
|}
|}
== Types ==
<source lang="C">
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;
</source>


== SceFios2KernelForDriver ==
== SceFios2KernelForDriver ==


=== sceFiosKernelOverlayAddForProcessForDriver ===
=== sceFiosKernelOverlayAddForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x17E65A1C
| 3.60 || 0x2607EE4C
|}
|}


derived from <code>_sceFiosKernelOverlayAddForProcess </code>
derived from <code>_sceFiosKernelOverlayAdd</code>


=== sceFiosKernelOverlayThreadSetDisabledForDriver ===
=== sceFiosKernelOverlayAddForProcessForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x03727E5E
| 3.60 || 0x17E65A1C
|}
|}


derived from <code>_sceFiosKernelOverlayThreadSetDisabled </code>
derived from <code>_sceFiosKernelOverlayAddForProcess</code>
 
<source lang="c">
int sceFiosKernelOverlayAddForProcessForDriver(SceUID pid, SceFiosOverlay *overlay, SceFiosOverlayID *outID);
</source>


=== sceFiosKernelOverlayThreadIsDisabledForDriver ===
=== sceFiosKernelOverlayGetInfoForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xE71192C5
| 3.60 || 0x725E6817
|}
|}


derived from <code>_sceFiosKernelOverlayThreadIsDisabled </code>
derived from <code>_sceFiosKernelOverlayGetInfo</code>


=== sceFiosKernelOverlayModifyForDriver ===
=== sceFiosKernelOverlayGetInfoForProcessForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x7F8B960C
| 3.60 || 0xF1762BC2
|}
|}


derived from <code>_sceFiosKernelOverlayModify </code>
derived from <code>_sceFiosKernelOverlayGetInfoForProcess</code>


=== sceFiosKernelOverlayAddForDriver ===
<source lang="c">
int sceFiosKernelOverlayGetInfoForProcessForDriver(SceUID pid, SceFiosOverlayID id, SceFiosOverlay *overla);
</source>
 
=== sceFiosKernelOverlayGetListForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x2607EE4C
| 3.60 || 0xFF42AAF0
|}
|}


derived from <code>_sceFiosKernelOverlayAdd </code>
derived from <code>_sceFiosKernelOverlayGetList</code>
 
<source lang="c">
int sceFiosKernelOverlayGetListForDriver(SceUID pid, char loOrderFilter, char hiOrderFilter, SceFiosOverlayID *outIDs, size_t maxIDs, size_t *actualIDs);
</source>


=== sceFiosKernelOverlayModifyForProcessForDriver ===
=== sceFiosKernelOverlayGetRecommendedSchedulerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x853EA82A
| 3.60 || 0x241BF0D6
|}
|}


derived from <code>_sceFiosKernelOverlayModifyForProcess </code>
derived from <code>_sceFiosKernelOverlayGetRecommendedScheduler</code>


=== sceFiosKernelOverlayResolveWithRangeSyncForDriver ===
<source lang="c">
int sceFiosKernelOverlayGetRecommendedSchedulerForDriver(int some_index, char *path);
</source>
 
=== sceFiosKernelOverlayModifyForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xD3D968FC
| 3.60 || 0x7F8B960C
|}
|}


derived from <code>_sceFiosKernelOverlayResolveWithRangeSync </code>
derived from <code>_sceFiosKernelOverlayModify</code>


=== sceFiosKernelOverlayGetListForDriver ===
=== sceFiosKernelOverlayModifyForProcessForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xFF42AAF0
| 3.60 || 0x853EA82A
|}
|}


derived from <code>_sceFiosKernelOverlayGetList </code>
derived from <code>_sceFiosKernelOverlayModifyForProcess</code>
 
<source lang="c">
int sceFiosKernelOverlayModifyForProcessForDriver(SceUID pid, SceFiosOverlayID id, const SceFiosOverlay *newValue);
</source>


=== sceFiosKernelOverlayGetRecommendedSchedulerForDriver ===
=== sceFiosKernelOverlayRemoveForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x241BF0D6
| 3.60 || 0x2368FEB5
|}
|}


derived from <code>_sceFiosKernelOverlayGetRecommendedScheduler </code>
derived from <code>_sceFiosKernelOverlayRemove</code>


=== sceFiosKernelOverlayRemoveForDriver ===
=== sceFiosKernelOverlayRemoveForProcessForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x2368FEB5
| 3.60 || 0x23247EFB
|}
|}


derived from <code>_sceFiosKernelOverlayRemove </code>
derived from <code>_sceFiosKernelOverlayRemoveForProcess</code>


=== sceFiosKernelOverlayGetInfoForProcessForDriver ===
<source lang="c">
int sceFiosKernelOverlayRemoveForProcessForDriver(SceUID pid, SceFiosOverlayID id);
</source>
 
=== sceFiosKernelOverlayResolveSyncForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xF1762BC2
| 3.60 || 0x0F456345
|}
|}


derived from <code>_sceFiosKernelOverlayGetInfoForProcess </code>
derived from <code>_sceFiosKernelOverlayResolveSync</code>
 
<source lang="c">
int sceFiosKernelOverlayResolveSyncForDriver(SceUID pid, int resolveFlag, const char *inPath, char *outPath, size_t maxPath);
</source>


=== sceFiosKernelOverlayResolveSyncForDriver ===
=== sceFiosKernelOverlayResolveWithRangeSyncForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x0F456345
| 3.60 || 0xD3D968FC
|}
|}


derived from <code>_sceFiosKernelOverlayResolveSync </code>
derived from <code>_sceFiosKernelOverlayResolveWithRangeSync</code>
 
<source lang="c">
int sceFiosKernelOverlayResolveWithRangeSyncForDriver(SceUID pid, int resolveFlag, const char *inPath, char *outPath, size_t maxPath, char loOrderFilter, char hiOrderFilter);
</source>


=== sceFiosKernelOverlayGetInfoForDriver ===
=== sceFiosKernelOverlayThreadIsDisabledForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x725E6817
| 3.60 || 0xE71192C5
|}
|}


derived from <code>_sceFiosKernelOverlayGetInfo </code>
derived from <code>_sceFiosKernelOverlayThreadIsDisabled</code>


=== sceFiosKernelOverlayRemoveForProcessForDriver ===
<source lang="c">
int sceFiosKernelOverlayThreadIsDisabledForDriver();
</source>
 
=== sceFiosKernelOverlayThreadSetDisabledForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x23247EFB
| 3.60 || 0x03727E5E
|}
|}


derived from <code>_sceFiosKernelOverlayRemoveForProcess </code>
derived from <code>_sceFiosKernelOverlayThreadSetDisabled</code>
 
<source lang="c">
int sceFiosKernelOverlayThreadSetDisabledForDriver(int value);
</source>


=== unk_2649408B ===
=== SceFios2KernelForDriver_unk_2649408B ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 180: Line 242:
|}
|}


=== unk_28E28A58 ===
should map to one of six functions that return <code>0x80820000</code>
 
used by <code>SceIofilemgr</code> so probably can be derived
 
=== SceFios2KernelForDriver_unk_28E28A58 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 188: Line 254:
|}
|}


=== unk_35E7E75C ===
should map to one of six functions that return <code>0x80820000</code>
 
used by <code>SceIofilemgr</code> so probably can be derived
 
=== SceFios2KernelForDriver_unk_35E7E75C ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 196: Line 266:
|}
|}


=== unk_3B329E86 ===
should map to one of six functions that return <code>0x80820000</code>
 
used by <code>SceIofilemgr</code> so probably can be derived
 
=== SceFios2KernelForDriver_unk_3B329E86 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 204: Line 278:
|}
|}


=== unk_990F46A5 ===
should map to one of six functions that return <code>0x80820000</code>
 
used by <code>SceIofilemgr</code> so probably can be derived
 
=== SceFios2KernelForDriver_unk_990F46A5 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 212: Line 290:
|}
|}


=== unk_DD7627EC ===
Sync fd with param.
 
should map to one of six functions that return <code>0x80820000</code>
 
used by <code>SceIofilemgr</code> so probably can be derived
 
=== SceFios2KernelForDriver_unk_DD7627EC ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 219: Line 303:
| 3.60 || 0xDD7627EC
| 3.60 || 0xDD7627EC
|}
|}
Close dir fd and free param memory.
should map to one of six functions that return <code>0x80820000</code>
used by <code>SceIofilemgr</code> so probably can be derived


== SceFios2Kernel02 ==
== SceFios2Kernel02 ==


== SceFios2Kernel ==
=== sceFiosKernelOverlayAddForProcess02 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xB77C366D
|}
 
derived from <code> _sceFiosKernelOverlayAddForProcess</code>
 
<source lang="C">
int sceFiosKernelOverlayAddForProcess02(SceUID pid, SceFiosOverlay *overlay, SceFiosOverlayID *outID);
</source>
 
=== sceFiosKernelOverlayGetInfoForProcess02 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x111DCCFA
|}
 
derived from <code> _sceFiosKernelOverlayGetInfoForProcess</code>
 
<source lang="C">
int sceFiosKernelOverlayGetInfoForProcess02(SceUID pid, SceFiosOverlayID id, SceFiosOverlay *overlay);
</source>
 
=== sceFiosKernelOverlayGetList02 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xD90FC293
|}
 
derived from <code> _sceFiosKernelOverlayGetList</code>
 
<source lang="C">
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);
</source>


=== _sceFiosKernelOverlayDHCloseSync ===
=== sceFiosKernelOverlayGetRecommendedScheduler02 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x21B4AF7
| 3.60 || 0x26B9D08A
|}
|}


returns <code>0x80820000</code> ? is it not callable from userspace?
derived from <code> _sceFiosKernelOverlayGetRecommendedScheduler</code>
 
<source lang="C">
typedef struct sceFiosKernelOverlayGetRecommendedScheduler02_opt { // size is 8
  int reserved1;
  int reserved2;
} sceFiosKernelOverlayGetRecommendedScheduler02_opt;
 
int sceFiosKernelOverlayGetRecommendedScheduler02(int some_index, char *path, sceFiosKernelOverlayGetRecommendedScheduler02_opt *opt);
</source>


=== _sceFiosKernelOverlayAddForProcess ===
=== sceFiosKernelOverlayModifyForProcess02 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x2A381357
| 3.60 || 0x6A976528
|}
|}
=== _sceFiosKernelOverlayDHSyncSync ===
 
derived from <code> _sceFiosKernelOverlayModifyForProcess</code>
 
<source lang="C">
int sceFiosKernelOverlayModifyForProcess02(SceUID pid, SceFiosOverlayID id, const SceFiosOverlay *newValue);
</source>
 
=== sceFiosKernelOverlayRemoveForProcess02 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x2A9724C9
| 3.60 || 0x50A7167C
|}
|}
=== _sceFiosKernelOverlayDHReadSync ===
 
derived from <code> _sceFiosKernelOverlayRemoveForProcess</code>
 
<source lang="C">
int sceFiosKernelOverlayRemoveForProcess02(SceUID pid, SceFiosOverlayID id);
</source>
 
=== sceFiosKernelOverlayResolveSync02 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x2F06ADC6
| 3.60 || 0xD76F046A
|}
|}
=== _sceFiosKernelOverlayThreadSetDisabled ===
 
derived from <code> _sceFiosKernelOverlayResolveSync</code>
 
<source lang="C">
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);
</source>
 
=== sceFiosKernelOverlayResolveWithRangeSync02 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x3E9172EA
| 3.60 || 0x8DAD1FED
|}
|}
=== _sceFiosKernelOverlayDHOpenSync ===
 
derived from <code> _sceFiosKernelOverlayResolveWithRangeSync</code>
 
<source lang="C">
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);
</source>
 
=== sceFiosKernelOverlayThreadIsDisabled02 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x5D6A1CCE
| 3.60 || 0xD6A4FDD6
|}
|}
=== _sceFiosKernelOverlayThreadIsDisabled ===
 
derived from <code> _sceFiosKernelOverlayThreadIsDisabled</code>
 
<source lang="C">
int sceFiosKernelOverlayThreadIsDisabled02(void);
</source>
 
=== sceFiosKernelOverlayThreadSetDisabled02 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x629F4FE4
| 3.60 || 0x7F26D4DD
|}
|}
=== _sceFiosKernelOverlayModify ===
 
derived from <code> _sceFiosKernelOverlayThreadSetDisabled</code>
 
<source lang="C">
int sceFiosKernelOverlayThreadSetDisabled02(int value);
</source>
 
== SceFios2Kernel ==
 
=== _sceFiosKernelOverlayAddForProcess ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x6D6CDE05
| 1.69-3.60 || 0x2A381357
|}
|}
=== _sceFiosKernelOverlayAdd ===
=== _sceFiosKernelOverlayAdd ===
{| class="wikitable"
{| class="wikitable"
Line 288: Line 503:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x6DBCF0B2
| 1.69-3.60 || 0x6DBCF0B2
|}
 
=== _sceFiosKernelOverlayDHChstatSync ===
{| class="wikitable"
|-
! Version !! NID
|-
| 1.69-3.60 || 0xF6A3E335
|}
 
returns <code>0x80820000</code> ? is it not callable from userspace?
 
=== _sceFiosKernelOverlayDHCloseSync ===
{| class="wikitable"
|-
! Version !! NID
|-
| 1.69-3.60 || 0x021B4AF7
|}
|}
=== _sceFiosKernelOverlayModifyForProcess ===
 
returns <code>0x80820000</code> ? is it not callable from userspace?
 
=== _sceFiosKernelOverlayDHOpenSync ===
{| class="wikitable"
|-
! Version !! NID
|-
| 1.69-3.60 || 0x5D6A1CCE
|}
 
returns <code>0x80820000</code> ? is it not callable from userspace?
 
=== _sceFiosKernelOverlayDHReadSync ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x6DF2FC05
| 1.69-3.60 || 0x2F06ADC6
|}
|}
returns <code>0x80820000</code> ? is it not callable from userspace?
=== _sceFiosKernelOverlayDHStatSync ===
=== _sceFiosKernelOverlayDHStatSync ===
{| class="wikitable"
{| class="wikitable"
Line 302: Line 551:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x759EBEE6
| 1.69-3.60 || 0x759EBEE6
|}
 
returns <code>0x80820000</code> ? is it not callable from userspace?
 
=== _sceFiosKernelOverlayDHSyncSync ===
{| class="wikitable"
|-
! Version !! NID
|-
| 1.69-3.60 || 0x2A9724C9
|}
 
returns <code>0x80820000</code> ? is it not callable from userspace?
 
=== _sceFiosKernelOverlayGetInfoForProcess ===
{| class="wikitable"
|-
! Version !! NID
|-
| 1.69-3.60 || 0xBC6B3CC5
|}
|}
=== _sceFiosKernelOverlayResolveWithRangeSync ===
 
=== _sceFiosKernelOverlayGetInfo ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x8CCA471A
| 1.69-3.60 || 0xF44F3505
|}
|}
=== _sceFiosKernelOverlayGetList ===
=== _sceFiosKernelOverlayGetList ===
{| class="wikitable"
{| class="wikitable"
Line 316: Line 587:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x9379E2D5
| 1.69-3.60 || 0x9379E2D5
|}
|}
=== _sceFiosKernelOverlayGetRecommendedScheduler ===
=== _sceFiosKernelOverlayGetRecommendedScheduler ===
{| class="wikitable"
{| class="wikitable"
Line 323: Line 595:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0xB02E0B26
| 1.69-3.60 || 0xB02E0B26
|}
 
=== _sceFiosKernelOverlayModifyForProcess ===
{| class="wikitable"
|-
! Version !! NID
|-
| 1.69-3.60 || 0x6DF2FC05
|}
|}
=== _sceFiosKernelOverlayRemove ===
 
=== _sceFiosKernelOverlayModify ===
{| class="wikitable"
|-
! Version !! NID
|-
| 1.69-3.60 || 0x6D6CDE05
|}
 
=== _sceFiosKernelOverlayRemoveForProcess ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0xB4927173
| 1.69-3.60 || 0xF8277E07
|}
|}
=== _sceFiosKernelOverlayGetInfoForProcess ===
 
=== _sceFiosKernelOverlayRemove ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0xBC6B3CC5
| 1.69-3.60 || 0xB4927173
|}
|}
=== _sceFiosKernelOverlayResolveSync ===
=== _sceFiosKernelOverlayResolveSync ===
{| class="wikitable"
{| class="wikitable"
Line 344: Line 635:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0xE9AE60FB
| 1.69-3.60 || 0xE9AE60FB
|}
|}
=== _sceFiosKernelOverlayGetInfo ===
 
=== _sceFiosKernelOverlayResolveWithRangeSync ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0xF44F3505
| 1.69-3.60 || 0x8CCA471A
|}
|}
=== _sceFiosKernelOverlayDHChstatSync ===
 
=== _sceFiosKernelOverlayThreadIsDisabled ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0xF6A3E335
| 1.69-3.60 || 0x629F4FE4
|}
|}
=== _sceFiosKernelOverlayRemoveForProcess ===
 
=== _sceFiosKernelOverlayThreadSetDisabled ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0xF8277E07
| 1.69-3.60 || 0x3E9172EA
|}
|}
[[Category:ARM]]
[[Category:Kernel]]
[[Category:Modules]]
[[Category:Modules]]
[[Category:Kernel]]
[[Category:Library]]

Latest revision as of 08:59, 25 May 2023

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

Version Name World Visibility NID
1.69-3.60 SceFios2KernelForDriver Non-secure Kernel 0x54D6B9EB
1.69-3.60 SceFios2Kernel Non-secure User 0x8757B742
3.60 SceFios2Kernel02 Non-secure ? 0xE83E40A6

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