SceIofilemgr: Difference between revisions
(→vfsBuffCacheCtlForDriver: Add parameter names from 0.990 iofilemgr) |
|||
(121 intermediate revisions by 4 users not shown) | |||
Line 2: | Line 2: | ||
== Module == | == Module == | ||
This module exists only in non-secure world. The SELF can be found in <code>os0:kd/iofilemgr.skprx</code>. | This module exists only in non-secure world. The SELF can be found in <code>os0:kd/iofilemgr.skprx</code>. | ||
Line 8: | Line 9: | ||
! Version !! World !! Privilege | ! Version !! World !! Privilege | ||
|- | |- | ||
| | | 0.990-3.60 || Non-secure || Kernel | ||
|} | |} | ||
Line 14: | Line 15: | ||
=== Known NIDs === | === Known NIDs === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 23: | Line 25: | ||
|} | |} | ||
== | == Debug callback type == | ||
{| class="wikitable" | |||
|- | |||
! Type !! When | |||
|- | |||
| 0x0 || Scheduled sceIoOpen start | |||
|- | |||
{| class="wikitable | | 0x1 || Scheduled sceIoOpen end | ||
! | |||
|- | |- | ||
| | | 0x2 || sceVopOpen start | ||
|- | |- | ||
| 0x3 || sceVopOpen end | |||
|- | |- | ||
| | | 0x4 || Scheduled sceIoClose start | ||
|- | |- | ||
| | | 0x5 || Scheduled sceIoClose end | ||
|- | |- | ||
| | | 0x6 || sceVopClose start | ||
|- | |- | ||
| | | 0x7 || sceVopClose end | ||
|- | |- | ||
| | | 0x8 || Scheduled sceIoRead start | ||
|- | |- | ||
| | | 0x9 || Scheduled sceIoRead end | ||
|- | |- | ||
| | | 0xA || sceVopRead start | ||
|- | |- | ||
| | | 0xB || sceVopRead end | ||
|- | |- | ||
| | | 0xC || Scheduled sceIoWrite start | ||
|- | |- | ||
| | | 0xD || Scheduled sceIoWrite end | ||
|- | |- | ||
| | | 0xE || sceVopWrite start | ||
|- | |- | ||
| | | 0xF || sceVopWrite end | ||
|- | |- | ||
| | | 0x10 || Scheduled sceIoPread start | ||
|- | |- | ||
| | | 0x11 || Scheduled sceIoPread end | ||
|- | |- | ||
| | | 0x12 || sceVopPread start | ||
|- | |- | ||
| | | 0x13 || sceVopPread end | ||
|- | |- | ||
| | | 0x14 || Scheduled sceIoPwrite start | ||
|- | |- | ||
| | | 0x15 || Scheduled sceIoPwrite end | ||
|- | |- | ||
| | | 0x16 || sceVopPwrite start | ||
|- | |- | ||
| | | 0x17 || sceVopPwrite end | ||
|- | |- | ||
| | | 0x18 || Scheduled sceIoLseek start | ||
|- | |- | ||
| 0x19 || Scheduled sceIoLseek end | |||
|- | |- | ||
| | | 0x1A || sceVopLseek start | ||
|- | |- | ||
| | | 0x1B || sceVopLseek end | ||
|- | |- | ||
| | | 0x1C || Scheduled sceIoMkdir start | ||
|- | |- | ||
| | | 0x1D || Scheduled sceIoMkdir end | ||
|- | |- | ||
| | | 0x1E || sceVopMkdir start | ||
|- | |- | ||
| | | 0x1F || sceVopMkdir end | ||
|- | |- | ||
| | | 0x20 || Scheduled sceIoRmdir start | ||
|- | |- | ||
| | | 0x21 || Scheduled sceIoRmdir end | ||
|- | |- | ||
| | | 0x22 || sceVopRmdir start | ||
|- | |- | ||
| | | 0x23 || sceVopRmdir end | ||
|- | |- | ||
| | | 0x24 || Scheduled sceIoGetstat start | ||
|- | |- | ||
| | | 0x25 || Scheduled sceIoGetstat end | ||
|- | |- | ||
| | | 0x26 || sceVopGetstat start | ||
|- | |- | ||
| | | 0x27 || sceVopGetstat end | ||
|- | |- | ||
| | | 0x28 || Scheduled sceIoRemove start | ||
|- | |- | ||
| | | 0x29 || Scheduled sceIoRemove end | ||
|- | |- | ||
| | | 0x2A || sceVopRemove start | ||
|- | |- | ||
| | | 0x2B || sceVopRemove end | ||
|- | |- | ||
| | | 0x2C || Scheduled sceIoRename start | ||
|- | |- | ||
| | | 0x2D || Scheduled sceIoRename end | ||
|- | |- | ||
| | | 0x2E || sceVopRename start | ||
|- | |||
| 0x2F || sceVopRename end | |||
|- | |||
| 0x30 || - | |||
|- | |||
| 0x31 || - | |||
|- | |||
| 0x32 || Scheduled sceIoDopen start | |||
|- | |||
| 0x33 || Scheduled sceIoDopen end | |||
|- | |||
| 0x34 || sceVopDopen start | |||
|- | |||
| 0x35 || sceVopDopen end | |||
|- | |||
| 0x36 || Scheduled sceIoDread start | |||
|- | |||
| 0x37 || Scheduled sceIoDread end | |||
|- | |||
| 0x38 || sceVopDread start | |||
|- | |||
| 0x39 || sceVopDread end | |||
|- | |||
| 0x3A || Scheduled sceIoDclose start | |||
|- | |||
| 0x3B || Scheduled sceIoDclose end | |||
|- | |||
| 0x3C || sceVopDclose start | |||
|- | |||
| 0x3D || sceVopDclose end | |||
|- | |||
| 0x3E || Scheduled sceIoChstat start | |||
|- | |||
| 0x3F || Scheduled sceIoChstat end | |||
|- | |||
| 0x40 || sceVopChstat start | |||
|- | |||
| 0x41 || sceVopChstat end | |||
|- | |||
| 0x42 || Scheduled sceIoIoctl start | |||
|- | |||
| 0x43 || Scheduled sceIoIoctl end | |||
|- | |||
| 0x44 || sceVopIoctl start | |||
|- | |||
| 0x45 || sceVopIoctl end | |||
|- | |||
| 0x46 || Scheduled sceIoSync start | |||
|- | |||
| 0x47 || Scheduled sceIoSync end | |||
|- | |||
| 0x48 || sceVopSync start | |||
|- | |||
| 0x49 || sceVopSync end | |||
|- | |||
| 0x4A || Scheduled sceIoFgetstat start | |||
|- | |||
| 0x4B || Scheduled sceIoFgetstat end | |||
|- | |||
| 0x4C || sceVopFgetstat start/end | |||
|- | |||
| 0x4D || - | |||
|- | |||
| 0x4E || Scheduled sceIoFchstat start | |||
|- | |||
| 0x4F || Scheduled sceIoFchstat end | |||
|- | |||
| 0x50 || sceVopFchstat start | |||
|- | |||
| 0x51 || sceVopFchstat end | |||
|- | |||
| 0x52 || sceVopLookup start | |||
|- | |||
| 0x53 || sceVopLookup end | |||
|- | |||
| 0x54 || sceVopCreate start | |||
|- | |||
| 0x55 || sceVopCreate end | |||
|- | |||
| 0x56 || sceVopInactive start | |||
|- | |||
| 0x57 || sceVopInactive end | |||
|- | |||
| 0x58 || sceVopWhiteout start | |||
|- | |||
| 0x59 || - | |||
|- | |||
| 0x5A || sceVopWhiteout end | |||
|- | |||
| 0x5B || sceVopCleanup start | |||
|- | |||
| 0x5C || sceVopCleanup end | |||
|- | |||
| 0x5D || sceVfsOpMount start | |||
|- | |||
| 0x5E || sceVfsOpMount end | |||
|- | |||
| 0x5F || sceVfsOpUnmount start | |||
|- | |||
| 0x60 || sceVfsOpUnmount end | |||
|- | |||
| 0x61 || sceVfsOpDevctl start | |||
|- | |||
| 0x62 || sceVfsOpDevctl end | |||
|- | |||
| 0x63 || sceVfsOpSync start | |||
|- | |||
| 0x64 || sceVfsOpSync end | |||
|- | |||
| 0x65 || sceVfsOpDecodePathElem start | |||
|- | |||
| 0x66 || sceVfsOpDecodePathElem end | |||
|} | |||
== Mount Points == | |||
This table is stored in data segment of SceIofilemgr as array of <code>vfs_mount_point_info</code> elements. | |||
When [[#sceVfsMountForDriver]] is executed, it finds vfs_add_data element by filesystem string and then selects appropriate mount scenario by devMinor and devMajor. | |||
*<code><rnd></code> means random numeric string of length 13 | |||
See [[SceSdstor]] for "sdstor0:" Block Device. | |||
{| class="wikitable sortable" | |||
! Unix Mount || Dev Major || Dev Minor || fsName || assignName || blockdevName || VSH Mount Id || Comment | |||
|- | |||
| /PD<rnd> || 0x3 || 0x1001 || PFS_GDSD_INF || PD<rnd>0 || - || 0x0 || - | |||
|- | |||
| /sd/exfat || 0x2030001 || 0x30002 || [[SceExfatfs|exfat]] || sd0: || sdstor0:ext-lp-act-entire || 0x100 || - | |||
|- | |||
| /os/exfat || 0x1000001 || 0x1002 || [[SceExfatfs|exfat]] || os0: || sdstor0:int-lp-act-os || 0x200 || Formatted as FAT16. | |||
|- | |||
| /vs/exfat || 0x1000001 || 0x1002 || [[SceExfatfs|exfat]] || vs0: || sdstor0:int-lp-ign-vsh || 0x300 || Formatted as FAT16. | |||
|- | |||
| /vd/exfat || 0x1000001 || 0x10002 || [[SceExfatfs|exfat]] || vd0: || sdstor0:int-lp-ign-vshdata || 0x400 || Formatted as FAT16. | |||
|- | |||
| /tm/exfat || 0x1000001 || 0x10002 || [[SceExfatfs|exfat]] || tm0: || sdstor0:int-lp-ign-vtrm || 0x500 || Formatted as FAT16. | |||
|- | |||
| /ur/exfat || 0x1000001 || 0x50002 || [[SceExfatfs|exfat]] || ur0: || sdstor0:int-lp-ign-user || 0x600 || Formatted as exFAT. | |||
|- | |||
| /ud/exfat || 0x1000001 || 0x10002 || [[SceExfatfs|exfat]] || ud0: || sdstor0:int-lp-ign-updater || 0x700 || Formatted as FAT16. | |||
|- | |||
| /ux/exfat || 0x2020001 || 0x30002 || [[SceExfatfs|exfat]] || ux0: || External: sdstor0:xmc-lp-ign-userext<br />Internal: sdstor0:int-lp-ign-userext || 0x800 || Formatted as exFAT. | |||
|- | |||
| /gro/exfat || 0x2010001 || 0x21002 || [[SceExfatfs|exfat]] || gro0: || sdstor0:gcd-lp-ign-gamero || 0x900 || Formatted as exFAT. | |||
|- | |||
| /grw/exfat || 0x2010001 || 0x20002 || [[SceExfatfs|exfat]] || grw0: || sdstor0:gcd-lp-ign-gamerw || 0xA00 || Formatted as exFAT. | |||
|- | |||
| /sa/exfat || 0x1000001 || 0x1002 || [[SceExfatfs|exfat]] || sa0: || sdstor0:int-lp-ign-sysdata || 0xB00 || Formatted as FAT16. | |||
|- | |||
| /pd/exfat || 0x1000001 || 0x1002 || [[SceExfatfs|exfat]] || pd0: || sdstor0:int-lp-ign-pidata || 0xC00 || Formatted as exFAT. | |||
|- | |||
} | | /imc/exfat || 0x2020001 || 0x30002 || [[SceExfatfs|exfat]] || imc0: || sdstor0:int-lp-ign-userext || 0xD00 || Formatted as exFAT. | ||
|- | |||
| /xmc/exfat || 0x2020001 || 0x30002 || [[SceExfatfs|exfat]] || xmc0: || sdstor0:xmc-lp-ign-userext || 0xE00 || Formatted as exFAT. | |||
|- | |||
| /uma/exfat || 0x2030001 || 0x2 || [[SceExfatfs|exfat]] || uma0: || sdstor0:uma-lp-act-entire || 0xF00 || - | |||
|- | |||
| /tty || 0x4000020 || 0x6003 || dummy_ttyp_dev_fs || tty || dummy_ttyp_dev_fs || 0x0 || - | |||
|- | |||
| /dev || 0x10 || 0x3 || sdstor_dev_fs || sdstor0: || sd || 0x1 || - | |||
|- | |||
| /md || 0x10 || 0x2003 || md_dev_fs || md0: || md || 0x2 || - | |||
|- | |||
| /lma/exfat || 0x1 || 0x5 || [[SceExfatfs|exfat]] || lma0: || / || 0x10000 || - | |||
|- | |||
| /lmb/exfat || 0x1 || 0x5 || [[SceExfatfs|exfat]] || lmb0: || / || 0x20000 || - | |||
|- | |||
| /mfa/exfat || 0x1 || 0x5 || [[SceExfatfs|exfat]] || mfa0: || / || 0x50000 || - | |||
|- | |||
| /mfb/exfat || 0x1 || 0x5 || [[SceExfatfs|exfat]] || mfb0: || / || 0x60000 || - | |||
|- | |||
| /host || 0x3000004 || 0x8006 || - || host0: || deci4p_drfp_dev_fs || - || - | |||
|} | |||
Dev Minor | |||
{| class="wikitable sortable" | |||
! Mask || Value || Comment | |||
|- | |||
| 0xFF || - || type | |||
|- | |||
| 0xFF00 || - || flags | |||
|- | |||
| 0xFF00 || 0x1000 || Read Only | |||
|- | |||
| 0xFF0000 || 0x10000 || Invalidate fd on susppend/resume within process/system | |||
|- | |||
| 0xFF0000 || 0x20000 || External media | |||
|} | |||
== VFS Implementation == | |||
Information can be found on separate page [[VFS_Implementation|VFS Implementation]] | |||
==== Note ==== | |||
Max vfs node number is 0x1000. | |||
== Types == | |||
typedef struct | <source lang="C"> | ||
uint32_t | typedef struct SceIoMount { // size is 0x34-bytes | ||
void *mnt; | |||
int mntId; | |||
char assignName[0x20]; | |||
SceUInt32 openedEntryNum; | |||
SceBool unk_0x2C; | |||
int unk_0x30; | |||
} SceIoMount; | |||
typedef struct SceIoMountInfo { // size is 0x54C-bytes | |||
void *mnt; | |||
int mntId; | |||
char assignName[0x20]; | |||
SceUInt32 openedEntryNum; | |||
int unk_0x2C; | |||
int unk_0x30; | |||
int unk_0x34; | |||
int unk_0x38; | |||
int unk_0x3C; | |||
int unk_0x40; | |||
int unk_0x44; | |||
int unk_0x48; | |||
int unk_0x4C; | |||
int unk_0x50; | |||
int unk_0x54; | |||
int unk_0x58; | |||
int unk_0x5C; | |||
int unk_0x60; | |||
int unk_0x64; | |||
int unk_0x68; | |||
int unk_0x6C; | |||
int unk_0x70; | |||
int unk_0x74; | |||
int unk_0x78; | |||
int unk_0x7C; | |||
int unk_0x80; | |||
int unk_0x84; | |||
char unk_0x88[0x400]; | |||
int unk_0x488; | |||
char unk_0x48C[0x40]; | |||
char blockdevName[0x40]; | |||
char unk_0x50C[0x40]; | |||
} SceIoMountInfo; | |||
typedef struct vfs_node_info { // size is 0x38 | |||
char name[0x20]; | |||
vfs_node* node; // can be zero | |||
uint32_t unk_24; // probably size of vfs_node | |||
uint32_t unk_28; // probably flags | |||
vfs_node_info* node_info_2C; // can be zero | |||
vfs_node_info* node_info_30; // can be zero | |||
vfs_node_info* node_info_34; // can be zero | |||
} vfs_node_info; | |||
// It looks like this structure is used to get some response into "error" field | |||
// when executing sceKernelSignalCondTo calls. | |||
// This structure is used by SceIofileDaemon when it monitors mount/unmount async requests | |||
// in SceIofilemgrMount thread using SceIofilemgrMount conditional variable. | |||
// Upon completion it issues the signal and result of operation is stored in error field. | |||
// It looks like operations 1/2 are used for normal filesystems. | |||
// Operations 3/4 are used for PFS_GDSD_INF filesystem. | |||
typedef struct cond_ctx { | |||
uint32_t op_index; // operation index. 1,3 - mount. 2,4 - unmount | |||
uint32_t unk_4; | uint32_t unk_4; | ||
uint32_t unk_8; | uint32_t unk_8; | ||
uint32_t unk_C; | uint32_t unk_C; | ||
uint32_t unk_10; | |||
uint32_t unk_14; | |||
uint32_t unk_18; | |||
uint32_t unk_1C; | |||
int error; // either error code or 0 | |||
cond_ctx* next; // 0 means end of list | |||
} cond_ctx; | |||
typedef struct ctx_19D4 { | |||
void* unk_0; | |||
uint32_t unk_4; | |||
vfs_node* offset; // Pool of vfs_nodes with 0x1000 elements. | |||
// It is used in sceVfsGetNewVnodeForDriver, mount/unmount and node find routines. | |||
uint32_t size; | |||
uint32_t count; | |||
uint32_t unk_14; | |||
uint32_t unk_18; | |||
uint32_t unk_1C; | |||
} ctx_19D4; | |||
typedef struct ctx_11C { //size is 0x220 | |||
void* unk_0; | |||
uint32_t unk_4; | |||
void* offset; // pointer to array of byte size 0x10000 with 0x40 elements of size 0x400 | |||
uint32_t size; | |||
uint32_t count; | |||
uint8_t data[0x20C]; | |||
} ctx_11C; | |||
typedef struct io_scheduler_dispatcher { //size is 0xB8 | |||
char unk_0[0x50]; | |||
io_scheduler* unk_50; // Internal storage | |||
io_scheduler* unk_54; // Gamecard | |||
io_scheduler* unk_58; // Removable media (memory card) | |||
io_scheduler* unk_5C; // Host File System (host0:) | |||
io_scheduler* unk_60; // Default | |||
uint32_t unk_64; // pointer to unknown module data section | |||
uint32_t unk_68; // SceIoSchedulerDispatcher fast mutex | |||
uint32_t unk_6C; | |||
uint32_t | |||
uint32_t | |||
uint32_t | |||
char unk_70[0x30]; | |||
uint32_t | uint32_t unk_A0; | ||
uint32_t unk_A4; | |||
uint32_t | |||
SceUID unk_A8; // SceIoSchedulerDispatcher event flag uid | |||
uint32_t | uint32_t unk_AC; // counter | ||
uint32_t | uint32_t unk_B0; // flag | ||
uint32_t | uint32_t unk_B4; // 0 | ||
} io_scheduler_dispatcher; | |||
} | |||
typedef struct io_scheduler_item { // size is 0x14 - allocated from SceIoScheduler heap | |||
io_scheduler* unk_0; // parent | |||
uint32_t unk_4; // 0 | |||
uint32_t unk_8; // 0 | |||
uint32_t unk_C; // 0 | |||
uint32_t unk_10; // pointer to unknown module data section | |||
} io_scheduler_item; | |||
== | enum io_device_code { | ||
Internal = 0x100, | |||
Game_Card = 0x201, | |||
Removable = 0x202, | |||
Host_File_System = 0x300, | |||
Default = 0x0 | |||
}; | |||
{ | typedef struct io_scheduler { //size is 0xA8 - allocated from SceIoScheduler heap | ||
io_device_code unk_0; | |||
io_scheduler_item* unk_4; // item 0 | |||
io_scheduler_item* unk_8; // item 1 | |||
io_scheduler_item* unk_C; // item 2 | |||
io_scheduler_item* unk_10; // item 3 | |||
io_scheduler_item* unk_14; // item 4 | |||
io_scheduler_item* unk_18; // item 5 | |||
io_scheduler_item* unk_1C; // item 6 | |||
io_scheduler_item* unk_20; // item 7 | |||
io_scheduler_item* unk_24; // item 8 | |||
io_scheduler_item* unk_28; // item 9 | |||
io_scheduler_item* unk_2C; // item 10 | |||
io_scheduler_item* unk_30; // item 11 | |||
io_scheduler_item* unk_34; // item 12 | |||
io_scheduler_item* unk_38; // item 13 | |||
io_scheduler_item* unk_3C; // item 14 | |||
io_scheduler_item* unk_40; // item 15 | |||
uint32_t unk_44; // flag1 0x40000 or 0x00 | |||
uint32_t unk_48; // flag2 0x40000 or 0x00 | |||
io_scheduler_dispatcher* unk_4C; // parent | |||
SceUID unk_50; // SceIoScheduler mutex | |||
SceUID unk_54; // SceIoScheduler cond | |||
char unk_58; // 0 | |||
char unk_59; // 0 | |||
char unk_5A; // 0 | |||
char unk_5B; // 0 | |||
uint32_t unk_5C; // 0 | |||
// this is probably a separate structure | |||
SceUID unk_60; // SceIoSchedWorker thread id | |||
SceUID unk_64; // SceIoScheduler mutex from self | |||
SceUID unk_68; // SceIoScheduler cond from self | |||
io_scheduler* unk_6C; // pointer to self | |||
uint32_t unk_70; // 0 | |||
uint16_t unk_74; // 0 | |||
uint16_t unk_76; // 0 | |||
uint32_t unk_78; // 0 | |||
uint32_t unk_7C; // 0 | |||
uint32_t unk_80; // | |||
uint32_t unk_84; // some flag | |||
uint32_t unk_88; //0x80 | |||
uint32_t unk_8C; //0x80 | |||
uint32_t unk_90; //0x80 | |||
|- | uint32_t unk_94; //0x80 | ||
uint32_t unk_98; //0x80 | |||
uint32_t unk_9C; //0x80 | |||
uint32_t unk_A0; // 0 | |||
uint32_t unk_A4; // 0 | |||
} io_scheduler; | |||
// Context used for dispatching i/o operations | |||
typedef struct io_context { // size is 0xB8 on FW 3.60 | |||
uint32_t unk_0; | |||
uint32_t unk_4; | |||
uint32_t unk_8; | |||
uint32_t unk_C; | |||
uint16_t unk_10; | |||
uint16_t unk_12; | |||
uint16_t unk_14; | |||
uint16_t unk_16; | |||
void *data_0; // 0x18 | |||
uint32_t unk_1C; // 0x1C | |||
SceSize size_0; // 0x20 | |||
uint32_t io_op_index; // 0x24 | |||
| | uint32_t ioctlOutdata0; // 0x28 | ||
io_device_code device_code; // 0x2C, ioctlOutdata1 | |||
char async; // 0x30 | |||
char unk_31; | |||
char unk_32; | |||
char unk_33; | |||
SceUID pid; // 0x34, sceKernelGetProcessIdForDriver | |||
SceUID threadId; // 0x38, sceKernelGetThreadIdForDriver | |||
SceUID tlsPid; // 0x3C, sceKernelGetProcessIdFromTLSForDriver | |||
uint32_t unk_40; // 0x40, SceThreadmgrForDriver_332E127C | |||
uint32_t cpuMask; // 0x44, sceKernelGetThreadCpuAffinityMaskForDriver | |||
uint32_t threadPriority; // 0x48, sceKernelGetThreadCurrentPriorityForDriver | |||
void* list0; // 0x4C, pointer to some linked list with elements of size 0x14 | |||
uint32_t listSize; // 0x50, number of items in linst | |||
void* list1; // 0x54, pointer to some linked list with elements of size 0x14 | |||
uint32_t sizeOfList; // 0x58, size of list in bytes | |||
uint16_t state; // 0x5C, bit 16 of state where state = (MRC p15, 0, state, c13, c0, 3) | |||
uint16_t unk_5E; // 0x5E | |||
uint32_t unk_60; // 0x60 | |||
SceUID fd; // 0x64 | |||
void *data_1; // 0x68 | |||
uint32_t unk_6C; | |||
SceSize size_1; // 0x70 | |||
uint32_t unk_74; // 0x74 | |||
uint32_t unk_78; // 0x78, -1 | |||
uint32_t unk_7C; // 0x7C, -1 | |||
uint32_t op_result; // 0x80, result of i/o operation | |||
uint32_t unk_84; | |||
void* unk_88; | |||
uint32_t unk_8C; | |||
uint32_t unk_90; | |||
uint32_t unk_94; | |||
uint32_t unk_98; | |||
uint32_t unk_9C; | |||
uint32_t unk_A0; | |||
uint32_t unk_A4; | |||
uint32_t unk_A8; | |||
uint32_t unk_AC; | |||
SceUInt64 sytemTimeWide; // 0xB0, sceKernelGetSystemTimeWideForDriver | |||
} io_context; | |||
typedef struct _SceVfsFileObject_0995 { //SceVfsFileClass object - size is 0x40 on 0.995 | |||
/* SceKernelObject header not included in size nor structure */ | |||
SceInt32 unk_0x0; | |||
SceInt32 unk_0x4; | |||
SceInt64 unk_0x8; | |||
SceInt32 unk_0x10; //Set to 1 during sceVfsAllocateFile | |||
ScePID creator_pid; //Result of sceKernelGetProcessIdFromTLS() during sceVfsAllocateFile | |||
void* unk_0x18; //Pointer provided as a1 to sceVfsAllocateFile | |||
SceUIDVfsFileObject* next; //Pointer to next file in linked list - list head is in a1 | |||
SceInt32 unk_0x20; | |||
SceInt16 unk_0x24; | |||
char unk_0x26; //unused? | |||
SceInt8 unk_0x27; | |||
SceInt32 unk_0x28; //comes from a1->0x4C->0xC8 | |||
SceInt32 unk_0x2C; //((a1->0x4C->0x50 & 0x20000) << 1) | (a1->0x4C->0x50 & 0x10000) | |||
SceInt32 unk_0x30; | |||
char unk_0x34; //unused? | |||
SceInt8 unk_0x35; | |||
SceInt8 unk_0x36; | |||
SceInt8 unk_0x37; | |||
SceInt8 unk_0x38; | |||
SceInt8 unk_0x39; | |||
SceInt8 unk_0x3A; | |||
SceInt8 unk_0x3B; | |||
SceInt8 unk_0x3C; | |||
SceInt8 unk_0x3D; | |||
SceInt8 unk_0x3E; | |||
SceInt8 unk_0x3F; | |||
} SceUIDVfsFileObject_0995; | |||
typedef struct _SceUIDVfsFileObject { //SceUIDVfsFileClass object - size is 0x48 on 3.60 | |||
/* SceKernelObject header not included in size nor structure */ | |||
SceInt32 unk_0x0; | |||
SceInt32 unk_0x4; | |||
SceInt64 unk_0x8; | |||
SceInt32 unk_0x10; //Set to 1 during sceVfsAllocateFile | |||
ScePID creator_pid; //Result of sceKernelGetProcessIdFromTLS() during sceVfsAllocateFile | |||
void* unk_0x18; //Pointer provided as a1 to sceVfsAllocateFile | |||
SceUIDVfsFileObject* next; //Pointer to next file in linked list - list head is in a1 | |||
SceInt32 unk_0x20; //Zero'ed in constructor | |||
SceInt16 unk_0x24; | |||
char unk_0x26; //unused? | |||
SceInt8 unk_0x27; | |||
SceInt32 unk_0x28; //comes from a1->0x4C->0xC8 | |||
SceInt32 unk_0x2C; //((a1->0x4C->0x50 & 0x20000) << 1) | (a1->0x4C->0x50 & 0x10000) | |||
SceInt32 unk_0x30; | |||
char unk_0x34; //unused? | |||
SceInt8 unk_0x35; | |||
SceInt8 unk_0x36; | |||
SceInt8 unk_0x37; | |||
SceInt8 unk_0x38; //Zero'ed during constructor | |||
SceInt8 unk_0x39; //^ doing *(SceInt32*)(&file->unk_0x38) = 0; | |||
SceInt8 unk_0x3A; //^ | |||
SceInt8 unk_0x3B; //^ | |||
SceInt8 unk_0x3C; | |||
SceInt8 unk_0x3D; | |||
SceInt8 unk_0x3E; | |||
SceInt8 unk_0x3F; | |||
char unk_0x40[8]; //unknown type - haven't seen this used yet | |||
} SceUIDVfsFileObject; | |||
typedef struct SceVfsPath { //size is 0xC-bytes | |||
char *name; // could be `const char *`? | |||
SceSize name_len; | |||
char *path; // could be `const char *`? | |||
} SceVfsPath; | |||
</source> | |||
== Data segment layout == | |||
{| class="wikitable" | |||
|- | |- | ||
! Address !! Size !! Description | |||
|- | |- | ||
| | | 0x0000 || 0x4 || unknown | ||
|- | |- | ||
| | | 0x0004 || 0x8 || some index returned from initialization function 0xb645c7ef in SceThreadmgrForDriver | ||
|- | |- | ||
| | | 0x0008 || 0x4 || unknown | ||
|- | |- | ||
| | | 0x000C || 0x4 || flag that enables usage of sceFiosKernel functions (like OverlayResolveSync) in i/o operations in transition from user to kernel | ||
|- | |- | ||
| | | 0x00010 || 0x4 || flag that enables usage of sceFiosKernel functions (like OverlayResolveSync) in i/o operations in transition from user to kernel | ||
|- | |- | ||
| | | 0x00014 || 0x4 || flag that enables usage of sceFiosKernel functions (like OverlayResolveSync) in i/o operations in transition from user to kernel | ||
|- | |- | ||
| | | 0x00018 || 0x4 || flag that enables usage of sceFiosKernel functions (like OverlayResolveSync) in i/o operations in transition from user to kernel | ||
|- | |- | ||
| | | 0x0001C || 0x4 || unknown | ||
|- | |- | ||
| | | 0x0020 || 0x4 || <code>SceIofileDevWaitForVC</code> event flag SceUID | ||
|- | |- | ||
| | | 0x0024 || 0x4 || unknown | ||
|- | |- | ||
| | | 0x0028 || 0x4 || <code>SceIofileDevWaitForSD</code> event flag SceUID | ||
|- | |- | ||
| | | 0x002C || 0x4 || pointed by <code>vfs_mount_cc</code> for <code>SceIofileDevWaitForSD</code> | ||
|- | |- | ||
| | | 0x0030 || 0x4 || <code>SceIofileDevWaitForMC</code> event flag SceUID | ||
|- | |- | ||
| | | 0x0034 || 0x4 || unknown | ||
|- | |- | ||
| | | 0x0038 || 0x4 || pointed by <code>vfs_mount_cc</code> for <code>SceIofileDevWaitForVC</code> | ||
|- | |- | ||
| | | 0x003C || 0x4 || pointed by <code>vfs_mount_cc</code> for <code>SceIofileDevWaitForMC</code> | ||
|- | |- | ||
| | | 0x0040 || 0x10 || unknown | ||
|- | |- | ||
| | | 0x0050 || 0x4 || address of some callback function called in all vfs operations | ||
|- | |- | ||
| | | 0x0054 || 0x4 || <code>SceIofile</code> heap SceUID | ||
|- | |- | ||
| | | 0x0058 || 0x80 || unknown | ||
|- | |- | ||
| | | 0x00D8 || 0x4 || <code>SceIoVfsHeap</code> heap SceUID | ||
|- | |- | ||
| | | 0x00DC || 0x4 || <code>SceIoFileDebug</code> memblock SceUID | ||
|- | |- | ||
| | | 0x00E0 || 0x3C || unknown | ||
|- | |- | ||
| | | 0x011C || 0x4 || ctx_11C* pointer to structure | ||
|- | |- | ||
| | | 0x0120 || 0x4C || unknown | ||
|- | |- | ||
| | | 0x016C || 0x10 || char* static_buffers[4] - static buffers used instead of SceIoVfsHeap | ||
|- | |- | ||
| | | 0x017C || 0x2C || <code>SceClass</code> for SceVfsFile | ||
|- | |- | ||
| | | 0x01A8 || 0x1500 || array of 96 elements of vfs_node_info | ||
|- | |- | ||
| | | 0x16A8 || 0x4 || <code>SceVfsRfsLock</code> fast mutex | ||
|- | |- | ||
| | | 0x16AC || 0x3C || unknown | ||
|- | |- | ||
| | | 0x16E8 || 0x2C || <code>SceClass</code> for SceIoMountEvent | ||
|- | |- | ||
| | | 0x1714 || 0xC || unknown | ||
|- | |- | ||
| | | 0x1720 || 0x04 || cond_ctx* pointer to the linked list | ||
|- | |- | ||
| | | 0x1724 || 0x4 || <code>SceIoScheduler</code> heap SceUID | ||
|- | |- | ||
| | | 0x1728 || 0xB8 || <code>io_scheduler_dispatcher</code> structure | ||
|- | |- | ||
| | | 0x17E0 || 0x2C || <code>SceClass</code> for SceIoAsyncEvent - used in all async i/o operations | ||
|- | |- | ||
| | | 0x180C || 0xC || unknown | ||
|- | |- | ||
| | | 0x1818 || 0x2C || <code>SceClass</code> for SceIoErrorEvent | ||
|- | |- | ||
| | | 0x1844 || 0xC || unknown | ||
|- | |- | ||
| | | 0x1850 || 0x4 || <code>SceIofileDaemonLock</code> fast mutex | ||
|- | |- | ||
| 0x1854 || 0x40 || unknown | |||
|- | |- | ||
| | | 0x1894 || 0x4 || <code>SceIofile</code> fast mutex | ||
| | |||
|- | |- | ||
| 0x1898 || 0x7C || unknown | |||
|- | |- | ||
| | | 0x1914 || 0x4 || function pointer t_1914_callback | ||
| | |||
|- | |- | ||
| 0x1918 || 0x4 || <code>SceIofileFlock</code> fast mutex | |||
|- | |- | ||
| | | 0x191C || 0x44 || unknown | ||
| | |||
|- | |- | ||
| 0x1960 || 0x4 || some i/o flag | |||
|- | |- | ||
| 0. | | 0x1964 || 0x4 || flag that indicates that any i/o operation happened 1/0. changed by each i/o operation. cleared on suspend. | ||
| | |- | ||
| 0x1968 || 0x18 || unknown | |||
|- | |- | ||
| 0x1980 || 0x4 || counter of not finished i/o operations. changed by each i/o operation. | |||
|- | |- | ||
| | | 0x1984 || 0xC || unknown | ||
| | |||
|- | |- | ||
| 0x1990 || 0x4 || <code>SceVfsMntlistLock</code> fast mutex | |||
|- | |- | ||
| | | 0x1994 || 0x3C || unknown | ||
| | |||
|- | |- | ||
| 0x19D0 || 0x4 || vfs_mount* singly linked list | |||
|- | |- | ||
| | | 0x19D4 || 0x1C || structure ctx_19D4 | ||
| | |||
|- | |- | ||
| 0x19F0 || 0x8 || unknown | |||
|- | |- | ||
| | | 0x19F8 || 0x4 || address used for sceKernelCpuLockSuspendIntrStoreLRForDriver to lock 016C | ||
| | |- | ||
| 0x19FC || 0x4 || vfs_mount* pointer | |||
|- | |- | ||
| 0x1A00 || 0x4 || <code>SceVfsNcacheLock</code> fast mutex | |||
|- | |- | ||
| | | 0x1A04 || 0x40 || unknown | ||
| | |||
|- | |- | ||
| 0x1A44 || 0x4 || address used for sceKernelCpuLockSuspendIntrStoreLRForDriver | |||
|- | |- | ||
| | | 0x1A48 || 0x4 || unknown | ||
| | |||
|- | |- | ||
| 0x1A4C || 0x4 || <code>SceVfsLock</code> fast mutex | |||
|- | |- | ||
| | | 0x1A50 || 0x3C || unknown | ||
| | |||
|- | |- | ||
| 0x1A8C || 0x04 || <code>SceIofilemgrMount</code> thread SceUID | |||
|- | |- | ||
| | | 0x1A90 || 0x700 || array of 32 elements of vfs_mount_point_info | ||
| | |||
|- | |- | ||
| 0x2190 || 0x4 || <code>SceIofilemgrMount</code> cond SceUID | |||
|- | |- | ||
| | | 0x2194 || 0x4 || <code>SceIofilemgrMount</code> SceUID mutexid | ||
| | |||
|- | |- | ||
| 0x2198 || 0x4 || flag that indicates that IoSchedulerDispatcher functionality is initialized 1/0 | |||
|- | |- | ||
| | | 0x219C || 0x4 || unknown | ||
| | |||
|- | |- | ||
| 0x21A0 || 0x40 || unknown | |||
|- | |- | ||
| | | 0x21E0 || 0x20 || unknown | ||
| | |||
|- | |- | ||
| 0x2200 || 0x04 || <code>SceIofilemgrDaemon</code> thread SceUID | |||
|- | |- | ||
| | | 0x2204 || 0x8 || unknown | ||
| | |||
|- | |- | ||
| 0x220C || 0x4 || <code>SceIofilemgrDaemon</code> event flag SceUID | |||
|- | |- | ||
| | | 0x2210 || 0x4 || void* to heap alloc of size 0x100 | ||
| | |||
|- | |- | ||
| 0x2214 || 0x4 || void* to heap alloc of size 0x100 | |||
|- | |- | ||
| | | 0x2218 || 0x4 || = 3 | ||
| | |||
|- | |- | ||
| 0x221C || 0x20 || [[SceIofilemgr#sceVfsAddVfsForDriver|vfs_add_data]] <code>dummy_ttyp_dev_fs</code> node | |||
|- | |- | ||
|} | |} | ||
== SceIofilemgrForDriver == | |||
=== sceVfsOpDevctlForDriver === | === sceVfsOpDevctlForDriver === | ||
Line 766: | Line 848: | ||
|} | |} | ||
=== sceVopOpenForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 0.990-3.60 || 0x76B79BEC | ||
|} | |} | ||
=== sceVopCreateForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 0.990-3.60 || 0x9E347C7D | |||
|} | |||
=== | === sceVopCloseForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 0.990-3.60 || 0x40944C2E | ||
|} | |} | ||
In logs it is sceVopClsoe. | |||
=== sceVopLookupForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 0.931-3.60 || 0xA5A6A55C | ||
|} | |} | ||
Temp name was sceVfsNodeInitializePartitionForDriver. | |||
<source lang="C"> | <source lang="C">int sceVopLookupForDriver(SceVfsNode *pNode, SceVfsNode **ppNewNode, SceVfsPath *path_info, SceUInt32 flags);</source> | ||
int | |||
</source> | |||
=== | === sceVopReadForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 0.990-3.60 || 0x570388A5 | ||
|} | |} | ||
=== sceVopWriteForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 0.990-3.60 || 0x9A68378D | ||
|} | |} | ||
=== sceVopLseekForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 0.990-3.60 || | | 0.990-3.60 || 0xB2B13818 | ||
|} | |} | ||
=== sceVopIoctlForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 0.990-3.60 || 0x333C904D | ||
|} | |} | ||
=== sceVopRemoveForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0xDC1E7EE4 | ||
|} | |} | ||
=== sceVopMkdirForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 0.990-3.60 || | | 0.990-3.60 || 0x2F3F8C70 | ||
|} | |} | ||
=== sceVopRmdirForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 0.990-3.60 || | | 0.990-3.60 || 0x1D551105 | ||
|} | |} | ||
=== sceVopDopenForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 0.990-3.60 || 0x00C9C2DD | ||
|} | |} | ||
=== | === sceVopDcloseForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 0.990-3.60 || 0x1350F5C7 | ||
|} | |} | ||
=== | === sceVopDreadForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 0.990-3.60 || | | 0.990-3.60 || 0x77584C8F | ||
|} | |} | ||
=== sceVopGetstatForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 0.990-3.60 || | | 0.990-3.60 || 0x50A63ACF | ||
|} | |} | ||
=== | === sceVopChstatForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 0.990-3.60 || | | 0.990-3.60 || 0x1974FA92 | ||
|} | |} | ||
=== | === sceVopRenameForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 0.990-3.60 || | | 0.990-3.60 || 0x36A794C7 | ||
|} | |} | ||
=== | === sceVopPreadForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 0.990-3.60 || | | 0.990-3.60 || 0xABBC80E3 | ||
|} | |} | ||
=== | === sceVopPwriteForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 0. | | 0.990-3.60 || 0xA53C040D | ||
|} | |} | ||
=== sceVopInactiveForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 0. | | 0.990-3.60 || 0x8FB94521 | ||
|} | |} | ||
=== sceVopLinkForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x942AA61F | ||
|} | |} | ||
Temp name was sceVop_unk_offset_0x54_ForDriver. | |||
=== sceVopUnlinkForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x0D8A806E | ||
|} | |} | ||
Temp name was sceVop_unk_offset_0x58_ForDriver. | |||
=== sceVopSyncForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 0.990-3.60 || 0x9CD96406 | ||
|} | |} | ||
=== sceVopFgetstatForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x1DBCBB01 | ||
|} | |} | ||
Temp name was sceVopGetStateByFdForDriver. | |||
<source | <source>int sceVopFgetstatForDriver(SceVfsNode *pNode, SceVfsFileObject *pVfsFileObject, SceIoStat *stat);</source> | ||
=== | === sceVopFchstatForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x082AFD7F | ||
|} | |} | ||
Temp name was sceVopChstatByFdForDriver. | |||
<source | <source>int sceVopFchstatForDriver(SceVfsNode *pNode, SceVfsFileObject *pObject, SceIoStat *stat, int bit);</source> | ||
=== | === sceVopWhiteoutForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 0. | | 0.996-3.60 || 0xF53399BC | ||
|} | |} | ||
Temp name was sceVopTrashForDriver. | |||
< | Move target node entry file/directory to <code>xx0:/SceIoTrash/</code>. | ||
=== | === sceVopCleanupForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x0F7E1718 | ||
|} | |} | ||
Temp name was sceVop_unk_offset_0x6C_ForDriver. | |||
=== sceVopZerofillForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 0.996-3.60 || 0xEEAE8B51 | ||
|} | |} | ||
Temp name was sceVop_unk_offset_0x70_ForDriver. | |||
=== | === vfsIsLockedMntForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0xC468B5EF | ||
|} | |} | ||
some thread op | |||
=== vfsBuffCacheCtlForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0xA7020B0D | ||
|} | |} | ||
Configures the IO Buffer Cache for vp | |||
<source | <source>int vfsBuffCacheCtlForDriver(SceVfsNode *vp, int data_cache_size, int way, int line_size,int io_size);</source> | ||
=== | === vfsBuffCacheFreeForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0xD6AB5E4B | ||
|} | |} | ||
some node op | |||
=== vfsLockVnodeForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 0.995-3.60 || 0xAA45010B | ||
|} | |} | ||
Temp name was sceVfsNodeWaitEventFlagForDriver, sceVfsLockVnodeForDriver. | |||
calls <code>sceKernelWaitEventFlagForDriver</code> using <code>event_flag_SceVfsVnode</code> from <code>vfs_node</code> | |||
1. If the ownerId of the locked vnode is -1 (no anyone), set own thread as owner and leave the function. | |||
2. If the ownerId is already mine, increment recursiveCount and leave the function. | |||
3. If we get here we increment waiter. | |||
4. Just to be sure, we do a check for 1 again and if the ownerId is -1, we set the ownerId to ourselves in the thread, then decrement waiter and leave the function. | |||
5. If you've come this far, wait for the other owner to unlock the vnode with sceKernelWaitEventFlag. | |||
6. Decrement the waiter and set the ownerId to its own thread and leave the function. | |||
<source lang="C">int | <source lang="C">int vfsLockVnodeForDriver(vfs_node *node);</source> | ||
=== | === vfsUnlockVnodeForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 0.990-3.60 || 0x6048F245 | ||
|} | |} | ||
Temp name was sceVfsNodeSetEventFlagForDriver, sceVfsUnlockVnodeForDriver. | |||
calls <code>sceKernelSetEventFlagForDriver</code> using <code>event_flag_SceVfsVnode</code> from <code>vfs_node</code> | |||
1. The function fails if the ownerId is not its own thread. | |||
2. If recursiveCount is not 0, decrement recursiveCount and leave the function. | |||
3. If recursiveCount is 0, checks waiter value. | |||
4. If waiter is not 0, set ownerId to 0xfffffffd, then notify other waiting threads of unlock with sceKernelSetEventFlag and leave the function. | |||
5. Check ownerId and waiter again and execute 4 if there is a discrepancy with the first check. | |||
6. Set waiter to 0 and ownerId to -1 and leave the function. | |||
<source lang="C">int | <source lang="C">int vfsUnlockVnodeForDriver(vfs_node* node);</source> | ||
=== | === vfsMountForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 0.990-3.60 || 0xB62DE9A6 | ||
|} | |} | ||
This is a guessed name. | |||
Temp name was sceVfsMountForDriver. | |||
<source lang="C">int | <source lang="C">int vfsMountForDriver(vfs_mount_point_info_base *mnt);</source> | ||
=== | === vfsUmountForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || | | 1.69-3.60 || 0x9C7E7B76 | ||
|} | |} | ||
Temp name was sceVfsUnmountForDriver. | |||
<source lang="C">int | <source lang="C">int vfsUmountForDriver(vfs_unmount_data *data);</source> | ||
=== | === sceVfsAddVfsForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 0.990-3.60 || 0x673D2FCD | ||
|} | |} | ||
Used by [[SceSdstor]], [[SceTty2uart]], [[SceKernelBlueScreenOfDeath]]. | |||
<source lang="C">int | <source lang="C">int sceVfsAddVfsForDriver(vfs_add_data *data);</source> | ||
=== | === sceVfsDeleteVfsForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 1.69-3.60 || 0x9CBFA725 | ||
|} | |} | ||
<source lang="C">int sceVfsDeleteVfsForDriver(const char *name, void **deleted_node);</source> | |||
=== | === vfsMountForPFSForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0xFEEE44A9 | ||
|} | |} | ||
Temp name was scePfsMgrVfsMountForDriver. | |||
operation index 3 in <code>cond_ctx</code> | |||
<source lang="C"> | |||
// this function can be used with PFS_GDSD_INF filesystem | |||
int vfsMountForPFSForDriver(vfs_mount_point_info_base *mnt, int unk1, int unk2); | |||
</source> | |||
=== | === vfsUmountForPFSForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0xD220539D | ||
|} | |} | ||
This is a guessed name. | |||
Temp name was scePfsMgrVfsUmountForDriver. | |||
operation index 4 in <code>cond_ctx</code> | |||
<source lang="C">int vfsUmountForPFSForDriver(vfs_unmount_data* umnt, int unk1, int unk2);</source> | |||
=== | === vfsLockMntForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x6B3CA9F7 | ||
|} | |} | ||
Temp name was sceVfsLockMntForDriver. | |||
=== | === vfsUnlockMntForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0xDC2D8BCE | ||
|} | |} | ||
Temp name was sceVfsUnlockMntForDriver. | |||
=== | === vfsGetNewVnodeForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 0.990-3.60 || 0xD60B5C63 | ||
|} | |} | ||
Temp name was sceVfsGetNewVnodeForDriver. | |||
<source lang="C">int vfsGetNewVnodeForDriver(vfs_mount *mnt, node_ops2 *ops, int unused, vfs_node **node);</source> | |||
=== | === vfsFreeVnodeForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 0.990-3.60 || 0x21D57633 | ||
|} | |} | ||
Temp name was sceVfsFreeVnodeForDriver. | |||
=== | === vfsIsOwnerForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0xC3AE93A2 | ||
|} | |} | ||
This is a guessed name. | |||
Temp name was sceIoComparisonCurrentThreadIdForDriver. | |||
<source lang="C"> | <source lang="C">SceBool vfsIsOwnerForDriver(void *vp);</source> | ||
=== | === vfsGetVnodeNameForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 0.990-3.60 || 0xAA253B68 | ||
|} | |} | ||
Temp name was sceVfsGetVnodeNameForDriver. | |||
<source lang="C">int vfsGetVnodeNameForDriver(SceVfsNode *vp, char *name, SceSize n, SceSize *result);</source> | |||
=== | === vfsAllocateFileForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 0.995-3.60 || 0xBBAC1751 | ||
|} | |} | ||
Temp name was sceVfsAllocateFileForDriver. | |||
Creates a <code>SceUIDVfsFileClass</code> object and returns UID and pointer to created object. | |||
<source lang="C"> | |||
// type of a1 is unknown for now - at least 0x98 bytes wide | |||
// FW 0.995 | |||
SceUID vfsAllocateFileForDriver(void *vp, SceUIDVfsFileObject **ppFile); | |||
// FW 3.60 | |||
// If name is NULL, default name (same as 0.995, "SceVfsFile") is used as object name | |||
// Else, name will be created with snprintf("file %s %s", something_from_a1, name); | |||
SceUID vfsAllocateFileForDriver(void *vp, SceVfsFileObject **ppFile, const char *name); | |||
</source> | |||
=== | === vfsAllocateFileDummyForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0xCDF3EF52 | ||
|} | |} | ||
This is a guessed name. | |||
<source lang="C">SceUID vfsAllocateFileDummyForDriver(int flags, SceBool is_dir, const char *name);</source> | |||
=== vfsFreeFileForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 0.990-3.60 || 0xC85E33A2 | ||
|} | |} | ||
Temp name was sceVfsFreeFileForDriver. | |||
Frees a file created with [[SceIofilemgr#vfsAllocateFileForDriver|vfsAllocateFileForDriver]]. | |||
<source lang="C">SceInt32 vfsFreeFileForDriver(void *vp, SceUID file_uid);</source> | |||
=== | === vfsRmdevForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x69A7E076 | ||
|} | |} | ||
Temp name was sceVfsRmdevForDriver. | |||
=== | === vfsOpenForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x0E518FA9 | ||
|} | |} | ||
Temp name was t_sceIoOpenForDriver, sceVfsOpenForDriver. | |||
thread callback for <code>sceIoOpenForDriver</code> | |||
<source lang="C"> | <source lang="C"> | ||
typedef struct SceVfsOpenArgs { | |||
int | const char *filename; | ||
int flag; | |||
SceIoMode mode; | |||
} SceVfsOpenArgs; | |||
SceUID vfsOpenForDriver(SceVfsOpenArgs *argp); | |||
</source> | </source> | ||
=== | === vfsCloseForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x1AE14011 | ||
|} | |} | ||
Temp name was t_sceIoCloseForDriver, sceVfsCloseForDriver. | |||
thread callback for <code>sceIoCloseForDriver</code> | |||
=== | <source lang="C"> | ||
{| class="wikitable" | typedef struct SceVfsCloseArgs { | ||
SceUID fd; | |||
} SceVfsCloseArgs; | |||
int vfsCloseForDriver(SceVfsCloseArgs *argp); | |||
</source> | |||
=== vfsReadForDriver === | |||
{| class="wikitable" | |||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x809892C1 | ||
|} | |} | ||
Temp name was t_sceIoReadForDriver, sceVfsReadForDriver. | |||
thread callback for <code>sceIoReadForDriver</code> | |||
<source lang="C"> | |||
typedef struct SceVfsReadArgs { | |||
SceUID fd; | |||
void *data; | |||
SceSize size; | |||
} SceVfsReadArgs; | |||
int vfsReadForDriver(SceVfsReadArgs *argp); | |||
</source> | |||
=== | === vfsWriteForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x8598ADC3 | ||
|} | |} | ||
Temp name was t_sceIoWriteForDriver, sceVfsWriteForDriver. | |||
thread callback for <code>sceIoWriteForDriver</code> | |||
<source lang="C"> | |||
typedef struct SceVfsWriteArgs { | |||
SceUID fd; | |||
const void *data; | |||
SceSize size; | |||
} SceVfsWriteArgs; | |||
int vfsWriteForDriver(SceVfsWriteArgs *argp); | |||
</source> | |||
=== | === vfsIoctlForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0xC1DD4317 | ||
|} | |} | ||
This is a guessed name. | |||
Temp name was t_sceIoIoctlForDriver, sceVfsIoctlForDriver. | |||
thread callback for <code>sceIoIoctlForDriver</code> | |||
<source lang="C"> | <source lang="C"> | ||
typedef struct SceVfsIoctlArgs { | |||
int | SceUID fd; | ||
unsigned int cmd; | |||
void *indata; | |||
int inlen; | |||
void *outdata; | |||
int outlen; | |||
} SceVfsIoctlArgs; | |||
int vfsIoctlForDriver(SceVfsIoctlArgs *argp); | |||
</source> | </source> | ||
=== | === vfsChstatForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0xBCE4865B | ||
|} | |} | ||
Temp name was t_sceIoChstatForDriver, sceVfsChstatForDriver. | |||
thread callback for <code>sceIoChstatForDriver</code> | |||
<source lang="C"> | |||
typedef struct SceVfsChstatArgs { | |||
const char *path; | |||
const SceIoStat *stat; | |||
unsigned int cbit; | |||
uint32_t store_attr; | |||
} SceVfsChstatArgs; | |||
int vfsChstatForDriver(SceVfsChstatArgs *argp); | |||
</source> | |||
=== | === vfsChstatByFdForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x7517FE29 | ||
|} | |} | ||
Temp name was t_sceIoChstatByFdForDriver, sceVfsChstatByFdForDriver. | |||
thread callback for <code>sceIoChstatByFdForDriver</code> | |||
<source lang="C"> | <source lang="C"> | ||
typedef struct SceVfsChstatByFdArgs { | |||
SceUID fd; | |||
const SceIoStat *buf, | |||
unsigned int cbit; | |||
} SceVfsChstatByFdArgs; | |||
int vfsChstatByFdForDriver(SceVfsChstatByFdArgs *args); | |||
</source> | </source> | ||
=== | === vfsPreadForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x0B54F9E0 | ||
|} | |} | ||
Temp name was t_sceIoPreadForDriver, sceVfsPreadForDriver. | |||
thread callback for <code>sceIoPreadForDriver</code> | |||
<source lang="C"> | |||
typedef struct SceVfsPreadArgs { | |||
SceUID uid; | |||
void *data; | |||
SceSize size; | |||
int paddind; // unused | |||
SceOff offset; | |||
} SceVfsPreadArgs; | |||
int vfsPreadForDriver(SceVfsPreadArgs *argp); | |||
</source> | |||
=== | === vfsPwriteForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0xE5DEA6B7 | ||
|} | |} | ||
Temp name was t_sceIoPwriteForDriver, sceVfsPwriteForDriver. | |||
thread callback for <code>sceIoPwriteForDriver</code> | |||
<source lang="C"> | |||
typedef struct SceVfsPwriteArgs { | |||
SceUID uid; | |||
const void *data; | |||
SceSize size; | |||
int padding; | |||
SceOff offset; | |||
} SceVfsPwriteArgs; | |||
int vfsPwriteForDriver(SceVfsPwriteArgs *argp); | |||
</source> | |||
=== | === vfsGetMntInfoForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0xB987450D | ||
|} | |} | ||
This is a guessed name. | |||
Temp name was sceIoGetMountInfoForDriver. | |||
<source lang="C">int vfsGetMntInfoForDriver(void *mnt, SceIoMountInfo *pInfo);</source> | |||
=== | === vfsGetMntListForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0xC20C621C | ||
|} | |} | ||
This is a guessed name. | |||
Temp name was sceIoGetMountVectorForDriver. | |||
<source lang="C">int vfsGetMntList(SceIoMount *pMount, SceUInt32 nMount, SceUInt32 *pnMount);</source> | |||
=== | === sceIoMountForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0xD070BC48 | ||
|} | |} | ||
operation index 1 in <code>cond_ctx</code> | |||
<source lang="C">int | <source lang="C"> | ||
// intermediate function between sceAppMgrGameDataMountForDriver and sceVfsMountForDriver | |||
int sceIoMountForDriver(int vshMountId, const char *path, int flags, int unk3, int arg_0, int arg_4); | |||
</source> | |||
=== | === sceIoUmountForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x20574100 | ||
|} | |} | ||
operation index 2 in <code>cond_ctx</code> | |||
<source lang="C"> | |||
// intermediate function between sceAppMgrUmountForDriver and sceVfsUnmountForDriver | |||
int sceIoUmountForDriver(int vshMountId, int unk1, int unk2, int unk3); | |||
</source> | |||
=== | === sceIoRmdevForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 0.990-3.60 || 0xA39A9CA7 | ||
|} | |} | ||
Like sceIoRemove? | |||
The difference with sceIoRemove is that sceIoRmdev seems to remove the entry to be deleted directly without moving it to SceIoTrash. | |||
<source lang="C">int | <source lang="C">int sceIoRmdevForDriver(const char *path, int flags, int a3, int a4);</source> | ||
=== | === sceIoDelDrvForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Version !! NID | |||
|- | |- | ||
| 0.931 || 0xD51774E3 | |||
|- | |- | ||
| 3.60 || | | 3.60 || not present | ||
|} | |} | ||
Example: "tty" | |||
<source lang="C">int sceIoDelDrvForDriver(const char *drv);</source> | |||
=== | === sceIoAddDrvForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Version !! NID | |||
|- | |- | ||
| 0.931 || 0x1D8AC9A7 | |||
|- | |- | ||
| 3.60 || | | 3.60 || not present | ||
|} | |} | ||
<source lang="C">int sceIoAddDrvForDriver(const char **drv);</source> | |||
=== sceIoDreadForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 1.69-3.60 || 0x20CF5FC7 | ||
|} | |} | ||
=== | Call interface is same as <code>sceIoDread</code>. | ||
<source lang="C">int sceIoDreadForDriver(SceUID fd, SceIoDirent *dir);</source> | |||
=== sceIoDreadForVshbridgeForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 0. | | 0.995-3.60 || 0x03051B02 | ||
|} | |} | ||
=== | Temp name was sceIoDreadForDriver_2. Derived from [[SceVshBridge#vshIoDread|_vshIoDread]]. | ||
Implementation is completely the same as sceIoDreadForDriver. The only difference is that st_attr in SceIoStat is not set. | |||
<source lang="C">int sceIoDreadForVshbridgeForDriver(SceUID fd, SceIoDirent *dir);</source> | |||
=== sceIoWriteForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 1.69-3.60 || 0x21EE91F0 | ||
|} | |} | ||
=== | Call interface is same as <code>sceIoWrite</code> | ||
<source lang="C">int sceIoWriteForDriver(SceUID fd, const void *data, SceSize size);</source> | |||
=== sceIoDopenForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 1.69-3.60 || 0x463B25CC | ||
|} | |} | ||
=== | Call interface is same as <code>sceIoDopen</code> | ||
<source lang="C">SceUID sceIoDopenForDriver(const char *dirname);</source> | |||
=== sceIoLseekForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 0.931-3.60 || 0x62090481 | ||
|} | |} | ||
=== | Call interface is same as <code>sceIoLseek</code> | ||
<source lang="C">SceOff sceIoLseekForDriver(SceUID fd, SceOff offset, int whence);</source> | |||
=== sceIoOpenForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 0.931-3.60 || 0x75192972 | ||
|} | |} | ||
=== | Call interface is same as [[SceLibKernel#sceIoOpen|sceIoOpen]]. | ||
If the process is game or non-game, the `SCE_O_NOBUF` flag will be ignored. | |||
<source lang="C">SceUID sceIoOpenForDriver(const char *filename, int flag, SceIoMode mode);</source> | |||
=== sceIoOpenForPidForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0xC3D34965 | ||
|} | |} | ||
This is a wrapper for [[SceIofilemgr#sceIoOpenForDriver|sceIoOpenForDriver]]. | |||
< | Pid is used for <code>sceFiosKernelOverlayResolveSyncForDriver</code>. | ||
SceUID | <source lang="C">SceUID sceIoOpenForPidForDriver(SceUID pid, const char *filename, int flag, SceIoMode mode);</source> | ||
</source> | |||
=== | === sceIoChstatForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 1.69-3.60 || 0x7D42B8DC | ||
|} | |} | ||
Call interface is same as <code>sceIoChstat</code> | |||
<source lang="C"> | <source lang="C">int sceIoChstatForDriver(const char *name, const SceIoStat *buf, unsigned int cbit);</source> | ||
=== sceIoChstatForVshbridgeForDriver === | |||
=== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 0.995-3.60 || 0x1F98BD50 | ||
|} | |} | ||
Temp name was sceIoChstatForDriver_2. Derived from [[SceVshBridge#vshIoChstat|_vshIoChstat]]. | |||
< | Implementation is completely the same as <code>sceIoChstatForDriver</code>. The only difference is that (bits = bits & (~0x10000)) operation is not applied. | ||
int | <source lang="C">int sceIoChstatForVshbridgeForDriver(const char *name, const SceIoStat *buf, unsigned int cbit);</source> | ||
</source> | |||
=== | === sceIoGetstatForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 1.69-3.60 || 0x75C96D25 | ||
|} | |} | ||
Call interface is same as <code>sceIoGetstat</code>. | |||
<source lang="C"> | <source lang="C">int sceIoGetstatForDriver(const char *name, SceIoStat *buf);</source> | ||
=== sceIoGetstatForVshbridgeForDriver === | |||
=== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 0.995-3.60 || 0xD6503624 | ||
|} | |} | ||
Temp name was sceIoGetstatForDriver_2. Derived from [[SceVshBridge#vshIoGetstat|_vshIoGetstat]]. | |||
Implementation is completely the same as sceIoGetstatForDriver. The only difference is that st_attr in SceIoStat *buf is not set. | |||
<source lang="C">int sceIoGetstatForVshbridgeForDriver(const char *name, SceIoStat *buf);</source> | |||
</source> | |||
=== | === sceIoMkdirForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 1.69-3.60 || 0x7F710B25 | ||
|} | |} | ||
Call interface is same as <code>sceIoMkdir</code> | |||
<source lang="C"> | <source lang="C">int sceIoMkdirForDriver(const char *dirname, SceIoMode mode);</source> | ||
=== sceIoReadForDriver === | |||
=== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 1.69-3.60 || 0xE17EFC03 | ||
|} | |} | ||
Call interface is same as <code>sceIoRead</code> | |||
<source lang="C">int sceIoReadForDriver(SceUID fd, void *buf, SceSize nbyte);</source> | |||
=== sceIoCloseForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 1.69-3.60 || 0xF99DD8A3 | ||
|} | |} | ||
Call interface is same as <code>sceIoClose</code> | |||
<source lang="C"> | <source lang="C">int sceIoCloseForDriver(SceUID fd);</source> | ||
=== sceIoRenameForDriver === | |||
=== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 1.69-3.60 || 0xDC0C4997 | ||
|} | |} | ||
Call interface is same as <code>sceIoRename</code> | |||
<source lang="C"> | <source lang="C">int sceIoRenameForDriver(const char *oldname, const char *newname);</source> | ||
=== sceIoRemoveForDriver === | |||
=== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 1.69-3.60 || 0x0D7BB3E1 | ||
|} | |} | ||
Call interface is same as <code>sceIoRemove</code> | |||
<source lang="C">int | <source lang="C">int sceIoRemoveForDriver(const char *filename);</source> | ||
=== | === sceIoCancelForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x6D59658D | ||
|} | |} | ||
Derived from | Derived from <code>sceIoCancel</code> | ||
=== sceIoChstatAsyncForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x7EC442BF | ||
|} | |} | ||
Derived from | Derived from <code>_sceIoChstatAsync</code> | ||
=== sceIoChstatByFdAsyncForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0xEC974400 | ||
|} | |} | ||
Derived from | Derived from <code>sceIoChstatByFdAsync</code> | ||
=== sceIoChstatByFdForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0xDF57A75F | ||
|} | |} | ||
Derived from | Derived from <code>_sceIoChstatByFd</code> | ||
<source lang="C">int | <source lang="C">int sceIoChstatByFdForDriver(SceUID fd, const SceIoStat *buf, unsigned int cbit);</source> | ||
=== | === sceIoCloseAsyncForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x11C57CC6 | ||
|} | |} | ||
Derived from <code>sceIoCloseAsync</code> | |||
=== sceIoDevctlAsyncForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0xA9302946 | ||
|} | |} | ||
< | Derived from <code>_sceIoDevctlAsync</code> | ||
=== | === sceIoDevctlForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3. | | 0.990.000-3.740.011 || 0x16882FC4 | ||
|} | |} | ||
cmd list | |||
{| class="wikitable" | |||
|- | |||
! handler !! cmd !! function | |||
|- | |||
| sdstor || 1 || Update ctx info | |||
|- | |||
| sdstor || 2 || Format rm | |||
|- | |||
| sdstor || 3 || Set some intr flag | |||
|- | |||
| sdstor || 4 || remove | |||
|- | |||
| sdstor || 5 || insert | |||
|- | |||
| sdstor || 6 || sceSdErase | |||
|- | |||
| sdstor || 7 || sdctrl_invalidate_partition with check | |||
|- | |||
| sdstor || 8 || sdctrl_invalidate_partition | |||
|- | |||
| exfat || 0x3001 || get_drive_information | |||
|- | |||
| exfat || 0x3004 || set_fake_free | |||
|- | |||
| exfat || 0x3005 || clear_fake_free | |||
|- | |||
| exfat || 0x3802 || set_whiteout_directory | |||
|- | |||
| exfat || 0x3803 || delete_whiteout_entry | |||
|- | |||
| exfat || 0x80000001 || _get_file_size_limit | |||
|} | |||
Derived from [[SceIofilemgr#sceIoDevctl|_sceIoDevctl]]. | |||
This performs device-specific operations. The details of the operations are driver-dependent. | |||
It has the same prototype as [[SceLibKernel#sceIoDevctl]]. | |||
<source lang="C"> | <source lang="C"> | ||
/* | |||
Arguments: | |||
devname Specified device ("<devname><unit>:") | |||
cmd Command code | |||
arg Pointer to device-driver-dependent parameter block | |||
arglen Number of bytes in device-driver-dependent parameter block | |||
bufp Pointer to return data storage block | |||
buflen Size of return data storage block | |||
Return Values: | |||
Non-negative (N>=0) Success (driver-dependent) | |||
<0 Error, e.g. SCE_ERROR_ERRNO_EMFILE, SCE_ERROR_ERRNO_ENODEV, SCE_ERROR_ERRNO_EUNSUP | |||
*/ | |||
int | int sceIoDevctlForDriver( | ||
const char *devname, | |||
int cmd, | |||
const void *arg, | |||
SceSize arglen, | |||
void *bufp, | |||
SceSize buflen | |||
); | |||
</source> | </source> | ||
=== | === sceIoDcloseForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x19C81DD6 | ||
|} | |} | ||
Derived from <code>sceIoDclose</code> | |||
<source lang="C">int sceIoDcloseForDriver(SceUID fd);</source> | |||
=== sceIoFlockForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x16336A0D | ||
|} | |} | ||
Derived from <code>sceIoFlockForSystem</code> | |||
=== sceIoGetstatByFdAsyncForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x0FEE1238 | ||
|} | |} | ||
Derived from <code>sceIoGetstatByFdAsync</code> | |||
=== | === sceIoGetstatByFdForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x462F059B | ||
|} | |} | ||
<source lang="C">int | Derived from <code>_sceIoGetstatByFd</code> | ||
<source lang="C"> | |||
// Return: 0 on success | |||
int sceIoGetstatByFdForDriver(SceUID fd, SceIoStat *buf); | |||
</source> | |||
=== | === sceIoGetstatAsyncForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x94A5304A | ||
|} | |} | ||
=== | Derived from <code>_sceIoGetstatAsync</code> | ||
=== sceIoIoctlAsyncForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0xB761E91B | ||
|} | |} | ||
Derived from <code>_sceIoIoctlAsync</code> | |||
=== sceIoIoctlForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x161CD33F | ||
|} | |} | ||
<source lang="C">int | Derived from <code>_sceIoIoctl</code> | ||
<source lang="C"> | |||
// Return: >=0 on success (driver-dependent) | |||
int sceIoIoctlForDriver(SceUID fd, int cmd, const void *argp, SceSize arglen, void *bufp, SceSize buflen); | |||
</source> | |||
=== | === sceIoLseekAsyncForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x541BAABD | ||
|} | |} | ||
< | Derived from <code>_sceIoLseekAsync</code> | ||
=== | === sceIoMkdirAsyncForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x27003443 | ||
|} | |} | ||
< | Derived from <code>_sceIoMkdirAsync</code> | ||
=== sceIoOpenAsyncForDriver === | |||
=== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x451001DE | ||
|} | |} | ||
< | Derived from <code>_sceIoOpenAsync</code> | ||
=== sceIoPreadAsyncForDriver === | |||
=== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || | | 3.60 || 0x64A46A2C | ||
|} | |} | ||
< | Derived from <code>_sceIoPreadAsync</code> | ||
=== sceIoPreadForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || 0x2A17515D | |||
| 3.60 || | |||
|} | |} | ||
=== | Derived from <code>_sceIoPread</code> | ||
<source lang="C"> | |||
// Return: Number of bytes actually read | |||
int sceIoPreadForDriver(SceUID uid, void *data, int size, SceOff offset); | |||
</source> | |||
=== sceIoPwriteAsyncForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x202CDDE3 | ||
|} | |} | ||
=== | Derived from <code>_sceIoPwriteAsync</code> | ||
=== sceIoPwriteForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x5F1512C8 | ||
|} | |} | ||
=== | Derived from <code>_sceIoPwrite</code> | ||
<source lang="C"> | |||
// Return: Number of bytes actually written | |||
int sceIoPwriteForDriver(SceUID fd, const void *buf, SceSize nbyte, SceOff offset); | |||
</source> | |||
=== sceIoReadAsyncForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x69047C81 | ||
|} | |} | ||
=== | Derived from <code>sceIoReadAsync</code> | ||
=== sceIoRemoveAsyncForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0xF9D6507D | ||
|} | |} | ||
=== | Derived from <code>_sceIoRemoveAsync</code> | ||
=== sceIoRenameAsyncForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0xAACBC47A | ||
|} | |} | ||
< | Derived from <code>_sceIoRenameAsync</code> | ||
=== | === sceIoRmdirAsyncForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0xF5B0B36C | ||
|} | |} | ||
=== | Derived from <code>_sceIoRmdirAsync</code> | ||
=== sceIoRmdirForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x1CC9C634 | ||
|} | |} | ||
=== | Derived from <code>_sceIoRmdir</code> | ||
<source lang="C">int sceIoRmdirForDriver(const char *dirname);</source> | |||
=== sceIoSyncByFdAsyncForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x041209CF | ||
|} | |} | ||
=== | Derived from <code>sceIoSyncByFdAsync</code> | ||
=== not_sceIoSyncByFd_maybe_SyncByFd2ForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || 0x43170575 | |||
| 3.60 || | |||
|} | |} | ||
=== | This function is not sceIoSyncByFdForDriver. | ||
Derived from <code>sceIoSyncByFd</code> | |||
<source lang="C">int not_sceIoSyncByFd_maybe_SyncByFd2ForDriver(SceUID fd, int flag);</source> | |||
=== sceIoSyncAsyncForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x4F9EA8B0 | ||
|} | |} | ||
< | Derived from <code>_sceIoSyncAsync</code> | ||
=== | === sceIoSyncForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || 0xDDF78594 | |||
| 3.60 || | |||
|} | |} | ||
=== | Derived from <code>_sceIoSync</code> | ||
<source lang="C">int sceIoSyncForDriver(const char *device, unsigned int flag);</source> | |||
=== sceIoWriteAsyncForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || 0xA1BD13D0 | |||
| 3.60 || | |||
|} | |} | ||
=== | Derived from <code>sceIoWriteAsync</code> | ||
=== sceIoGetProcessDefaultPriorityForSystemForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 0.990-3.60 || 0xCE397158 | ||
|} | |} | ||
=== | === sceIoSetProcessDefaultPriorityForSystemForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 0.990-3.60 || 0xABE65071 | ||
|} | |} | ||
=== | === sceIoDopenAsyncForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x72F06BDE | ||
|} | |} | ||
=== sceIoDcloseAsyncForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0xC08F199F | ||
|} | |} | ||
=== sceIoDreadAsyncForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x5982B0E3 | ||
|} | |} | ||
=== sceIoCreateMountEventForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x2DFA192F | ||
|} | |} | ||
=== | Derived from [[SceVshBridge#vshIoCreateMountEvent|vshIoCreateMountEvent]] | ||
<source lang="C">int sceIoCreateMountEventForDriver(int vshMountId, int flag);</source> | |||
=== sceIoCreateErrorEventForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x3C0343DB | ||
|} | |} | ||
Derived from [[SceVshBridge#vshIoCreateErrorEvent|vshIoCreateErrorEvent]] | |||
<source lang="C"> | <source lang="C"> | ||
typedef struct | typedef struct sceIoCreateErrorEventForDriverOpt { | ||
{ | uint32_t unk_0; | ||
uint32_t unk_4; | |||
uint32_t unk_8; | |||
uint32_t unk_C; | |||
uint32_t unk_10; | |||
uint32_t unk_14; | |||
} | uint32_t unk_18; | ||
} sceIoCreateErrorEventForDriverOpt; | |||
SceUID sceIoCreateErrorEventForDriver(int vshMountId, int flag, sceIoCreateErrorEventForDriverOpt* opt); | |||
</source> | </source> | ||
=== | === sceIoClearErrorEventForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x40B933C7 | ||
|} | |} | ||
=== | Derived from [[SceVshBridge#vshIoClearErrorEvent|vshIoClearErrorEvent]] | ||
<source lang="C">int sceIoClearErrorEventForDriver(SceUID uid);</source> | |||
=== sceIoDeleteMountEventForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x43DB0AE4 | ||
|} | |} | ||
Derived from [[SceVshBridge#vshIoDeleteMountEvent|vshIoDeleteMountEvent]] | |||
int | <source lang="C">int sceIoDeleteMountEventForDriver(SceUID uid);</source> | ||
</source> | |||
=== | === sceIoDeleteErrorEventForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || 0xC6158F8D | |||
| 3.60 || | |||
|} | |} | ||
=== | Derived from [[SceVshBridge#vshIoDeleteErrorEvent|vshIoDeleteErrorEvent]] | ||
<source lang="C">int sceIoDeleteErrorEventForDriver(SceUID uid);</source> | |||
=== sceIoSetMountEventForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 0.995-3.60 || 0x39ABDB9E | ||
|} | |} | ||
Temp name was sceIoInvokeMountEventForDriver. | |||
<source lang="C"> | |||
! | /* | ||
* (flags & 0x100) != 0 -> mount | |||
* (flags & 0x200) != 0 -> unmount | |||
*/ | |||
int sceIoSetMountEventForDriver(int vshMountId, int flags, int unk2, int unk3); | |||
</source> | |||
=== | === vfsUnlockMntByMntIdForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x5B7E5AB8 | ||
|} | |} | ||
This is a guessed name. | |||
Temp name was sceIoUmount2ForDriver. | |||
<source lang="C">int vfsUnlockMntByMntIdForDriver(int vshMountId);</source> | |||
=== | === sceIoSetPathMappingFunctionForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || 0xCFAECF18 | |||
| 3.60 || | |||
|} | |} | ||
=== | Used by [[SceAppMgr]]. | ||
Sets a callback function that does path mapping: | |||
* function tries to OverlayResolveSync input path | |||
* checks that it is not a PD path (Pseudo Drive mount point aquired by [[ScePfsMgr]]) | |||
* takes beginning of path until symbol ":" | |||
* tries to do a lookup by that path copy in data segment [[SceAppMgr#Data_segment_layout|global 0x3470C]] <code>mount_point_data_entry</code> item array | |||
* if item is found then <code>path</code> from <code>mount_point_data_entry</code> item is copied to <code>result_path</code> | |||
* in any other case OverlayResolveSync result path is copied to <code>result_path</code> | |||
<source lang="C"> | |||
typedef int ( SceIoPathMappingFunc)(const char *path, SceUID pid, char *result_path, SceSize size); | |||
int sceIoSetPathMappingFunctionForDriver(SceIoPathMappingFunc *func); | |||
</source> | |||
=== sceIoGetMediaTypeForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 0.990- | | 0.990-3.60 || 0x9C220246 | ||
|} | |} | ||
=== | Was wrongly named sceIoGetPathIdExForDriver. | ||
May also call callback function set by [[SceIofilemgr#sceIoSetPathMappingFunctionForDriver|sceIoSetPathMappingFunctionForDriver]]. | |||
This callback function does path mapping since result in result_path is passed to [[SceSblACMgr#sceSblACMgrGetMediaTypeForKernel|sceSblACMgrGetMediaTypeForKernel]]. | |||
<source lang="C">int sceIoGetMediaTypeForDriver(SceUID pid, const char *path, int ignored, int *media_type);</source> | |||
=== sceIoGetThreadDefaultPriorityForSystemForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || 0x6D0FEDB6 | |||
| 3.60 || | |||
|} | |} | ||
=== | <source lang="C">int sceIoGetThreadDefaultPriorityForSystemForDriver(void);</source> | ||
=== sceIoSetThreadDefaultPriorityForSystemForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || 0x3F0FF9D5 | |||
| 3.60 || | |||
|} | |} | ||
=== | === sceIoGetRemoteKPLSDataForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x44EDCE57 | ||
|} | |} | ||
=== | This is a guessed name. | ||
<source lang="C">int sceIoGetRemoteKPLSDataForDriver(SceUID pid, void *dst);</source> | |||
=== sceIoSetProcessFileOpenMaxNumberForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0xAC0E9AAA | ||
|} | |} | ||
<source lang="C"> | <source lang="C">int sceIoSetProcessFileOpenMaxNumberForDriver(SceUID pid, SceSize number);</source> | ||
=== sceIoSetProcessDirOpenMaxLevelForDriver === | |||
=== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x03F6A684 | ||
|} | |} | ||
=== | <source lang="C">int sceIoSetProcessDirOpenMaxLevelForDriver(SceUID pid, SceSize level);</source> | ||
=== sceIoCompleteForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x8F0DE34D | ||
|} | |} | ||
=== | <source lang="C">int sceIoCompleteForDriver(SceUID fd);</source> | ||
=== sceIoGetPriorityForSystemForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x9FCDCE62 | ||
|} | |} | ||
=== | <source lang="C">int sceIoGetPriorityForSystemForDriver(SceUID a1);</source> | ||
=== sceIoSetPriorityForSystemForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0xCCE94599 | ||
|} | |} | ||
=== | <source lang="C">int sceIoSetPriorityForSystemForDriver(SceUID a1, int a2);</source> | ||
=== sceIoSetErrorEventForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 0.995-3.60 || 0xDD46CD63 | ||
|} | |} | ||
Previously (wrongfully) called sceIoGetGUIDErrorEventListForDriver. | |||
=== | === sceIoSetDebuggerCallbackForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0xF4F8C59A | ||
|} | |||
=== sceIoGetGUIDFdListForDebuggerForDriver === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |- | ||
| 3.60 || | | 3.60 || 0xdcf75f6d | ||
|} | |} | ||
=== | === sceIoGetPUIDFdListForDebuggerForDriver === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0xd493274 | ||
|} | |} | ||
=== sceIoGetFileInfoForDriver === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0xa1ef2648 | ||
|} | |} | ||
=== | This is a guessed name. | ||
=== SceIofilemgrForDriver_12F8D58E === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x12F8D58E | ||
|} | |} | ||
get some value | |||
=== SceIofilemgrForDriver_15C17487 === | |||
=== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 0.996.090-3.740.011 || 0x15C17487 | ||
|} | |} | ||
=== | A possible name is sceIoSchedulerIssueAnotherIoRequestForDriver. | ||
<source lang="C">int SceIofilemgrForDriver_15C17487(int io_device_code);</source> | |||
=== SceIofilemgrForDriver_2EFDFA12 === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || 0x2EFDFA12 | |||
| 3.60 || | |||
|} | |} | ||
=== | set path by flags? | ||
<source>int SceIofilemgrForDriver_2EFDFA12(SceUID fd, char *path);</source> | |||
=== SceIofilemgrForDriver_3675ECB9 === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x3675ECB9 | ||
|} | |} | ||
could be sceIoSchedDispatcherFsResourceUnavailableForDriver. | |||
some node op. dec ctr. | |||
=== | === SceIofilemgrForDriver_3A79FAC9 === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || 0x3A79FAC9 | |||
| 3.60 || | |||
|} | |} | ||
=== | delete fd by flags | ||
<source>int SceIofilemgrForDriver_3A79FAC9(SceUID fd);</source> | |||
=== SceIofilemgrForDriver_6BEEDDB4 === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0x6BEEDDB4 | ||
|} | |} | ||
=== | setting some to fd of dir entry | ||
<source>int SceIofilemgrForDriver_6BEEDDB4(SceUID fd, int a2);</source> | |||
=== SceIofilemgrForDriver_B499287E === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0xB499287E | ||
|} | |} | ||
delete some puid from a1 | |||
<source>int SceIofilemgrForDriver_B499287E(void *a1, int n, int *num);</source> | |||
</source> | |||
=== | === SceIofilemgrForDriver_C722DF35 === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 3.60 || 0xC722DF35 | ||
|} | |} | ||
=== | some node op. inc ctr. | ||
=== sceIoSyncByFdForDriver === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 3.60 || 0x338dcd68 | |||
| 3.60 || | |||
|} | |} | ||
=== | == SceIofilemgr == | ||
=== _sceIoDcloseAsync === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 1.69 || 0x00B13031 | ||
|- | |- | ||
| 3.60 || different NID or not present | | 3.60 || different NID or not present | ||
|} | |} | ||
=== | === _sceIoOpenAsync === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69 | | 1.69-3.60 || 0x09CD0FC8 | ||
|} | |} | ||
=== | === sceIoGetProcessDefaultPriority === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || | | 1.69-3.60 || 0x0DC4F1BB | ||
|} | |} | ||
=== | === _sceIoRmdirAsync === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || 0xB4B021D9 | | 1.69-3.60 || 0x13DC3244 | ||
|} | |||
=== sceIoSetPriority === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x14B2D56C | |||
|} | |||
=== sceIoSyncByFd === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x16512F59 | |||
|} | |||
<source lang="C">int sceIoSyncByFd(SceUID fd, unsigned int unk);</source> | |||
=== _sceIoIoctl === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x1D2988F1 | |||
|} | |||
=== _sceIoLseekAsync === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x2300858E | |||
|} | |||
=== sceIoSetPriorityForSystem === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x27373135 | |||
|} | |||
=== _sceIoComplete === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69 || 0x34E6A06E | |||
|- | |||
| 3.60 || different NID or not present | |||
|} | |||
=== sceIoWrite === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x34EFD876 | |||
|} | |||
<source lang="C">int sceIoWrite(SceUID fd, const void *data, SceSize size);</source> | |||
=== _sceIoGetThreadDefaultPriorityForSystem === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69 || 0x36CAF911 | |||
|- | |||
| 3.60 || different NID or not present | |||
|} | |||
=== _sceIoSetThreadDefaultPriorityForSystem === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 0.990-1.69 || 0x38FE853B | |||
|- | |||
| 3.60 || different NID or not present | |||
|} | |||
=== sceIoFlockForSystem === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x3E98E422 | |||
|} | |||
=== _sceIoDevctlAsync === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x3EE3F66E | |||
|} | |||
=== sceIoDclose === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x422A221A | |||
|} | |||
<source lang="C">int sceIoDclose(SceUID fd);</source> | |||
=== _sceIoRename === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x4912F748 | |||
|} | |||
<source lang="C"> | |||
typedef struct sceIoRenameOpt { | |||
uint32_t unk_0; | |||
uint32_t unk_4; | |||
uint32_t unk_8; | |||
uint32_t unk_C; | |||
} sceIoRenameOpt; | |||
int _sceIoRename(const char *oldname, const char *newname, sceIoRenameOpt *opt); | |||
</source> | |||
=== sceIoLseek32 === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x49252B9B | |||
|} | |||
<source lang="C">int sceIoLseek32(SceUID fd, int offset, int whence);</source> | |||
=== sceIoSetThreadDefaultPriority === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x49312108 | |||
|} | |||
=== _sceIoDevctl === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.000.071-3.740.011 || 0x515AC017 | |||
|} | |||
This performs device-specific operations. The details of the operations are driver-dependent. | |||
This is a wrapper for [[#sceIoDevctlForDriver|sceIoDevctlForDriver]]. | |||
<source lang="C"> | |||
/* | |||
Arguments: | |||
devname Specified device ("<devname><unit>:") | |||
cmd Command code | |||
arg Pointer to device-driver-dependent parameter block | |||
arglen Number of bytes in device-driver-dependent parameter block | |||
bufp Pointer to return data storage block | |||
buflen Size of return data storage block | |||
Return Values: | |||
Non-negative (N>=0) Success (driver-dependent) | |||
<0 Error, e.g. SCE_ERROR_ERRNO_EMFILE, SCE_ERROR_ERRNO_ENODEV, SCE_ERROR_ERRNO_EUNSUP | |||
*/ | |||
typedef struct SceIoDevctlOpt { // size is 0x18 | |||
SceSize arglen; // Number of bytes in device-driver-dependent parameter block | |||
void *bufp; // Pointer to return data storage block | |||
SceSize buflen; // Size of return data storage block | |||
char reserved[0xC]; | |||
} SceIoDevctlOpt; | |||
int _sceIoDevctl( | |||
const char *devname, | |||
int cmd, | |||
const void *arg, | |||
const SceIoDevctlOpt *pOpt | |||
); | |||
</source> | |||
=== sceIoGetstatByFdAsync === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x5167AC1E | |||
|} | |||
=== _sceIoPread === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x539FD5C4 | |||
|} | |||
<source lang="C"> | |||
typedef struct sceIoPreadOpt { | |||
SceOff offset; | |||
uint32_t unk_8; | |||
uint32_t unk_C; | |||
} sceIoPreadOpt; | |||
int _sceIoPread(SceUID uid, void *buffer, SceSize size, sceIoPreadOpt *opt); | |||
// 3.60 | |||
typedef struct SceIoPreadSyscallArgs { | |||
void *buf; | |||
SceSize nbyte; | |||
SceOff offset; | |||
} SceIoPreadSyscallArgs; | |||
SceSSize _sceIoPread(SceUID fd, SceIoPreadSyscallArgs *args); | |||
</source> | |||
=== _sceIoGetstatByFdAsync === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69 || 0x554292F0 | |||
|- | |||
| 3.60 || different NID or not present | |||
|} | |||
=== _sceIoChstatByFdAsync === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69 || 0x58010F40 | |||
|- | |||
| 3.60 || different NID or not present | |||
|} | |||
=== _sceIoGetThreadDefaultPriority === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69 || 0x5DC29460 | |||
|- | |||
| 3.60 || different NID or not present | |||
|} | |||
=== _sceIoSync === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x5DD867F7 | |||
|} | |||
<source lang="C"> | |||
typedef struct sceIoSyncOpt { | |||
uint32_t unk_0; | |||
uint32_t unk_4; | |||
} sceIoSyncOpt; | |||
int _sceIoSync(const char* device, unsigned int unk, sceIoSyncOpt* opt); | |||
</source> | |||
=== _sceIoRemoveAsync === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x5FFA47E2 | |||
|} | |||
=== _sceIoDreadAsync === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69 || 0x64B233B8 | |||
|- | |||
| 3.60 || different NID or not present | |||
|} | |||
=== _sceIoSetThreadDefaultPriority === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 0.990-1.69 || 0x654E27B1 | |||
|- | |||
| 3.60 || different NID or not present | |||
|} | |||
=== _sceIoSyncByFdAsync === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69 || 0x6F78FAFE | |||
|- | |||
| 3.60 || different NID or not present | |||
|} | |||
=== _sceIoGetPriorityForSystem === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69 || 0x70B7BB52 | |||
|- | |||
| 3.60 || different NID or not present | |||
|} | |||
=== sceIoReadAsync === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x773EBD45 | |||
|} | |||
=== _sceIoRemove === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x78955C65 | |||
|} | |||
<source lang="C"> | |||
typedef struct sceIoRemoveOpt { | |||
uint32_t unk_0; | |||
uint32_t unk_4; | |||
} sceIoRemoveOpt; | |||
int _sceIoRemove(const char *filename, sceIoRemoveOpt* opt); | |||
</source> | |||
=== sceIoSyncByFdAsync === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x7E1367CB | |||
|} | |||
=== sceIoSetProcessDefaultPriority === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x7F2ABBAF | |||
|} | |||
=== _sceIoRenameAsync === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x81794921 | |||
|} | |||
=== _sceIoSyncAsync === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x86DB0C0E | |||
|} | |||
=== _sceIoDread === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x8713D662 | |||
|} | |||
<source lang="C">int _sceIoDread(SceUID fd, SceIoDirent *dir);</source> | |||
=== _sceIoWrite === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69 || 0x8C319CF0 | |||
|- | |||
| 3.60 || different NID or not present | |||
|} | |||
=== _sceIoGetstat === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x8E7E11F2 | |||
|} | |||
<source lang="C"> | |||
typedef struct sceIoGetstatOpt { | |||
uint32_t unk_0; | |||
uint32_t unk_4; | |||
} sceIoGetstatOpt; | |||
int _sceIoGetstat(const char *name, SceIoStat *buf, sceIoGetstatOpt *opt); | |||
</source> | |||
=== sceIoCloseAsync === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x8EA3616A | |||
|} | |||
=== _sceIoMkdir === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x8F1ACC32 | |||
|} | |||
<source lang="C"> | |||
typedef struct sceIoMkdirOpt { | |||
uint32_t unk_0; | |||
uint32_t unk_4; | |||
} sceIoMkdirOpt; | |||
int _sceIoMkdir(const char *dirname, SceIoMode mode, sceIoMkdirOpt opt); | |||
</source> | |||
=== _sceIoCompleteMultiple === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x9111D004 | |||
|} | |||
=== _sceIoLseek32 === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69 || 0x92BDA6DA | |||
|- | |||
| 3.60 || different NID or not present | |||
|} | |||
=== _sceIoPwrite === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0x9654094B | |||
|} | |||
<source lang="C"> | |||
typedef struct sceIoPwriteOpt { | |||
SceOff offset; | |||
uint32_t unk_8; | |||
uint32_t unk_C; | |||
} sceIoPwriteOpt; | |||
int _sceIoPwrite(SceUID uid, const void *data, int size, sceIoPwriteOpt *opt); | |||
// 3.60 | |||
typedef struct SceIoPwriteSyscallArgs { | |||
const void *buf; | |||
SceSize nbyte; | |||
SceOff offset; | |||
} SceIoPwriteSyscallArgs; | |||
SceSSize _sceIoPwrite(SceUID fd, SceIoPwriteSyscallArgs *args); | |||
</source> | |||
=== _sceIoGetPriority === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69 || 0x9E3F880D | |||
|- | |||
| 3.60 || different NID or not present | |||
|} | |||
=== sceIoGetThreadDefaultPriority === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0xA176CD03 | |||
|} | |||
=== _sceIoLseek === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0xA604764A | |||
|} | |||
<source lang="C"> | |||
typedef struct _sceIoLseekOpt { // size is 0x10 | |||
SceOff offset; | |||
int whence; | |||
uint32_t unk; | |||
} _sceIoLseekOpt; | |||
SceOff _sceIoLseek(SceUID fd, _sceIoLseekOpt* opt); | |||
// 3.60 | |||
typedef struct SceIoLseekSyscallArgs { | |||
SceOff offset; | |||
int whence; | |||
int padding; | |||
} SceIoLseekSyscallArgs; | |||
SceOff _sceIoLseek(SceUID fd, SceIoLseekSyscallArgs *args); | |||
</source> | |||
=== sceIoChstatByFdAsync === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0xA9F89275 | |||
|} | |||
=== _sceIoGetProcessDefaultPriority === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69 || 0xB0486482 | |||
|- | |||
| 3.60 || different NID or not present | |||
|} | |||
=== _sceIoSetPriority === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 0.990-1.69 || 0xB14192F0 | |||
|- | |||
| 3.60 || different NID or not present | |||
|} | |||
=== _sceIoReadAsync === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69 || 0xB2B891E6 | |||
|- | |||
| 3.60 || different NID or not present | |||
|} | |||
=== _sceIoPwriteAsync === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0xB2D0B2F4 | |||
|} | |||
=== _sceIoChstatAsync === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0xB4B021D9 | |||
|} | |||
=== sceIoSetThreadDefaultPriorityForSystem === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0xB9C9C9CF | |||
|} | |||
=== _sceIoPreadAsync === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0xBCF5684D | |||
|} | |||
=== sceIoDopenAsync === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0xC49C312F | |||
|} | |||
=== sceIoClose === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0xC70B8886 | |||
|} | |||
<source lang="C">int sceIoClose(SceUID fd);</source> | |||
=== _sceIoWriteAsync === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69 || 0xC92AF88F | |||
|- | |||
| 3.60 || different NID or not present | |||
|} | |||
=== _sceIoOpen === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0xCC67B6FD | |||
|} | |||
<source lang="C"> | |||
typedef struct sceIoOpenOpt { | |||
uint32_t unk_0; | |||
uint32_t unk_4; | |||
} sceIoOpenOpt; | |||
SceUID _sceIoOpen(const char *filename, int flag, SceIoMode mode, sceIoOpenOpt *opt); | |||
</source> | |||
=== sceIoCancel === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0xCEF48835 | |||
|} | |} | ||
=== | === sceIoComplete === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || | | 1.69-3.60 || 0xD1C49D2F | ||
|} | |} | ||
=== | === _sceIoChstat === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || | | 1.69-3.60 || 0xD2EE455F | ||
|} | |} | ||
=== | <source lang="C"> | ||
typedef struct sceIoChstatOpt { | |||
uint32_t unk_0; | |||
uint32_t unk_4; | |||
} sceIoChstatOpt; | |||
int _sceIoChstat(const char *name, const SceIoStat *stat, unsigned int cbit, sceIoChstatOpt *opt); | |||
</source> | |||
=== _sceIoSetProcessDefaultPriority === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || | | 0.990-1.69 || 0xD302DCB9 | ||
|- | |||
| 3.60 || different NID or not present | |||
|} | |} | ||
=== | === _sceIoGetstatAsync === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || | | 1.69-3.60 || 0xD414C89F | ||
|} | |} | ||
=== sceIoDcloseAsync === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69 | | 1.69-3.60 || 0xDC2D7D38 | ||
|} | |} | ||
=== | === _sceIoIoctlAsync === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || | | 1.69-3.60 || 0xE00DC256 | ||
|} | |} | ||
=== _sceIoChstatByFd === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
} | | 1.69-3.60 || 0xE0BE2A30 | ||
|} | |||
SceUID | <source lang="C">int _sceIoChstatByFd(SceUID fd, const SceIoStat *buf, unsigned int cbit);</source> | ||
</source> | |||
=== | === sceIoWriteAsync === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || | | 1.69-3.60 || 0xE0D63D2A | ||
|} | |} | ||
=== | === _sceIoGetstatByFd === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || | | 1.69-3.60 || 0xE6C53567 | ||
|} | |} | ||
=== | <source lang="C">int _sceIoGetstatByFd(SceUID fd, SceIoStat *stat);</source> | ||
=== _sceIoSetPriorityForSystem === | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || | | 0.990-1.69 || 0xE6C923B3 | ||
|- | |||
| 3.60 || different NID or not present | |||
|} | |||
=== _sceIoDopen === | |||
{| class="wikitable" | |||
|- | |||
! Version !! NID | |||
|- | |||
| 1.69-3.60 || 0xE6E614B5 | |||
|} | |} | ||
<source lang="C"> | <source lang="C"> | ||
typedef struct | typedef struct sceIoDopenOpt { | ||
{ | |||
uint32_t unk_0; | uint32_t unk_0; | ||
uint32_t unk_4; | uint32_t unk_4; | ||
} | } sceIoDopenOpt; | ||
SceUID _sceIoDopen(const char *dirname, sceIoDopenOpt *opt); | |||
</source> | </source> | ||
=== | === sceIoGetPriorityForSystem === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 1.69-3.60 || 0xEF5432ED | ||
|} | |} | ||
=== | === sceIoGetPriority === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || | | 1.69-3.60 || 0xF2A472A1 | ||
|} | |} | ||
=== | === _sceIoRead === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || | | 1.69-3.60 || different NID or not present | ||
|} | |} | ||
=== | === _sceIoSyncByFd === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || | | 1.69-3.60 || different NID or not present | ||
|} | |} | ||
=== | === _sceIoCloseAsync === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || | | 1.69-3.60 || different NID or not present | ||
|} | |} | ||
=== _sceIoDopenAsync === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || | | 1.69-3.60 || different NID or not present | ||
|} | |} | ||
=== | === sceIoDreadAsync === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || | | 1.69-3.60 || 0xF59F37B0 | ||
|} | |} | ||
=== _sceIoMkdirAsync === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| | | 1.69-3.60 || 0xF5C58B21 | ||
|} | |} | ||
=== | === _sceIoCancel === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || | | 1.69 || 0xF5DEEA19 | ||
|- | |||
| 3.60 || different NID or not present | |||
|} | |} | ||
=== _sceIoClose === | |||
== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || | | 1.69 || 0xF69FB394 | ||
|- | |||
| 3.60 || different NID or not present | |||
|} | |} | ||
=== | === _sceIoDclose === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69 | | 0.990-1.69 || 0xFAFF0002 | ||
| | |||
|- | |- | ||
| 3.60 || different NID or not present | |||
| | |||
|} | |} | ||
=== | === sceIoGetThreadDefaultPriorityForSystem === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || | | 1.69-3.60 || 0xFCBCEAED | ||
|} | |} | ||
=== | === sceIoRead === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || | | 1.69-3.60 || 0xFDB32293 | ||
|} | |} | ||
<source lang="C">sceIoRead(SceUID fd, void *data, SceSize size);</source> | |||
=== | === _sceIoRmdir === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
| 1.69-3.60 || | | 1.69-3.60 || 0xFFFB4D76 | ||
|} | |} | ||
<source lang="C"> | |||
typedef struct sceIoRmdirOpt { | |||
uint32_t unk_0; | |||
uint32_t unk_4; | |||
} sceIoRmdirOpt; | |||
int _sceIoRmdir(const char *dirname, sceIoRmdirOpt* opt); | |||
</source> | |||
int _sceIoRmdir(const char *dirname, sceIoRmdirOpt* opt); | |||
</source> | |||
== Device Drivers == | |||
[[Category:ARM]] | |||
[[Category:Kernel]] | |||
[[Category:Modules]] | [[Category:Modules]] | ||
[[Category: | [[Category:Library]] |
Latest revision as of 18:38, 19 June 2024
SceIofilemgr is the primary interface for file IO. Read File Management for more information on file IO.
Module
This module exists only in non-secure world. The SELF can be found in os0:kd/iofilemgr.skprx
.
Version | World | Privilege |
---|---|---|
0.990-3.60 | Non-secure | Kernel |
Libraries
Known NIDs
Version | Name | World | Visibility | NID |
---|---|---|---|---|
1.69-3.60 | SceIofilemgrForDriver | Non-secure | Kernel | 0x40FD29C7 |
1.69-3.60 | SceIofilemgr | Non-secure | User | 0xF2FF276E |
Debug callback type
Type | When |
---|---|
0x0 | Scheduled sceIoOpen start |
0x1 | Scheduled sceIoOpen end |
0x2 | sceVopOpen start |
0x3 | sceVopOpen end |
0x4 | Scheduled sceIoClose start |
0x5 | Scheduled sceIoClose end |
0x6 | sceVopClose start |
0x7 | sceVopClose end |
0x8 | Scheduled sceIoRead start |
0x9 | Scheduled sceIoRead end |
0xA | sceVopRead start |
0xB | sceVopRead end |
0xC | Scheduled sceIoWrite start |
0xD | Scheduled sceIoWrite end |
0xE | sceVopWrite start |
0xF | sceVopWrite end |
0x10 | Scheduled sceIoPread start |
0x11 | Scheduled sceIoPread end |
0x12 | sceVopPread start |
0x13 | sceVopPread end |
0x14 | Scheduled sceIoPwrite start |
0x15 | Scheduled sceIoPwrite end |
0x16 | sceVopPwrite start |
0x17 | sceVopPwrite end |
0x18 | Scheduled sceIoLseek start |
0x19 | Scheduled sceIoLseek end |
0x1A | sceVopLseek start |
0x1B | sceVopLseek end |
0x1C | Scheduled sceIoMkdir start |
0x1D | Scheduled sceIoMkdir end |
0x1E | sceVopMkdir start |
0x1F | sceVopMkdir end |
0x20 | Scheduled sceIoRmdir start |
0x21 | Scheduled sceIoRmdir end |
0x22 | sceVopRmdir start |
0x23 | sceVopRmdir end |
0x24 | Scheduled sceIoGetstat start |
0x25 | Scheduled sceIoGetstat end |
0x26 | sceVopGetstat start |
0x27 | sceVopGetstat end |
0x28 | Scheduled sceIoRemove start |
0x29 | Scheduled sceIoRemove end |
0x2A | sceVopRemove start |
0x2B | sceVopRemove end |
0x2C | Scheduled sceIoRename start |
0x2D | Scheduled sceIoRename end |
0x2E | sceVopRename start |
0x2F | sceVopRename end |
0x30 | - |
0x31 | - |
0x32 | Scheduled sceIoDopen start |
0x33 | Scheduled sceIoDopen end |
0x34 | sceVopDopen start |
0x35 | sceVopDopen end |
0x36 | Scheduled sceIoDread start |
0x37 | Scheduled sceIoDread end |
0x38 | sceVopDread start |
0x39 | sceVopDread end |
0x3A | Scheduled sceIoDclose start |
0x3B | Scheduled sceIoDclose end |
0x3C | sceVopDclose start |
0x3D | sceVopDclose end |
0x3E | Scheduled sceIoChstat start |
0x3F | Scheduled sceIoChstat end |
0x40 | sceVopChstat start |
0x41 | sceVopChstat end |
0x42 | Scheduled sceIoIoctl start |
0x43 | Scheduled sceIoIoctl end |
0x44 | sceVopIoctl start |
0x45 | sceVopIoctl end |
0x46 | Scheduled sceIoSync start |
0x47 | Scheduled sceIoSync end |
0x48 | sceVopSync start |
0x49 | sceVopSync end |
0x4A | Scheduled sceIoFgetstat start |
0x4B | Scheduled sceIoFgetstat end |
0x4C | sceVopFgetstat start/end |
0x4D | - |
0x4E | Scheduled sceIoFchstat start |
0x4F | Scheduled sceIoFchstat end |
0x50 | sceVopFchstat start |
0x51 | sceVopFchstat end |
0x52 | sceVopLookup start |
0x53 | sceVopLookup end |
0x54 | sceVopCreate start |
0x55 | sceVopCreate end |
0x56 | sceVopInactive start |
0x57 | sceVopInactive end |
0x58 | sceVopWhiteout start |
0x59 | - |
0x5A | sceVopWhiteout end |
0x5B | sceVopCleanup start |
0x5C | sceVopCleanup end |
0x5D | sceVfsOpMount start |
0x5E | sceVfsOpMount end |
0x5F | sceVfsOpUnmount start |
0x60 | sceVfsOpUnmount end |
0x61 | sceVfsOpDevctl start |
0x62 | sceVfsOpDevctl end |
0x63 | sceVfsOpSync start |
0x64 | sceVfsOpSync end |
0x65 | sceVfsOpDecodePathElem start |
0x66 | sceVfsOpDecodePathElem end |
Mount Points
This table is stored in data segment of SceIofilemgr as array of vfs_mount_point_info
elements.
When #sceVfsMountForDriver is executed, it finds vfs_add_data element by filesystem string and then selects appropriate mount scenario by devMinor and devMajor.
<rnd>
means random numeric string of length 13
See SceSdstor for "sdstor0:" Block Device.
Unix Mount | Dev Major | Dev Minor | fsName | assignName | blockdevName | VSH Mount Id | Comment |
---|---|---|---|---|---|---|---|
/PD<rnd> | 0x3 | 0x1001 | PFS_GDSD_INF | PD<rnd>0 | - | 0x0 | - |
/sd/exfat | 0x2030001 | 0x30002 | exfat | sd0: | sdstor0:ext-lp-act-entire | 0x100 | - |
/os/exfat | 0x1000001 | 0x1002 | exfat | os0: | sdstor0:int-lp-act-os | 0x200 | Formatted as FAT16. |
/vs/exfat | 0x1000001 | 0x1002 | exfat | vs0: | sdstor0:int-lp-ign-vsh | 0x300 | Formatted as FAT16. |
/vd/exfat | 0x1000001 | 0x10002 | exfat | vd0: | sdstor0:int-lp-ign-vshdata | 0x400 | Formatted as FAT16. |
/tm/exfat | 0x1000001 | 0x10002 | exfat | tm0: | sdstor0:int-lp-ign-vtrm | 0x500 | Formatted as FAT16. |
/ur/exfat | 0x1000001 | 0x50002 | exfat | ur0: | sdstor0:int-lp-ign-user | 0x600 | Formatted as exFAT. |
/ud/exfat | 0x1000001 | 0x10002 | exfat | ud0: | sdstor0:int-lp-ign-updater | 0x700 | Formatted as FAT16. |
/ux/exfat | 0x2020001 | 0x30002 | exfat | ux0: | External: sdstor0:xmc-lp-ign-userext Internal: sdstor0:int-lp-ign-userext |
0x800 | Formatted as exFAT. |
/gro/exfat | 0x2010001 | 0x21002 | exfat | gro0: | sdstor0:gcd-lp-ign-gamero | 0x900 | Formatted as exFAT. |
/grw/exfat | 0x2010001 | 0x20002 | exfat | grw0: | sdstor0:gcd-lp-ign-gamerw | 0xA00 | Formatted as exFAT. |
/sa/exfat | 0x1000001 | 0x1002 | exfat | sa0: | sdstor0:int-lp-ign-sysdata | 0xB00 | Formatted as FAT16. |
/pd/exfat | 0x1000001 | 0x1002 | exfat | pd0: | sdstor0:int-lp-ign-pidata | 0xC00 | Formatted as exFAT. |
/imc/exfat | 0x2020001 | 0x30002 | exfat | imc0: | sdstor0:int-lp-ign-userext | 0xD00 | Formatted as exFAT. |
/xmc/exfat | 0x2020001 | 0x30002 | exfat | xmc0: | sdstor0:xmc-lp-ign-userext | 0xE00 | Formatted as exFAT. |
/uma/exfat | 0x2030001 | 0x2 | exfat | uma0: | sdstor0:uma-lp-act-entire | 0xF00 | - |
/tty | 0x4000020 | 0x6003 | dummy_ttyp_dev_fs | tty | dummy_ttyp_dev_fs | 0x0 | - |
/dev | 0x10 | 0x3 | sdstor_dev_fs | sdstor0: | sd | 0x1 | - |
/md | 0x10 | 0x2003 | md_dev_fs | md0: | md | 0x2 | - |
/lma/exfat | 0x1 | 0x5 | exfat | lma0: | / | 0x10000 | - |
/lmb/exfat | 0x1 | 0x5 | exfat | lmb0: | / | 0x20000 | - |
/mfa/exfat | 0x1 | 0x5 | exfat | mfa0: | / | 0x50000 | - |
/mfb/exfat | 0x1 | 0x5 | exfat | mfb0: | / | 0x60000 | - |
/host | 0x3000004 | 0x8006 | - | host0: | deci4p_drfp_dev_fs | - | - |
Dev Minor
Mask | Value | Comment |
---|---|---|
0xFF | - | type |
0xFF00 | - | flags |
0xFF00 | 0x1000 | Read Only |
0xFF0000 | 0x10000 | Invalidate fd on susppend/resume within process/system |
0xFF0000 | 0x20000 | External media |
VFS Implementation
Information can be found on separate page VFS Implementation
Note
Max vfs node number is 0x1000.
Types
typedef struct SceIoMount { // size is 0x34-bytes void *mnt; int mntId; char assignName[0x20]; SceUInt32 openedEntryNum; SceBool unk_0x2C; int unk_0x30; } SceIoMount; typedef struct SceIoMountInfo { // size is 0x54C-bytes void *mnt; int mntId; char assignName[0x20]; SceUInt32 openedEntryNum; int unk_0x2C; int unk_0x30; int unk_0x34; int unk_0x38; int unk_0x3C; int unk_0x40; int unk_0x44; int unk_0x48; int unk_0x4C; int unk_0x50; int unk_0x54; int unk_0x58; int unk_0x5C; int unk_0x60; int unk_0x64; int unk_0x68; int unk_0x6C; int unk_0x70; int unk_0x74; int unk_0x78; int unk_0x7C; int unk_0x80; int unk_0x84; char unk_0x88[0x400]; int unk_0x488; char unk_0x48C[0x40]; char blockdevName[0x40]; char unk_0x50C[0x40]; } SceIoMountInfo; typedef struct vfs_node_info { // size is 0x38 char name[0x20]; vfs_node* node; // can be zero uint32_t unk_24; // probably size of vfs_node uint32_t unk_28; // probably flags vfs_node_info* node_info_2C; // can be zero vfs_node_info* node_info_30; // can be zero vfs_node_info* node_info_34; // can be zero } vfs_node_info; // It looks like this structure is used to get some response into "error" field // when executing sceKernelSignalCondTo calls. // This structure is used by SceIofileDaemon when it monitors mount/unmount async requests // in SceIofilemgrMount thread using SceIofilemgrMount conditional variable. // Upon completion it issues the signal and result of operation is stored in error field. // It looks like operations 1/2 are used for normal filesystems. // Operations 3/4 are used for PFS_GDSD_INF filesystem. typedef struct cond_ctx { uint32_t op_index; // operation index. 1,3 - mount. 2,4 - unmount uint32_t unk_4; uint32_t unk_8; uint32_t unk_C; uint32_t unk_10; uint32_t unk_14; uint32_t unk_18; uint32_t unk_1C; int error; // either error code or 0 cond_ctx* next; // 0 means end of list } cond_ctx; typedef struct ctx_19D4 { void* unk_0; uint32_t unk_4; vfs_node* offset; // Pool of vfs_nodes with 0x1000 elements. // It is used in sceVfsGetNewVnodeForDriver, mount/unmount and node find routines. uint32_t size; uint32_t count; uint32_t unk_14; uint32_t unk_18; uint32_t unk_1C; } ctx_19D4; typedef struct ctx_11C { //size is 0x220 void* unk_0; uint32_t unk_4; void* offset; // pointer to array of byte size 0x10000 with 0x40 elements of size 0x400 uint32_t size; uint32_t count; uint8_t data[0x20C]; } ctx_11C; typedef struct io_scheduler_dispatcher { //size is 0xB8 char unk_0[0x50]; io_scheduler* unk_50; // Internal storage io_scheduler* unk_54; // Gamecard io_scheduler* unk_58; // Removable media (memory card) io_scheduler* unk_5C; // Host File System (host0:) io_scheduler* unk_60; // Default uint32_t unk_64; // pointer to unknown module data section uint32_t unk_68; // SceIoSchedulerDispatcher fast mutex uint32_t unk_6C; char unk_70[0x30]; uint32_t unk_A0; uint32_t unk_A4; SceUID unk_A8; // SceIoSchedulerDispatcher event flag uid uint32_t unk_AC; // counter uint32_t unk_B0; // flag uint32_t unk_B4; // 0 } io_scheduler_dispatcher; typedef struct io_scheduler_item { // size is 0x14 - allocated from SceIoScheduler heap io_scheduler* unk_0; // parent uint32_t unk_4; // 0 uint32_t unk_8; // 0 uint32_t unk_C; // 0 uint32_t unk_10; // pointer to unknown module data section } io_scheduler_item; enum io_device_code { Internal = 0x100, Game_Card = 0x201, Removable = 0x202, Host_File_System = 0x300, Default = 0x0 }; typedef struct io_scheduler { //size is 0xA8 - allocated from SceIoScheduler heap io_device_code unk_0; io_scheduler_item* unk_4; // item 0 io_scheduler_item* unk_8; // item 1 io_scheduler_item* unk_C; // item 2 io_scheduler_item* unk_10; // item 3 io_scheduler_item* unk_14; // item 4 io_scheduler_item* unk_18; // item 5 io_scheduler_item* unk_1C; // item 6 io_scheduler_item* unk_20; // item 7 io_scheduler_item* unk_24; // item 8 io_scheduler_item* unk_28; // item 9 io_scheduler_item* unk_2C; // item 10 io_scheduler_item* unk_30; // item 11 io_scheduler_item* unk_34; // item 12 io_scheduler_item* unk_38; // item 13 io_scheduler_item* unk_3C; // item 14 io_scheduler_item* unk_40; // item 15 uint32_t unk_44; // flag1 0x40000 or 0x00 uint32_t unk_48; // flag2 0x40000 or 0x00 io_scheduler_dispatcher* unk_4C; // parent SceUID unk_50; // SceIoScheduler mutex SceUID unk_54; // SceIoScheduler cond char unk_58; // 0 char unk_59; // 0 char unk_5A; // 0 char unk_5B; // 0 uint32_t unk_5C; // 0 // this is probably a separate structure SceUID unk_60; // SceIoSchedWorker thread id SceUID unk_64; // SceIoScheduler mutex from self SceUID unk_68; // SceIoScheduler cond from self io_scheduler* unk_6C; // pointer to self uint32_t unk_70; // 0 uint16_t unk_74; // 0 uint16_t unk_76; // 0 uint32_t unk_78; // 0 uint32_t unk_7C; // 0 uint32_t unk_80; // uint32_t unk_84; // some flag uint32_t unk_88; //0x80 uint32_t unk_8C; //0x80 uint32_t unk_90; //0x80 uint32_t unk_94; //0x80 uint32_t unk_98; //0x80 uint32_t unk_9C; //0x80 uint32_t unk_A0; // 0 uint32_t unk_A4; // 0 } io_scheduler; // Context used for dispatching i/o operations typedef struct io_context { // size is 0xB8 on FW 3.60 uint32_t unk_0; uint32_t unk_4; uint32_t unk_8; uint32_t unk_C; uint16_t unk_10; uint16_t unk_12; uint16_t unk_14; uint16_t unk_16; void *data_0; // 0x18 uint32_t unk_1C; // 0x1C SceSize size_0; // 0x20 uint32_t io_op_index; // 0x24 uint32_t ioctlOutdata0; // 0x28 io_device_code device_code; // 0x2C, ioctlOutdata1 char async; // 0x30 char unk_31; char unk_32; char unk_33; SceUID pid; // 0x34, sceKernelGetProcessIdForDriver SceUID threadId; // 0x38, sceKernelGetThreadIdForDriver SceUID tlsPid; // 0x3C, sceKernelGetProcessIdFromTLSForDriver uint32_t unk_40; // 0x40, SceThreadmgrForDriver_332E127C uint32_t cpuMask; // 0x44, sceKernelGetThreadCpuAffinityMaskForDriver uint32_t threadPriority; // 0x48, sceKernelGetThreadCurrentPriorityForDriver void* list0; // 0x4C, pointer to some linked list with elements of size 0x14 uint32_t listSize; // 0x50, number of items in linst void* list1; // 0x54, pointer to some linked list with elements of size 0x14 uint32_t sizeOfList; // 0x58, size of list in bytes uint16_t state; // 0x5C, bit 16 of state where state = (MRC p15, 0, state, c13, c0, 3) uint16_t unk_5E; // 0x5E uint32_t unk_60; // 0x60 SceUID fd; // 0x64 void *data_1; // 0x68 uint32_t unk_6C; SceSize size_1; // 0x70 uint32_t unk_74; // 0x74 uint32_t unk_78; // 0x78, -1 uint32_t unk_7C; // 0x7C, -1 uint32_t op_result; // 0x80, result of i/o operation uint32_t unk_84; void* unk_88; uint32_t unk_8C; uint32_t unk_90; uint32_t unk_94; uint32_t unk_98; uint32_t unk_9C; uint32_t unk_A0; uint32_t unk_A4; uint32_t unk_A8; uint32_t unk_AC; SceUInt64 sytemTimeWide; // 0xB0, sceKernelGetSystemTimeWideForDriver } io_context; typedef struct _SceVfsFileObject_0995 { //SceVfsFileClass object - size is 0x40 on 0.995 /* SceKernelObject header not included in size nor structure */ SceInt32 unk_0x0; SceInt32 unk_0x4; SceInt64 unk_0x8; SceInt32 unk_0x10; //Set to 1 during sceVfsAllocateFile ScePID creator_pid; //Result of sceKernelGetProcessIdFromTLS() during sceVfsAllocateFile void* unk_0x18; //Pointer provided as a1 to sceVfsAllocateFile SceUIDVfsFileObject* next; //Pointer to next file in linked list - list head is in a1 SceInt32 unk_0x20; SceInt16 unk_0x24; char unk_0x26; //unused? SceInt8 unk_0x27; SceInt32 unk_0x28; //comes from a1->0x4C->0xC8 SceInt32 unk_0x2C; //((a1->0x4C->0x50 & 0x20000) << 1) | (a1->0x4C->0x50 & 0x10000) SceInt32 unk_0x30; char unk_0x34; //unused? SceInt8 unk_0x35; SceInt8 unk_0x36; SceInt8 unk_0x37; SceInt8 unk_0x38; SceInt8 unk_0x39; SceInt8 unk_0x3A; SceInt8 unk_0x3B; SceInt8 unk_0x3C; SceInt8 unk_0x3D; SceInt8 unk_0x3E; SceInt8 unk_0x3F; } SceUIDVfsFileObject_0995; typedef struct _SceUIDVfsFileObject { //SceUIDVfsFileClass object - size is 0x48 on 3.60 /* SceKernelObject header not included in size nor structure */ SceInt32 unk_0x0; SceInt32 unk_0x4; SceInt64 unk_0x8; SceInt32 unk_0x10; //Set to 1 during sceVfsAllocateFile ScePID creator_pid; //Result of sceKernelGetProcessIdFromTLS() during sceVfsAllocateFile void* unk_0x18; //Pointer provided as a1 to sceVfsAllocateFile SceUIDVfsFileObject* next; //Pointer to next file in linked list - list head is in a1 SceInt32 unk_0x20; //Zero'ed in constructor SceInt16 unk_0x24; char unk_0x26; //unused? SceInt8 unk_0x27; SceInt32 unk_0x28; //comes from a1->0x4C->0xC8 SceInt32 unk_0x2C; //((a1->0x4C->0x50 & 0x20000) << 1) | (a1->0x4C->0x50 & 0x10000) SceInt32 unk_0x30; char unk_0x34; //unused? SceInt8 unk_0x35; SceInt8 unk_0x36; SceInt8 unk_0x37; SceInt8 unk_0x38; //Zero'ed during constructor SceInt8 unk_0x39; //^ doing *(SceInt32*)(&file->unk_0x38) = 0; SceInt8 unk_0x3A; //^ SceInt8 unk_0x3B; //^ SceInt8 unk_0x3C; SceInt8 unk_0x3D; SceInt8 unk_0x3E; SceInt8 unk_0x3F; char unk_0x40[8]; //unknown type - haven't seen this used yet } SceUIDVfsFileObject; typedef struct SceVfsPath { //size is 0xC-bytes char *name; // could be `const char *`? SceSize name_len; char *path; // could be `const char *`? } SceVfsPath;
Data segment layout
Address | Size | Description |
---|---|---|
0x0000 | 0x4 | unknown |
0x0004 | 0x8 | some index returned from initialization function 0xb645c7ef in SceThreadmgrForDriver |
0x0008 | 0x4 | unknown |
0x000C | 0x4 | flag that enables usage of sceFiosKernel functions (like OverlayResolveSync) in i/o operations in transition from user to kernel |
0x00010 | 0x4 | flag that enables usage of sceFiosKernel functions (like OverlayResolveSync) in i/o operations in transition from user to kernel |
0x00014 | 0x4 | flag that enables usage of sceFiosKernel functions (like OverlayResolveSync) in i/o operations in transition from user to kernel |
0x00018 | 0x4 | flag that enables usage of sceFiosKernel functions (like OverlayResolveSync) in i/o operations in transition from user to kernel |
0x0001C | 0x4 | unknown |
0x0020 | 0x4 | SceIofileDevWaitForVC event flag SceUID
|
0x0024 | 0x4 | unknown |
0x0028 | 0x4 | SceIofileDevWaitForSD event flag SceUID
|
0x002C | 0x4 | pointed by vfs_mount_cc for SceIofileDevWaitForSD
|
0x0030 | 0x4 | SceIofileDevWaitForMC event flag SceUID
|
0x0034 | 0x4 | unknown |
0x0038 | 0x4 | pointed by vfs_mount_cc for SceIofileDevWaitForVC
|
0x003C | 0x4 | pointed by vfs_mount_cc for SceIofileDevWaitForMC
|
0x0040 | 0x10 | unknown |
0x0050 | 0x4 | address of some callback function called in all vfs operations |
0x0054 | 0x4 | SceIofile heap SceUID
|
0x0058 | 0x80 | unknown |
0x00D8 | 0x4 | SceIoVfsHeap heap SceUID
|
0x00DC | 0x4 | SceIoFileDebug memblock SceUID
|
0x00E0 | 0x3C | unknown |
0x011C | 0x4 | ctx_11C* pointer to structure |
0x0120 | 0x4C | unknown |
0x016C | 0x10 | char* static_buffers[4] - static buffers used instead of SceIoVfsHeap |
0x017C | 0x2C | SceClass for SceVfsFile
|
0x01A8 | 0x1500 | array of 96 elements of vfs_node_info |
0x16A8 | 0x4 | SceVfsRfsLock fast mutex
|
0x16AC | 0x3C | unknown |
0x16E8 | 0x2C | SceClass for SceIoMountEvent
|
0x1714 | 0xC | unknown |
0x1720 | 0x04 | cond_ctx* pointer to the linked list |
0x1724 | 0x4 | SceIoScheduler heap SceUID
|
0x1728 | 0xB8 | io_scheduler_dispatcher structure
|
0x17E0 | 0x2C | SceClass for SceIoAsyncEvent - used in all async i/o operations
|
0x180C | 0xC | unknown |
0x1818 | 0x2C | SceClass for SceIoErrorEvent
|
0x1844 | 0xC | unknown |
0x1850 | 0x4 | SceIofileDaemonLock fast mutex
|
0x1854 | 0x40 | unknown |
0x1894 | 0x4 | SceIofile fast mutex
|
0x1898 | 0x7C | unknown |
0x1914 | 0x4 | function pointer t_1914_callback |
0x1918 | 0x4 | SceIofileFlock fast mutex
|
0x191C | 0x44 | unknown |
0x1960 | 0x4 | some i/o flag |
0x1964 | 0x4 | flag that indicates that any i/o operation happened 1/0. changed by each i/o operation. cleared on suspend. |
0x1968 | 0x18 | unknown |
0x1980 | 0x4 | counter of not finished i/o operations. changed by each i/o operation. |
0x1984 | 0xC | unknown |
0x1990 | 0x4 | SceVfsMntlistLock fast mutex
|
0x1994 | 0x3C | unknown |
0x19D0 | 0x4 | vfs_mount* singly linked list |
0x19D4 | 0x1C | structure ctx_19D4 |
0x19F0 | 0x8 | unknown |
0x19F8 | 0x4 | address used for sceKernelCpuLockSuspendIntrStoreLRForDriver to lock 016C |
0x19FC | 0x4 | vfs_mount* pointer |
0x1A00 | 0x4 | SceVfsNcacheLock fast mutex
|
0x1A04 | 0x40 | unknown |
0x1A44 | 0x4 | address used for sceKernelCpuLockSuspendIntrStoreLRForDriver |
0x1A48 | 0x4 | unknown |
0x1A4C | 0x4 | SceVfsLock fast mutex
|
0x1A50 | 0x3C | unknown |
0x1A8C | 0x04 | SceIofilemgrMount thread SceUID
|
0x1A90 | 0x700 | array of 32 elements of vfs_mount_point_info |
0x2190 | 0x4 | SceIofilemgrMount cond SceUID
|
0x2194 | 0x4 | SceIofilemgrMount SceUID mutexid
|
0x2198 | 0x4 | flag that indicates that IoSchedulerDispatcher functionality is initialized 1/0 |
0x219C | 0x4 | unknown |
0x21A0 | 0x40 | unknown |
0x21E0 | 0x20 | unknown |
0x2200 | 0x04 | SceIofilemgrDaemon thread SceUID
|
0x2204 | 0x8 | unknown |
0x220C | 0x4 | SceIofilemgrDaemon event flag SceUID
|
0x2210 | 0x4 | void* to heap alloc of size 0x100 |
0x2214 | 0x4 | void* to heap alloc of size 0x100 |
0x2218 | 0x4 | = 3 |
0x221C | 0x20 | vfs_add_data dummy_ttyp_dev_fs node
|
SceIofilemgrForDriver
sceVfsOpDevctlForDriver
Version | NID |
---|---|
0.990-3.60 | 0xB07B307D |
sceVfsOpDecodePathElemForDriver
Version | NID |
---|---|
0.990-3.60 | 0xF7DAC0F5 |
sceVopOpenForDriver
Version | NID |
---|---|
0.990-3.60 | 0x76B79BEC |
sceVopCreateForDriver
Version | NID |
---|---|
0.990-3.60 | 0x9E347C7D |
sceVopCloseForDriver
Version | NID |
---|---|
0.990-3.60 | 0x40944C2E |
In logs it is sceVopClsoe.
sceVopLookupForDriver
Version | NID |
---|---|
0.931-3.60 | 0xA5A6A55C |
Temp name was sceVfsNodeInitializePartitionForDriver.
int sceVopLookupForDriver(SceVfsNode *pNode, SceVfsNode **ppNewNode, SceVfsPath *path_info, SceUInt32 flags);
sceVopReadForDriver
Version | NID |
---|---|
0.990-3.60 | 0x570388A5 |
sceVopWriteForDriver
Version | NID |
---|---|
0.990-3.60 | 0x9A68378D |
sceVopLseekForDriver
Version | NID |
---|---|
0.990-3.60 | 0xB2B13818 |
sceVopIoctlForDriver
Version | NID |
---|---|
0.990-3.60 | 0x333C904D |
sceVopRemoveForDriver
Version | NID |
---|---|
3.60 | 0xDC1E7EE4 |
sceVopMkdirForDriver
Version | NID |
---|---|
0.990-3.60 | 0x2F3F8C70 |
sceVopRmdirForDriver
Version | NID |
---|---|
0.990-3.60 | 0x1D551105 |
sceVopDopenForDriver
Version | NID |
---|---|
0.990-3.60 | 0x00C9C2DD |
sceVopDcloseForDriver
Version | NID |
---|---|
0.990-3.60 | 0x1350F5C7 |
sceVopDreadForDriver
Version | NID |
---|---|
0.990-3.60 | 0x77584C8F |
sceVopGetstatForDriver
Version | NID |
---|---|
0.990-3.60 | 0x50A63ACF |
sceVopChstatForDriver
Version | NID |
---|---|
0.990-3.60 | 0x1974FA92 |
sceVopRenameForDriver
Version | NID |
---|---|
0.990-3.60 | 0x36A794C7 |
sceVopPreadForDriver
Version | NID |
---|---|
0.990-3.60 | 0xABBC80E3 |
sceVopPwriteForDriver
Version | NID |
---|---|
0.990-3.60 | 0xA53C040D |
sceVopInactiveForDriver
Version | NID |
---|---|
0.990-3.60 | 0x8FB94521 |
sceVopLinkForDriver
Version | NID |
---|---|
3.60 | 0x942AA61F |
Temp name was sceVop_unk_offset_0x54_ForDriver.
sceVopUnlinkForDriver
Version | NID |
---|---|
3.60 | 0x0D8A806E |
Temp name was sceVop_unk_offset_0x58_ForDriver.
sceVopSyncForDriver
Version | NID |
---|---|
0.990-3.60 | 0x9CD96406 |
sceVopFgetstatForDriver
Version | NID |
---|---|
3.60 | 0x1DBCBB01 |
Temp name was sceVopGetStateByFdForDriver.
int sceVopFgetstatForDriver(SceVfsNode *pNode, SceVfsFileObject *pVfsFileObject, SceIoStat *stat);
sceVopFchstatForDriver
Version | NID |
---|---|
3.60 | 0x082AFD7F |
Temp name was sceVopChstatByFdForDriver.
int sceVopFchstatForDriver(SceVfsNode *pNode, SceVfsFileObject *pObject, SceIoStat *stat, int bit);
sceVopWhiteoutForDriver
Version | NID |
---|---|
0.996-3.60 | 0xF53399BC |
Temp name was sceVopTrashForDriver.
Move target node entry file/directory to xx0:/SceIoTrash/
.
sceVopCleanupForDriver
Version | NID |
---|---|
3.60 | 0x0F7E1718 |
Temp name was sceVop_unk_offset_0x6C_ForDriver.
sceVopZerofillForDriver
Version | NID |
---|---|
0.996-3.60 | 0xEEAE8B51 |
Temp name was sceVop_unk_offset_0x70_ForDriver.
vfsIsLockedMntForDriver
Version | NID |
---|---|
3.60 | 0xC468B5EF |
some thread op
vfsBuffCacheCtlForDriver
Version | NID |
---|---|
3.60 | 0xA7020B0D |
Configures the IO Buffer Cache for vp
int vfsBuffCacheCtlForDriver(SceVfsNode *vp, int data_cache_size, int way, int line_size,int io_size);
vfsBuffCacheFreeForDriver
Version | NID |
---|---|
3.60 | 0xD6AB5E4B |
some node op
vfsLockVnodeForDriver
Version | NID |
---|---|
0.995-3.60 | 0xAA45010B |
Temp name was sceVfsNodeWaitEventFlagForDriver, sceVfsLockVnodeForDriver.
calls sceKernelWaitEventFlagForDriver
using event_flag_SceVfsVnode
from vfs_node
1. If the ownerId of the locked vnode is -1 (no anyone), set own thread as owner and leave the function.
2. If the ownerId is already mine, increment recursiveCount and leave the function.
3. If we get here we increment waiter.
4. Just to be sure, we do a check for 1 again and if the ownerId is -1, we set the ownerId to ourselves in the thread, then decrement waiter and leave the function.
5. If you've come this far, wait for the other owner to unlock the vnode with sceKernelWaitEventFlag.
6. Decrement the waiter and set the ownerId to its own thread and leave the function.
int vfsLockVnodeForDriver(vfs_node *node);
vfsUnlockVnodeForDriver
Version | NID |
---|---|
0.990-3.60 | 0x6048F245 |
Temp name was sceVfsNodeSetEventFlagForDriver, sceVfsUnlockVnodeForDriver.
calls sceKernelSetEventFlagForDriver
using event_flag_SceVfsVnode
from vfs_node
1. The function fails if the ownerId is not its own thread.
2. If recursiveCount is not 0, decrement recursiveCount and leave the function.
3. If recursiveCount is 0, checks waiter value.
4. If waiter is not 0, set ownerId to 0xfffffffd, then notify other waiting threads of unlock with sceKernelSetEventFlag and leave the function.
5. Check ownerId and waiter again and execute 4 if there is a discrepancy with the first check.
6. Set waiter to 0 and ownerId to -1 and leave the function.
int vfsUnlockVnodeForDriver(vfs_node* node);
vfsMountForDriver
Version | NID |
---|---|
0.990-3.60 | 0xB62DE9A6 |
This is a guessed name.
Temp name was sceVfsMountForDriver.
int vfsMountForDriver(vfs_mount_point_info_base *mnt);
vfsUmountForDriver
Version | NID |
---|---|
1.69-3.60 | 0x9C7E7B76 |
Temp name was sceVfsUnmountForDriver.
int vfsUmountForDriver(vfs_unmount_data *data);
sceVfsAddVfsForDriver
Version | NID |
---|---|
0.990-3.60 | 0x673D2FCD |
Used by SceSdstor, SceTty2uart, SceKernelBlueScreenOfDeath.
int sceVfsAddVfsForDriver(vfs_add_data *data);
sceVfsDeleteVfsForDriver
Version | NID |
---|---|
1.69-3.60 | 0x9CBFA725 |
int sceVfsDeleteVfsForDriver(const char *name, void **deleted_node);
vfsMountForPFSForDriver
Version | NID |
---|---|
3.60 | 0xFEEE44A9 |
Temp name was scePfsMgrVfsMountForDriver.
operation index 3 in cond_ctx
// this function can be used with PFS_GDSD_INF filesystem int vfsMountForPFSForDriver(vfs_mount_point_info_base *mnt, int unk1, int unk2);
vfsUmountForPFSForDriver
Version | NID |
---|---|
3.60 | 0xD220539D |
This is a guessed name.
Temp name was scePfsMgrVfsUmountForDriver.
operation index 4 in cond_ctx
int vfsUmountForPFSForDriver(vfs_unmount_data* umnt, int unk1, int unk2);
vfsLockMntForDriver
Version | NID |
---|---|
3.60 | 0x6B3CA9F7 |
Temp name was sceVfsLockMntForDriver.
vfsUnlockMntForDriver
Version | NID |
---|---|
3.60 | 0xDC2D8BCE |
Temp name was sceVfsUnlockMntForDriver.
vfsGetNewVnodeForDriver
Version | NID |
---|---|
0.990-3.60 | 0xD60B5C63 |
Temp name was sceVfsGetNewVnodeForDriver.
int vfsGetNewVnodeForDriver(vfs_mount *mnt, node_ops2 *ops, int unused, vfs_node **node);
vfsFreeVnodeForDriver
Version | NID |
---|---|
0.990-3.60 | 0x21D57633 |
Temp name was sceVfsFreeVnodeForDriver.
vfsIsOwnerForDriver
Version | NID |
---|---|
3.60 | 0xC3AE93A2 |
This is a guessed name.
Temp name was sceIoComparisonCurrentThreadIdForDriver.
SceBool vfsIsOwnerForDriver(void *vp);
vfsGetVnodeNameForDriver
Version | NID |
---|---|
0.990-3.60 | 0xAA253B68 |
Temp name was sceVfsGetVnodeNameForDriver.
int vfsGetVnodeNameForDriver(SceVfsNode *vp, char *name, SceSize n, SceSize *result);
vfsAllocateFileForDriver
Version | NID |
---|---|
0.995-3.60 | 0xBBAC1751 |
Temp name was sceVfsAllocateFileForDriver.
Creates a SceUIDVfsFileClass
object and returns UID and pointer to created object.
// type of a1 is unknown for now - at least 0x98 bytes wide // FW 0.995 SceUID vfsAllocateFileForDriver(void *vp, SceUIDVfsFileObject **ppFile); // FW 3.60 // If name is NULL, default name (same as 0.995, "SceVfsFile") is used as object name // Else, name will be created with snprintf("file %s %s", something_from_a1, name); SceUID vfsAllocateFileForDriver(void *vp, SceVfsFileObject **ppFile, const char *name);
vfsAllocateFileDummyForDriver
Version | NID |
---|---|
3.60 | 0xCDF3EF52 |
This is a guessed name.
SceUID vfsAllocateFileDummyForDriver(int flags, SceBool is_dir, const char *name);
vfsFreeFileForDriver
Version | NID |
---|---|
0.990-3.60 | 0xC85E33A2 |
Temp name was sceVfsFreeFileForDriver.
Frees a file created with vfsAllocateFileForDriver.
SceInt32 vfsFreeFileForDriver(void *vp, SceUID file_uid);
vfsRmdevForDriver
Version | NID |
---|---|
3.60 | 0x69A7E076 |
Temp name was sceVfsRmdevForDriver.
vfsOpenForDriver
Version | NID |
---|---|
3.60 | 0x0E518FA9 |
Temp name was t_sceIoOpenForDriver, sceVfsOpenForDriver.
thread callback for sceIoOpenForDriver
typedef struct SceVfsOpenArgs { const char *filename; int flag; SceIoMode mode; } SceVfsOpenArgs; SceUID vfsOpenForDriver(SceVfsOpenArgs *argp);
vfsCloseForDriver
Version | NID |
---|---|
3.60 | 0x1AE14011 |
Temp name was t_sceIoCloseForDriver, sceVfsCloseForDriver.
thread callback for sceIoCloseForDriver
typedef struct SceVfsCloseArgs { SceUID fd; } SceVfsCloseArgs; int vfsCloseForDriver(SceVfsCloseArgs *argp);
vfsReadForDriver
Version | NID |
---|---|
3.60 | 0x809892C1 |
Temp name was t_sceIoReadForDriver, sceVfsReadForDriver.
thread callback for sceIoReadForDriver
typedef struct SceVfsReadArgs { SceUID fd; void *data; SceSize size; } SceVfsReadArgs; int vfsReadForDriver(SceVfsReadArgs *argp);
vfsWriteForDriver
Version | NID |
---|---|
3.60 | 0x8598ADC3 |
Temp name was t_sceIoWriteForDriver, sceVfsWriteForDriver.
thread callback for sceIoWriteForDriver
typedef struct SceVfsWriteArgs { SceUID fd; const void *data; SceSize size; } SceVfsWriteArgs; int vfsWriteForDriver(SceVfsWriteArgs *argp);
vfsIoctlForDriver
Version | NID |
---|---|
3.60 | 0xC1DD4317 |
This is a guessed name.
Temp name was t_sceIoIoctlForDriver, sceVfsIoctlForDriver.
thread callback for sceIoIoctlForDriver
typedef struct SceVfsIoctlArgs { SceUID fd; unsigned int cmd; void *indata; int inlen; void *outdata; int outlen; } SceVfsIoctlArgs; int vfsIoctlForDriver(SceVfsIoctlArgs *argp);
vfsChstatForDriver
Version | NID |
---|---|
3.60 | 0xBCE4865B |
Temp name was t_sceIoChstatForDriver, sceVfsChstatForDriver.
thread callback for sceIoChstatForDriver
typedef struct SceVfsChstatArgs { const char *path; const SceIoStat *stat; unsigned int cbit; uint32_t store_attr; } SceVfsChstatArgs; int vfsChstatForDriver(SceVfsChstatArgs *argp);
vfsChstatByFdForDriver
Version | NID |
---|---|
3.60 | 0x7517FE29 |
Temp name was t_sceIoChstatByFdForDriver, sceVfsChstatByFdForDriver.
thread callback for sceIoChstatByFdForDriver
typedef struct SceVfsChstatByFdArgs { SceUID fd; const SceIoStat *buf, unsigned int cbit; } SceVfsChstatByFdArgs; int vfsChstatByFdForDriver(SceVfsChstatByFdArgs *args);
vfsPreadForDriver
Version | NID |
---|---|
3.60 | 0x0B54F9E0 |
Temp name was t_sceIoPreadForDriver, sceVfsPreadForDriver.
thread callback for sceIoPreadForDriver
typedef struct SceVfsPreadArgs { SceUID uid; void *data; SceSize size; int paddind; // unused SceOff offset; } SceVfsPreadArgs; int vfsPreadForDriver(SceVfsPreadArgs *argp);
vfsPwriteForDriver
Version | NID |
---|---|
3.60 | 0xE5DEA6B7 |
Temp name was t_sceIoPwriteForDriver, sceVfsPwriteForDriver.
thread callback for sceIoPwriteForDriver
typedef struct SceVfsPwriteArgs { SceUID uid; const void *data; SceSize size; int padding; SceOff offset; } SceVfsPwriteArgs; int vfsPwriteForDriver(SceVfsPwriteArgs *argp);
vfsGetMntInfoForDriver
Version | NID |
---|---|
3.60 | 0xB987450D |
This is a guessed name.
Temp name was sceIoGetMountInfoForDriver.
int vfsGetMntInfoForDriver(void *mnt, SceIoMountInfo *pInfo);
vfsGetMntListForDriver
Version | NID |
---|---|
3.60 | 0xC20C621C |
This is a guessed name.
Temp name was sceIoGetMountVectorForDriver.
int vfsGetMntList(SceIoMount *pMount, SceUInt32 nMount, SceUInt32 *pnMount);
sceIoMountForDriver
Version | NID |
---|---|
3.60 | 0xD070BC48 |
operation index 1 in cond_ctx
// intermediate function between sceAppMgrGameDataMountForDriver and sceVfsMountForDriver int sceIoMountForDriver(int vshMountId, const char *path, int flags, int unk3, int arg_0, int arg_4);
sceIoUmountForDriver
Version | NID |
---|---|
3.60 | 0x20574100 |
operation index 2 in cond_ctx
// intermediate function between sceAppMgrUmountForDriver and sceVfsUnmountForDriver int sceIoUmountForDriver(int vshMountId, int unk1, int unk2, int unk3);
sceIoRmdevForDriver
Version | NID |
---|---|
0.990-3.60 | 0xA39A9CA7 |
Like sceIoRemove?
The difference with sceIoRemove is that sceIoRmdev seems to remove the entry to be deleted directly without moving it to SceIoTrash.
int sceIoRmdevForDriver(const char *path, int flags, int a3, int a4);
sceIoDelDrvForDriver
Version | NID |
---|---|
0.931 | 0xD51774E3 |
3.60 | not present |
Example: "tty"
int sceIoDelDrvForDriver(const char *drv);
sceIoAddDrvForDriver
Version | NID |
---|---|
0.931 | 0x1D8AC9A7 |
3.60 | not present |
int sceIoAddDrvForDriver(const char **drv);
sceIoDreadForDriver
Version | NID |
---|---|
1.69-3.60 | 0x20CF5FC7 |
Call interface is same as sceIoDread
.
int sceIoDreadForDriver(SceUID fd, SceIoDirent *dir);
sceIoDreadForVshbridgeForDriver
Version | NID |
---|---|
0.995-3.60 | 0x03051B02 |
Temp name was sceIoDreadForDriver_2. Derived from _vshIoDread.
Implementation is completely the same as sceIoDreadForDriver. The only difference is that st_attr in SceIoStat is not set.
int sceIoDreadForVshbridgeForDriver(SceUID fd, SceIoDirent *dir);
sceIoWriteForDriver
Version | NID |
---|---|
1.69-3.60 | 0x21EE91F0 |
Call interface is same as sceIoWrite
int sceIoWriteForDriver(SceUID fd, const void *data, SceSize size);
sceIoDopenForDriver
Version | NID |
---|---|
1.69-3.60 | 0x463B25CC |
Call interface is same as sceIoDopen
SceUID sceIoDopenForDriver(const char *dirname);
sceIoLseekForDriver
Version | NID |
---|---|
0.931-3.60 | 0x62090481 |
Call interface is same as sceIoLseek
SceOff sceIoLseekForDriver(SceUID fd, SceOff offset, int whence);
sceIoOpenForDriver
Version | NID |
---|---|
0.931-3.60 | 0x75192972 |
Call interface is same as sceIoOpen.
If the process is game or non-game, the `SCE_O_NOBUF` flag will be ignored.
SceUID sceIoOpenForDriver(const char *filename, int flag, SceIoMode mode);
sceIoOpenForPidForDriver
Version | NID |
---|---|
3.60 | 0xC3D34965 |
This is a wrapper for sceIoOpenForDriver.
Pid is used for sceFiosKernelOverlayResolveSyncForDriver
.
SceUID sceIoOpenForPidForDriver(SceUID pid, const char *filename, int flag, SceIoMode mode);
sceIoChstatForDriver
Version | NID |
---|---|
1.69-3.60 | 0x7D42B8DC |
Call interface is same as sceIoChstat
int sceIoChstatForDriver(const char *name, const SceIoStat *buf, unsigned int cbit);
sceIoChstatForVshbridgeForDriver
Version | NID |
---|---|
0.995-3.60 | 0x1F98BD50 |
Temp name was sceIoChstatForDriver_2. Derived from _vshIoChstat.
Implementation is completely the same as sceIoChstatForDriver
. The only difference is that (bits = bits & (~0x10000)) operation is not applied.
int sceIoChstatForVshbridgeForDriver(const char *name, const SceIoStat *buf, unsigned int cbit);
sceIoGetstatForDriver
Version | NID |
---|---|
1.69-3.60 | 0x75C96D25 |
Call interface is same as sceIoGetstat
.
int sceIoGetstatForDriver(const char *name, SceIoStat *buf);
sceIoGetstatForVshbridgeForDriver
Version | NID |
---|---|
0.995-3.60 | 0xD6503624 |
Temp name was sceIoGetstatForDriver_2. Derived from _vshIoGetstat.
Implementation is completely the same as sceIoGetstatForDriver. The only difference is that st_attr in SceIoStat *buf is not set.
int sceIoGetstatForVshbridgeForDriver(const char *name, SceIoStat *buf);
sceIoMkdirForDriver
Version | NID |
---|---|
1.69-3.60 | 0x7F710B25 |
Call interface is same as sceIoMkdir
int sceIoMkdirForDriver(const char *dirname, SceIoMode mode);
sceIoReadForDriver
Version | NID |
---|---|
1.69-3.60 | 0xE17EFC03 |
Call interface is same as sceIoRead
int sceIoReadForDriver(SceUID fd, void *buf, SceSize nbyte);
sceIoCloseForDriver
Version | NID |
---|---|
1.69-3.60 | 0xF99DD8A3 |
Call interface is same as sceIoClose
int sceIoCloseForDriver(SceUID fd);
sceIoRenameForDriver
Version | NID |
---|---|
1.69-3.60 | 0xDC0C4997 |
Call interface is same as sceIoRename
int sceIoRenameForDriver(const char *oldname, const char *newname);
sceIoRemoveForDriver
Version | NID |
---|---|
1.69-3.60 | 0x0D7BB3E1 |
Call interface is same as sceIoRemove
int sceIoRemoveForDriver(const char *filename);
sceIoCancelForDriver
Version | NID |
---|---|
3.60 | 0x6D59658D |
Derived from sceIoCancel
sceIoChstatAsyncForDriver
Version | NID |
---|---|
3.60 | 0x7EC442BF |
Derived from _sceIoChstatAsync
sceIoChstatByFdAsyncForDriver
Version | NID |
---|---|
3.60 | 0xEC974400 |
Derived from sceIoChstatByFdAsync
sceIoChstatByFdForDriver
Version | NID |
---|---|
3.60 | 0xDF57A75F |
Derived from _sceIoChstatByFd
int sceIoChstatByFdForDriver(SceUID fd, const SceIoStat *buf, unsigned int cbit);
sceIoCloseAsyncForDriver
Version | NID |
---|---|
3.60 | 0x11C57CC6 |
Derived from sceIoCloseAsync
sceIoDevctlAsyncForDriver
Version | NID |
---|---|
3.60 | 0xA9302946 |
Derived from _sceIoDevctlAsync
sceIoDevctlForDriver
Version | NID |
---|---|
0.990.000-3.740.011 | 0x16882FC4 |
cmd list
handler | cmd | function |
---|---|---|
sdstor | 1 | Update ctx info |
sdstor | 2 | Format rm |
sdstor | 3 | Set some intr flag |
sdstor | 4 | remove |
sdstor | 5 | insert |
sdstor | 6 | sceSdErase |
sdstor | 7 | sdctrl_invalidate_partition with check |
sdstor | 8 | sdctrl_invalidate_partition |
exfat | 0x3001 | get_drive_information |
exfat | 0x3004 | set_fake_free |
exfat | 0x3005 | clear_fake_free |
exfat | 0x3802 | set_whiteout_directory |
exfat | 0x3803 | delete_whiteout_entry |
exfat | 0x80000001 | _get_file_size_limit |
Derived from _sceIoDevctl.
This performs device-specific operations. The details of the operations are driver-dependent.
It has the same prototype as SceLibKernel#sceIoDevctl.
/* Arguments: devname Specified device ("<devname><unit>:") cmd Command code arg Pointer to device-driver-dependent parameter block arglen Number of bytes in device-driver-dependent parameter block bufp Pointer to return data storage block buflen Size of return data storage block Return Values: Non-negative (N>=0) Success (driver-dependent) <0 Error, e.g. SCE_ERROR_ERRNO_EMFILE, SCE_ERROR_ERRNO_ENODEV, SCE_ERROR_ERRNO_EUNSUP */ int sceIoDevctlForDriver( const char *devname, int cmd, const void *arg, SceSize arglen, void *bufp, SceSize buflen );
sceIoDcloseForDriver
Version | NID |
---|---|
3.60 | 0x19C81DD6 |
Derived from sceIoDclose
int sceIoDcloseForDriver(SceUID fd);
sceIoFlockForDriver
Version | NID |
---|---|
3.60 | 0x16336A0D |
Derived from sceIoFlockForSystem
sceIoGetstatByFdAsyncForDriver
Version | NID |
---|---|
3.60 | 0x0FEE1238 |
Derived from sceIoGetstatByFdAsync
sceIoGetstatByFdForDriver
Version | NID |
---|---|
3.60 | 0x462F059B |
Derived from _sceIoGetstatByFd
// Return: 0 on success int sceIoGetstatByFdForDriver(SceUID fd, SceIoStat *buf);
sceIoGetstatAsyncForDriver
Version | NID |
---|---|
3.60 | 0x94A5304A |
Derived from _sceIoGetstatAsync
sceIoIoctlAsyncForDriver
Version | NID |
---|---|
3.60 | 0xB761E91B |
Derived from _sceIoIoctlAsync
sceIoIoctlForDriver
Version | NID |
---|---|
3.60 | 0x161CD33F |
Derived from _sceIoIoctl
// Return: >=0 on success (driver-dependent) int sceIoIoctlForDriver(SceUID fd, int cmd, const void *argp, SceSize arglen, void *bufp, SceSize buflen);
sceIoLseekAsyncForDriver
Version | NID |
---|---|
3.60 | 0x541BAABD |
Derived from _sceIoLseekAsync
sceIoMkdirAsyncForDriver
Version | NID |
---|---|
3.60 | 0x27003443 |
Derived from _sceIoMkdirAsync
sceIoOpenAsyncForDriver
Version | NID |
---|---|
3.60 | 0x451001DE |
Derived from _sceIoOpenAsync
sceIoPreadAsyncForDriver
Version | NID |
---|---|
3.60 | 0x64A46A2C |
Derived from _sceIoPreadAsync
sceIoPreadForDriver
Version | NID |
---|---|
3.60 | 0x2A17515D |
Derived from _sceIoPread
// Return: Number of bytes actually read int sceIoPreadForDriver(SceUID uid, void *data, int size, SceOff offset);
sceIoPwriteAsyncForDriver
Version | NID |
---|---|
3.60 | 0x202CDDE3 |
Derived from _sceIoPwriteAsync
sceIoPwriteForDriver
Version | NID |
---|---|
3.60 | 0x5F1512C8 |
Derived from _sceIoPwrite
// Return: Number of bytes actually written int sceIoPwriteForDriver(SceUID fd, const void *buf, SceSize nbyte, SceOff offset);
sceIoReadAsyncForDriver
Version | NID |
---|---|
3.60 | 0x69047C81 |
Derived from sceIoReadAsync
sceIoRemoveAsyncForDriver
Version | NID |
---|---|
3.60 | 0xF9D6507D |
Derived from _sceIoRemoveAsync
sceIoRenameAsyncForDriver
Version | NID |
---|---|
3.60 | 0xAACBC47A |
Derived from _sceIoRenameAsync
sceIoRmdirAsyncForDriver
Version | NID |
---|---|
3.60 | 0xF5B0B36C |
Derived from _sceIoRmdirAsync
sceIoRmdirForDriver
Version | NID |
---|---|
3.60 | 0x1CC9C634 |
Derived from _sceIoRmdir
int sceIoRmdirForDriver(const char *dirname);
sceIoSyncByFdAsyncForDriver
Version | NID |
---|---|
3.60 | 0x041209CF |
Derived from sceIoSyncByFdAsync
not_sceIoSyncByFd_maybe_SyncByFd2ForDriver
Version | NID |
---|---|
3.60 | 0x43170575 |
This function is not sceIoSyncByFdForDriver.
Derived from sceIoSyncByFd
int not_sceIoSyncByFd_maybe_SyncByFd2ForDriver(SceUID fd, int flag);
sceIoSyncAsyncForDriver
Version | NID |
---|---|
3.60 | 0x4F9EA8B0 |
Derived from _sceIoSyncAsync
sceIoSyncForDriver
Version | NID |
---|---|
3.60 | 0xDDF78594 |
Derived from _sceIoSync
int sceIoSyncForDriver(const char *device, unsigned int flag);
sceIoWriteAsyncForDriver
Version | NID |
---|---|
3.60 | 0xA1BD13D0 |
Derived from sceIoWriteAsync
sceIoGetProcessDefaultPriorityForSystemForDriver
Version | NID |
---|---|
0.990-3.60 | 0xCE397158 |
sceIoSetProcessDefaultPriorityForSystemForDriver
Version | NID |
---|---|
0.990-3.60 | 0xABE65071 |
sceIoDopenAsyncForDriver
Version | NID |
---|---|
3.60 | 0x72F06BDE |
sceIoDcloseAsyncForDriver
Version | NID |
---|---|
3.60 | 0xC08F199F |
sceIoDreadAsyncForDriver
Version | NID |
---|---|
3.60 | 0x5982B0E3 |
sceIoCreateMountEventForDriver
Version | NID |
---|---|
3.60 | 0x2DFA192F |
Derived from vshIoCreateMountEvent
int sceIoCreateMountEventForDriver(int vshMountId, int flag);
sceIoCreateErrorEventForDriver
Version | NID |
---|---|
3.60 | 0x3C0343DB |
Derived from vshIoCreateErrorEvent
typedef struct sceIoCreateErrorEventForDriverOpt { uint32_t unk_0; uint32_t unk_4; uint32_t unk_8; uint32_t unk_C; uint32_t unk_10; uint32_t unk_14; uint32_t unk_18; } sceIoCreateErrorEventForDriverOpt; SceUID sceIoCreateErrorEventForDriver(int vshMountId, int flag, sceIoCreateErrorEventForDriverOpt* opt);
sceIoClearErrorEventForDriver
Version | NID |
---|---|
3.60 | 0x40B933C7 |
Derived from vshIoClearErrorEvent
int sceIoClearErrorEventForDriver(SceUID uid);
sceIoDeleteMountEventForDriver
Version | NID |
---|---|
3.60 | 0x43DB0AE4 |
Derived from vshIoDeleteMountEvent
int sceIoDeleteMountEventForDriver(SceUID uid);
sceIoDeleteErrorEventForDriver
Version | NID |
---|---|
3.60 | 0xC6158F8D |
Derived from vshIoDeleteErrorEvent
int sceIoDeleteErrorEventForDriver(SceUID uid);
sceIoSetMountEventForDriver
Version | NID |
---|---|
0.995-3.60 | 0x39ABDB9E |
Temp name was sceIoInvokeMountEventForDriver.
/* * (flags & 0x100) != 0 -> mount * (flags & 0x200) != 0 -> unmount */ int sceIoSetMountEventForDriver(int vshMountId, int flags, int unk2, int unk3);
vfsUnlockMntByMntIdForDriver
Version | NID |
---|---|
3.60 | 0x5B7E5AB8 |
This is a guessed name.
Temp name was sceIoUmount2ForDriver.
int vfsUnlockMntByMntIdForDriver(int vshMountId);
sceIoSetPathMappingFunctionForDriver
Version | NID |
---|---|
3.60 | 0xCFAECF18 |
Used by SceAppMgr.
Sets a callback function that does path mapping:
- function tries to OverlayResolveSync input path
- checks that it is not a PD path (Pseudo Drive mount point aquired by ScePfsMgr)
- takes beginning of path until symbol ":"
- tries to do a lookup by that path copy in data segment global 0x3470C
mount_point_data_entry
item array - if item is found then
path
frommount_point_data_entry
item is copied toresult_path
- in any other case OverlayResolveSync result path is copied to
result_path
typedef int ( SceIoPathMappingFunc)(const char *path, SceUID pid, char *result_path, SceSize size); int sceIoSetPathMappingFunctionForDriver(SceIoPathMappingFunc *func);
sceIoGetMediaTypeForDriver
Version | NID |
---|---|
0.990-3.60 | 0x9C220246 |
Was wrongly named sceIoGetPathIdExForDriver.
May also call callback function set by sceIoSetPathMappingFunctionForDriver.
This callback function does path mapping since result in result_path is passed to sceSblACMgrGetMediaTypeForKernel.
int sceIoGetMediaTypeForDriver(SceUID pid, const char *path, int ignored, int *media_type);
sceIoGetThreadDefaultPriorityForSystemForDriver
Version | NID |
---|---|
3.60 | 0x6D0FEDB6 |
int sceIoGetThreadDefaultPriorityForSystemForDriver(void);
sceIoSetThreadDefaultPriorityForSystemForDriver
Version | NID |
---|---|
3.60 | 0x3F0FF9D5 |
sceIoGetRemoteKPLSDataForDriver
Version | NID |
---|---|
3.60 | 0x44EDCE57 |
This is a guessed name.
int sceIoGetRemoteKPLSDataForDriver(SceUID pid, void *dst);
sceIoSetProcessFileOpenMaxNumberForDriver
Version | NID |
---|---|
3.60 | 0xAC0E9AAA |
int sceIoSetProcessFileOpenMaxNumberForDriver(SceUID pid, SceSize number);
sceIoSetProcessDirOpenMaxLevelForDriver
Version | NID |
---|---|
3.60 | 0x03F6A684 |
int sceIoSetProcessDirOpenMaxLevelForDriver(SceUID pid, SceSize level);
sceIoCompleteForDriver
Version | NID |
---|---|
3.60 | 0x8F0DE34D |
int sceIoCompleteForDriver(SceUID fd);
sceIoGetPriorityForSystemForDriver
Version | NID |
---|---|
3.60 | 0x9FCDCE62 |
int sceIoGetPriorityForSystemForDriver(SceUID a1);
sceIoSetPriorityForSystemForDriver
Version | NID |
---|---|
3.60 | 0xCCE94599 |
int sceIoSetPriorityForSystemForDriver(SceUID a1, int a2);
sceIoSetErrorEventForDriver
Version | NID |
---|---|
0.995-3.60 | 0xDD46CD63 |
Previously (wrongfully) called sceIoGetGUIDErrorEventListForDriver.
sceIoSetDebuggerCallbackForDriver
Version | NID |
---|---|
3.60 | 0xF4F8C59A |
sceIoGetGUIDFdListForDebuggerForDriver
Version | NID |
---|---|
3.60 | 0xdcf75f6d |
sceIoGetPUIDFdListForDebuggerForDriver
Version | NID |
---|---|
3.60 | 0xd493274 |
sceIoGetFileInfoForDriver
Version | NID |
---|---|
3.60 | 0xa1ef2648 |
This is a guessed name.
SceIofilemgrForDriver_12F8D58E
Version | NID |
---|---|
3.60 | 0x12F8D58E |
get some value
SceIofilemgrForDriver_15C17487
Version | NID |
---|---|
0.996.090-3.740.011 | 0x15C17487 |
A possible name is sceIoSchedulerIssueAnotherIoRequestForDriver.
int SceIofilemgrForDriver_15C17487(int io_device_code);
SceIofilemgrForDriver_2EFDFA12
Version | NID |
---|---|
3.60 | 0x2EFDFA12 |
set path by flags?
int SceIofilemgrForDriver_2EFDFA12(SceUID fd, char *path);
SceIofilemgrForDriver_3675ECB9
Version | NID |
---|---|
3.60 | 0x3675ECB9 |
could be sceIoSchedDispatcherFsResourceUnavailableForDriver.
some node op. dec ctr.
SceIofilemgrForDriver_3A79FAC9
Version | NID |
---|---|
3.60 | 0x3A79FAC9 |
delete fd by flags
int SceIofilemgrForDriver_3A79FAC9(SceUID fd);
SceIofilemgrForDriver_6BEEDDB4
Version | NID |
---|---|
3.60 | 0x6BEEDDB4 |
setting some to fd of dir entry
int SceIofilemgrForDriver_6BEEDDB4(SceUID fd, int a2);
SceIofilemgrForDriver_B499287E
Version | NID |
---|---|
3.60 | 0xB499287E |
delete some puid from a1
int SceIofilemgrForDriver_B499287E(void *a1, int n, int *num);
SceIofilemgrForDriver_C722DF35
Version | NID |
---|---|
3.60 | 0xC722DF35 |
some node op. inc ctr.
sceIoSyncByFdForDriver
Version | NID |
---|---|
3.60 | 0x338dcd68 |
SceIofilemgr
_sceIoDcloseAsync
Version | NID |
---|---|
1.69 | 0x00B13031 |
3.60 | different NID or not present |
_sceIoOpenAsync
Version | NID |
---|---|
1.69-3.60 | 0x09CD0FC8 |
sceIoGetProcessDefaultPriority
Version | NID |
---|---|
1.69-3.60 | 0x0DC4F1BB |
_sceIoRmdirAsync
Version | NID |
---|---|
1.69-3.60 | 0x13DC3244 |
sceIoSetPriority
Version | NID |
---|---|
1.69-3.60 | 0x14B2D56C |
sceIoSyncByFd
Version | NID |
---|---|
1.69-3.60 | 0x16512F59 |
int sceIoSyncByFd(SceUID fd, unsigned int unk);
_sceIoIoctl
Version | NID |
---|---|
1.69-3.60 | 0x1D2988F1 |
_sceIoLseekAsync
Version | NID |
---|---|
1.69-3.60 | 0x2300858E |
sceIoSetPriorityForSystem
Version | NID |
---|---|
1.69-3.60 | 0x27373135 |
_sceIoComplete
Version | NID |
---|---|
1.69 | 0x34E6A06E |
3.60 | different NID or not present |
sceIoWrite
Version | NID |
---|---|
1.69-3.60 | 0x34EFD876 |
int sceIoWrite(SceUID fd, const void *data, SceSize size);
_sceIoGetThreadDefaultPriorityForSystem
Version | NID |
---|---|
1.69 | 0x36CAF911 |
3.60 | different NID or not present |
_sceIoSetThreadDefaultPriorityForSystem
Version | NID |
---|---|
0.990-1.69 | 0x38FE853B |
3.60 | different NID or not present |
sceIoFlockForSystem
Version | NID |
---|---|
1.69-3.60 | 0x3E98E422 |
_sceIoDevctlAsync
Version | NID |
---|---|
1.69-3.60 | 0x3EE3F66E |
sceIoDclose
Version | NID |
---|---|
1.69-3.60 | 0x422A221A |
int sceIoDclose(SceUID fd);
_sceIoRename
Version | NID |
---|---|
1.69-3.60 | 0x4912F748 |
typedef struct sceIoRenameOpt { uint32_t unk_0; uint32_t unk_4; uint32_t unk_8; uint32_t unk_C; } sceIoRenameOpt; int _sceIoRename(const char *oldname, const char *newname, sceIoRenameOpt *opt);
sceIoLseek32
Version | NID |
---|---|
1.69-3.60 | 0x49252B9B |
int sceIoLseek32(SceUID fd, int offset, int whence);
sceIoSetThreadDefaultPriority
Version | NID |
---|---|
1.69-3.60 | 0x49312108 |
_sceIoDevctl
Version | NID |
---|---|
1.000.071-3.740.011 | 0x515AC017 |
This performs device-specific operations. The details of the operations are driver-dependent.
This is a wrapper for sceIoDevctlForDriver.
/* Arguments: devname Specified device ("<devname><unit>:") cmd Command code arg Pointer to device-driver-dependent parameter block arglen Number of bytes in device-driver-dependent parameter block bufp Pointer to return data storage block buflen Size of return data storage block Return Values: Non-negative (N>=0) Success (driver-dependent) <0 Error, e.g. SCE_ERROR_ERRNO_EMFILE, SCE_ERROR_ERRNO_ENODEV, SCE_ERROR_ERRNO_EUNSUP */ typedef struct SceIoDevctlOpt { // size is 0x18 SceSize arglen; // Number of bytes in device-driver-dependent parameter block void *bufp; // Pointer to return data storage block SceSize buflen; // Size of return data storage block char reserved[0xC]; } SceIoDevctlOpt; int _sceIoDevctl( const char *devname, int cmd, const void *arg, const SceIoDevctlOpt *pOpt );
sceIoGetstatByFdAsync
Version | NID |
---|---|
1.69-3.60 | 0x5167AC1E |
_sceIoPread
Version | NID |
---|---|
1.69-3.60 | 0x539FD5C4 |
typedef struct sceIoPreadOpt { SceOff offset; uint32_t unk_8; uint32_t unk_C; } sceIoPreadOpt; int _sceIoPread(SceUID uid, void *buffer, SceSize size, sceIoPreadOpt *opt); // 3.60 typedef struct SceIoPreadSyscallArgs { void *buf; SceSize nbyte; SceOff offset; } SceIoPreadSyscallArgs; SceSSize _sceIoPread(SceUID fd, SceIoPreadSyscallArgs *args);
_sceIoGetstatByFdAsync
Version | NID |
---|---|
1.69 | 0x554292F0 |
3.60 | different NID or not present |
_sceIoChstatByFdAsync
Version | NID |
---|---|
1.69 | 0x58010F40 |
3.60 | different NID or not present |
_sceIoGetThreadDefaultPriority
Version | NID |
---|---|
1.69 | 0x5DC29460 |
3.60 | different NID or not present |
_sceIoSync
Version | NID |
---|---|
1.69-3.60 | 0x5DD867F7 |
typedef struct sceIoSyncOpt { uint32_t unk_0; uint32_t unk_4; } sceIoSyncOpt; int _sceIoSync(const char* device, unsigned int unk, sceIoSyncOpt* opt);
_sceIoRemoveAsync
Version | NID |
---|---|
1.69-3.60 | 0x5FFA47E2 |
_sceIoDreadAsync
Version | NID |
---|---|
1.69 | 0x64B233B8 |
3.60 | different NID or not present |
_sceIoSetThreadDefaultPriority
Version | NID |
---|---|
0.990-1.69 | 0x654E27B1 |
3.60 | different NID or not present |
_sceIoSyncByFdAsync
Version | NID |
---|---|
1.69 | 0x6F78FAFE |
3.60 | different NID or not present |
_sceIoGetPriorityForSystem
Version | NID |
---|---|
1.69 | 0x70B7BB52 |
3.60 | different NID or not present |
sceIoReadAsync
Version | NID |
---|---|
1.69-3.60 | 0x773EBD45 |
_sceIoRemove
Version | NID |
---|---|
1.69-3.60 | 0x78955C65 |
typedef struct sceIoRemoveOpt { uint32_t unk_0; uint32_t unk_4; } sceIoRemoveOpt; int _sceIoRemove(const char *filename, sceIoRemoveOpt* opt);
sceIoSyncByFdAsync
Version | NID |
---|---|
1.69-3.60 | 0x7E1367CB |
sceIoSetProcessDefaultPriority
Version | NID |
---|---|
1.69-3.60 | 0x7F2ABBAF |
_sceIoRenameAsync
Version | NID |
---|---|
1.69-3.60 | 0x81794921 |
_sceIoSyncAsync
Version | NID |
---|---|
1.69-3.60 | 0x86DB0C0E |
_sceIoDread
Version | NID |
---|---|
1.69-3.60 | 0x8713D662 |
int _sceIoDread(SceUID fd, SceIoDirent *dir);
_sceIoWrite
Version | NID |
---|---|
1.69 | 0x8C319CF0 |
3.60 | different NID or not present |
_sceIoGetstat
Version | NID |
---|---|
1.69-3.60 | 0x8E7E11F2 |
typedef struct sceIoGetstatOpt { uint32_t unk_0; uint32_t unk_4; } sceIoGetstatOpt; int _sceIoGetstat(const char *name, SceIoStat *buf, sceIoGetstatOpt *opt);
sceIoCloseAsync
Version | NID |
---|---|
1.69-3.60 | 0x8EA3616A |
_sceIoMkdir
Version | NID |
---|---|
1.69-3.60 | 0x8F1ACC32 |
typedef struct sceIoMkdirOpt { uint32_t unk_0; uint32_t unk_4; } sceIoMkdirOpt; int _sceIoMkdir(const char *dirname, SceIoMode mode, sceIoMkdirOpt opt);
_sceIoCompleteMultiple
Version | NID |
---|---|
1.69-3.60 | 0x9111D004 |
_sceIoLseek32
Version | NID |
---|---|
1.69 | 0x92BDA6DA |
3.60 | different NID or not present |
_sceIoPwrite
Version | NID |
---|---|
1.69-3.60 | 0x9654094B |
typedef struct sceIoPwriteOpt { SceOff offset; uint32_t unk_8; uint32_t unk_C; } sceIoPwriteOpt; int _sceIoPwrite(SceUID uid, const void *data, int size, sceIoPwriteOpt *opt); // 3.60 typedef struct SceIoPwriteSyscallArgs { const void *buf; SceSize nbyte; SceOff offset; } SceIoPwriteSyscallArgs; SceSSize _sceIoPwrite(SceUID fd, SceIoPwriteSyscallArgs *args);
_sceIoGetPriority
Version | NID |
---|---|
1.69 | 0x9E3F880D |
3.60 | different NID or not present |
sceIoGetThreadDefaultPriority
Version | NID |
---|---|
1.69-3.60 | 0xA176CD03 |
_sceIoLseek
Version | NID |
---|---|
1.69-3.60 | 0xA604764A |
typedef struct _sceIoLseekOpt { // size is 0x10 SceOff offset; int whence; uint32_t unk; } _sceIoLseekOpt; SceOff _sceIoLseek(SceUID fd, _sceIoLseekOpt* opt); // 3.60 typedef struct SceIoLseekSyscallArgs { SceOff offset; int whence; int padding; } SceIoLseekSyscallArgs; SceOff _sceIoLseek(SceUID fd, SceIoLseekSyscallArgs *args);
sceIoChstatByFdAsync
Version | NID |
---|---|
1.69-3.60 | 0xA9F89275 |
_sceIoGetProcessDefaultPriority
Version | NID |
---|---|
1.69 | 0xB0486482 |
3.60 | different NID or not present |
_sceIoSetPriority
Version | NID |
---|---|
0.990-1.69 | 0xB14192F0 |
3.60 | different NID or not present |
_sceIoReadAsync
Version | NID |
---|---|
1.69 | 0xB2B891E6 |
3.60 | different NID or not present |
_sceIoPwriteAsync
Version | NID |
---|---|
1.69-3.60 | 0xB2D0B2F4 |
_sceIoChstatAsync
Version | NID |
---|---|
1.69-3.60 | 0xB4B021D9 |
sceIoSetThreadDefaultPriorityForSystem
Version | NID |
---|---|
1.69-3.60 | 0xB9C9C9CF |
_sceIoPreadAsync
Version | NID |
---|---|
1.69-3.60 | 0xBCF5684D |
sceIoDopenAsync
Version | NID |
---|---|
1.69-3.60 | 0xC49C312F |
sceIoClose
Version | NID |
---|---|
1.69-3.60 | 0xC70B8886 |
int sceIoClose(SceUID fd);
_sceIoWriteAsync
Version | NID |
---|---|
1.69 | 0xC92AF88F |
3.60 | different NID or not present |
_sceIoOpen
Version | NID |
---|---|
1.69-3.60 | 0xCC67B6FD |
typedef struct sceIoOpenOpt { uint32_t unk_0; uint32_t unk_4; } sceIoOpenOpt; SceUID _sceIoOpen(const char *filename, int flag, SceIoMode mode, sceIoOpenOpt *opt);
sceIoCancel
Version | NID |
---|---|
1.69-3.60 | 0xCEF48835 |
sceIoComplete
Version | NID |
---|---|
1.69-3.60 | 0xD1C49D2F |
_sceIoChstat
Version | NID |
---|---|
1.69-3.60 | 0xD2EE455F |
typedef struct sceIoChstatOpt { uint32_t unk_0; uint32_t unk_4; } sceIoChstatOpt; int _sceIoChstat(const char *name, const SceIoStat *stat, unsigned int cbit, sceIoChstatOpt *opt);
_sceIoSetProcessDefaultPriority
Version | NID |
---|---|
0.990-1.69 | 0xD302DCB9 |
3.60 | different NID or not present |
_sceIoGetstatAsync
Version | NID |
---|---|
1.69-3.60 | 0xD414C89F |
sceIoDcloseAsync
Version | NID |
---|---|
1.69-3.60 | 0xDC2D7D38 |
_sceIoIoctlAsync
Version | NID |
---|---|
1.69-3.60 | 0xE00DC256 |
_sceIoChstatByFd
Version | NID |
---|---|
1.69-3.60 | 0xE0BE2A30 |
int _sceIoChstatByFd(SceUID fd, const SceIoStat *buf, unsigned int cbit);
sceIoWriteAsync
Version | NID |
---|---|
1.69-3.60 | 0xE0D63D2A |
_sceIoGetstatByFd
Version | NID |
---|---|
1.69-3.60 | 0xE6C53567 |
int _sceIoGetstatByFd(SceUID fd, SceIoStat *stat);
_sceIoSetPriorityForSystem
Version | NID |
---|---|
0.990-1.69 | 0xE6C923B3 |
3.60 | different NID or not present |
_sceIoDopen
Version | NID |
---|---|
1.69-3.60 | 0xE6E614B5 |
typedef struct sceIoDopenOpt { uint32_t unk_0; uint32_t unk_4; } sceIoDopenOpt; SceUID _sceIoDopen(const char *dirname, sceIoDopenOpt *opt);
sceIoGetPriorityForSystem
Version | NID |
---|---|
1.69-3.60 | 0xEF5432ED |
sceIoGetPriority
Version | NID |
---|---|
1.69-3.60 | 0xF2A472A1 |
_sceIoRead
Version | NID |
---|---|
1.69-3.60 | different NID or not present |
_sceIoSyncByFd
Version | NID |
---|---|
1.69-3.60 | different NID or not present |
_sceIoCloseAsync
Version | NID |
---|---|
1.69-3.60 | different NID or not present |
_sceIoDopenAsync
Version | NID |
---|---|
1.69-3.60 | different NID or not present |
sceIoDreadAsync
Version | NID |
---|---|
1.69-3.60 | 0xF59F37B0 |
_sceIoMkdirAsync
Version | NID |
---|---|
1.69-3.60 | 0xF5C58B21 |
_sceIoCancel
Version | NID |
---|---|
1.69 | 0xF5DEEA19 |
3.60 | different NID or not present |
_sceIoClose
Version | NID |
---|---|
1.69 | 0xF69FB394 |
3.60 | different NID or not present |
_sceIoDclose
Version | NID |
---|---|
0.990-1.69 | 0xFAFF0002 |
3.60 | different NID or not present |
sceIoGetThreadDefaultPriorityForSystem
Version | NID |
---|---|
1.69-3.60 | 0xFCBCEAED |
sceIoRead
Version | NID |
---|---|
1.69-3.60 | 0xFDB32293 |
sceIoRead(SceUID fd, void *data, SceSize size);
_sceIoRmdir
Version | NID |
---|---|
1.69-3.60 | 0xFFFB4D76 |
typedef struct sceIoRmdirOpt { uint32_t unk_0; uint32_t unk_4; } sceIoRmdirOpt; int _sceIoRmdir(const char *dirname, sceIoRmdirOpt* opt);