Certainly means Memory stick interface.
Module
Version |
World |
Privilege
|
0.990-3.60 |
Non-secure |
Kernel
|
Libraries
Known NIDs
Version |
Name |
World |
Visibility |
NID
|
0.990-3.60 |
SceMsifForDriver |
Non-secure |
Kernel |
0xB706084A
|
Types
typedef struct SceMsifIoReq {
uint32_t addr;
uint32_t unk04;
uint32_t size_flags;
} SceMsifIoReq;
typedef struct SceMsif_fptr_table {
int (*ms_read_atrb)(SceMsif_subctx *subctx, int sector, int nSectors, SceMsifIoReq *io_req);
int (*ms_read_sectors)(SceMsif_subctx *subctx, int sector, int nSectors, SceMsifIoReq *io_req);
int (*ms_write_sectors)(SceMsif_subctx *subctx, int sector, int nSectors, SceMsifIoReq *io_req);
int (*ms_get_model_name)(SceMsif_subctx *subctx, char* model_name);
int (*ms_ex_set_cmd_0x16_1)(SceMsif_subctx *subctx, int count);
int (*ms_format)(SceMsif_subctx *subctx, int format);
int (*ms_sbl_auth)(SceMsif_subctx *subctx, int num);
int (*ms_sleep)(SceMsif_subctx *subctx);
int (*ms_stop_1)(SceMsif_subctx *subctx);
int (*ms_ex_set_cmd_0x16_2)(SceMsif_subctx *subctx);
int (*ms_stop_2)(SceMsif_subctx *subctx);
} SceMsif_fptr_table;
typedef struct msif_init_ctx {
uint32_t index;
SceMsif_subctx* sub_ctx;
} msif_init_ctx;
typedef struct SceMsifRegs_30 {
uint32_t unk_0;
uint32_t unk_4;
uint32_t evid_bits_8;
} SceMsifRegs_30;
typedef struct SceMsif_subctx {
uint8_t unk_0[0x400];
uint8_t unk_A00[0x1A0];
SceMsifRegs_30* unk_C00;
uint32_t unk_C10;
} SceMsif_subctx;
typedef struct SceMsif_ctx {
void* SceMsif_regs_vaddr;
SceUID SceMsif_regs_uid;
uint32_t unk_8;
SceUID SceMsif_evid;
fast_mutex SceMsif_fast_mutex;
SceUID SceMsif_memblock_0x18000_id;
uint32_t unk_54;
uint32_t intr_mutex;
uint8_t unk_5C;
uint8_t slow_mode_state;
uint8_t system_time_0;
uint8_t system_time_1;
void* range_60;
uint32_t range_len_64;
uint32_t size_180;
uint32_t size_1C0;
void* unk180_paddr;
void* unk_1C0_paddr;
void* SceMsif_memblock_0x18000_vaddr;
SceMsif_subctx* subctx;
addr_pair paddr_list_80[4];
uint8_t unk_A0[0xE0];
uint8_t unk_180[0x40];
uint8_t unk_1C0[0x40];
SceInt64 wide_time_intr_SceMsifSmshc;
SceInt64 wide_time;
void* SceMsif_memblock_0x18000_paddr;
uint32_t unk_214;
uint8_t sector_buffer[0x200];
uint32_t unk_418;
uint32_t unk_41C;
uint32_t unk_420;
uint32_t unk_424;
SceUID SceMsifSleepCtrl_evid;
SceUID SceMsifSleepCtrl_thid;
uint32_t suspend_resume_curr_state;
uint32_t suspend_resume_prev_state;
uint32_t unk_438;
uint32_t unk_43C;
} SceMsif_ctx;
typedef struct SceMsId {
SceUInt8 unk_0x0;
SceUInt16 manuf_year;
SceUInt8 manuf_month;
SceUInt8 manuf_day;
SceUInt8 manuf_hour;
SceUInt8 manuf_minute;
SceUInt8 manuf_second;
} SceMsId;
typedef struct SceMsInfo {
int ms_type;
SceBool is_read_only;
SceUInt64 nbytes;
SceUInt64 nbytes2;
SceUInt32 sector_size_low;
SceUInt32 sector_size_hi;
SceUInt32 fs_offset;
SceUInt32 unk_0x24;
SceUInt32 unk_0x28;
SceUInt32 unk_0x2C;
SceMsId id;
void *SceMsif_subctx_addr;
SceUInt32 reserved;
} SceMsInfo;
Data segment layout
Address |
Size |
Description
|
0x0000 |
0x4 |
SceMsif_subctx* - pointer to offset 0x840
|
0x0004 |
0x4 |
pointer to data at offset 0x18
|
0x0008 |
0x4 |
unknown
|
0x000C |
0x4 |
unknown
|
0x0010 |
0x4 |
pointer to table SceMsif_fptr_table of 11 function pointers
|
0x0014 |
0x4 |
unknown
|
0x0018 |
0x800 |
some data or array of 0x10 elements of size 0x80
|
0x0818 |
0x28 |
unknown
|
0x0840 |
0xC40 |
SceMsif_subctx data
|
0x1480 |
0x440 |
SceMsif_ctx
|
0x18C0 |
0x4 |
SceMsif suspend callback id
|
0x18C4 |
0x4 |
unknown
|
0x18C8 |
0x8 |
UInt64. wide time
|
0x18D0 |
0x8 |
UInt64. probably time in ms
|
0x18D8 |
0xE0 |
decrypted data - array of 8 elements of size 0x1C (0x1C is probably size of sha224)
|
0x19B8 |
0x4 |
flag that shows that static sha224 table is decrypted
|
0x19BC |
0x4 |
SM communication ID (obtained with sceSblSmCommStartSm)
|
SceMsifForDriver
sceMsifReadSectorForDriver
Version |
NID
|
3.60 |
0x58654AA3
|
int sceMsifReadSectorForDriver(int sector, char* buffer, int nSectors);
sceMsifWriteSectorForDriver
Version |
NID
|
3.60 |
0x329035EF
|
int sceMsifWriteSectorForDriver(int sector, char* buffer, int nSectors);
sceMsifEnableSlowCardModeForDriver
Version |
NID
|
3.60 |
0x4B751CE6
|
int sceMsifEnableSlowCardModeForDriver(void);
sceMsifDisableSlowCardModeForDriver
Version |
NID
|
3.60 |
0x75848756
|
int sceMsifDisableSlowCardModeForDriver(void);
sceMsifGetSlowCardModeStateForDriver
Version |
NID
|
3.60 |
0x491E25B5
|
int sceMsifGetSlowCardModeStateForDriver(void);
sceMsifSwResetForDriver
Version |
NID
|
3.60 |
0x4EA579EF
|
Temp name was sceMsifInitializeMmcDeviceForDriver.
Part of functionality is same as msif_get_sha224_digest_source.
int sceMsifSwResetForDriver(void);
sceMsifGetMsInfoForDriver
Version |
NID
|
0.990-3.60 |
0xD0307849
|
int sceMsifGetMsInfoForDriver(SceMsInfo *pInfo);
msif_init_mbr
Version |
NID
|
3.60 |
0xF997286B
|
int msif_init_mbr();
msif_get_time_from_SceMsifSmshc
Version |
NID
|
3.60 |
0x855E1E38
|
Returns wide time difference from last SceMsifSmshc interrupt.
SceInt64 msif_get_time_from_SceMsifSmshc();
sceMsifZerofillSectorForDriver
Version |
NID
|
0.990-3.60 |
0x0F86BEEA
|
int sceMsifZerofillSectorForDriver(int sector, int nSectors);
sceMsifFormatForDriver
Version |
NID
|
3.60 |
0x6EDE7DBA
|
int sceMsifFormatForDriver(int format_arg);
sceMsifGetMediaIdForDriver
Version |
NID
|
3.60 |
0x718BDFDE
|
Gets data that is used to calculate sha224 digest. This digest is used to verify static table of sha224 digests. That is decrypted internally using keys that are derived from sceSblSsMgrDecryptWithPortabilityForDriver.
This function is also used in SceMagicGate.
int sceMsifGetMediaIdForDriver(void *sha224_ds);