#include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct SceFiosBuffer { void* pPtr; size_t length; } SceFiosBuffer; #define SCE_FIOS_THREAD_TYPES 3 typedef struct SceFiosParams { uint32_t initialized : 1; uint32_t paramsSize : 15; uint32_t pathMax : 16; uint32_t profiling; uint32_t ioThreadCount; uint32_t threadsPerScheduler; uint32_t extraFlag1 : 1; uint32_t extraFlags : 31; uint32_t maxChunk; uint8_t maxDecompressorThreadCount; uint8_t reserved1; uint8_t reserved2; uint8_t reserved3; intptr_t reserved4; intptr_t reserved5; SceFiosBuffer opStorage; SceFiosBuffer fhStorage; SceFiosBuffer dhStorage; SceFiosBuffer chunkStorage; void* pVprintf; void* pMemcpy; void* pProfileCallback; int threadPriority[SCE_FIOS_THREAD_TYPES]; int threadAffinity[SCE_FIOS_THREAD_TYPES]; int threadStackSize[SCE_FIOS_THREAD_TYPES]; } SceFiosParams; #define SCE_KERNEL_HIGHEST_PRIORITY_USER (64) #define SCE_KERNEL_LOWEST_PRIORITY_USER (191) #define SCE_FIOS_IO_THREAD_DEFAULT_PRIORITY (SCE_KERNEL_HIGHEST_PRIORITY_USER + 2) #define SCE_FIOS_DECOMPRESSOR_THREAD_DEFAULT_PRIORITY (SCE_KERNEL_LOWEST_PRIORITY_USER - 2) #define SCE_FIOS_CALLBACK_THREAD_DEFAULT_PRIORITY (SCE_KERNEL_HIGHEST_PRIORITY_USER + 2) #define SCE_FIOS_THREAD_DEFAULT_AFFINITY SCE_KERNEL_CPU_MASK_USER_2 #define SCE_FIOS_IO_THREAD_DEFAULT_AFFINITY SCE_FIOS_THREAD_DEFAULT_AFFINITY #define SCE_FIOS_DECOMPRESSOR_THREAD_DEFAULT_AFFINITY SCE_KERNEL_THREAD_CPU_AFFINITY_MASK_DEFAULT #define SCE_FIOS_CALLBACK_THREAD_DEFAULT_AFFINITY SCE_FIOS_THREAD_DEFAULT_AFFINITY #define SCE_FIOS_IO_THREAD_DEFAULT_STACKSIZE (8 * 1024) #define SCE_FIOS_DECOMPRESSOR_THREAD_DEFAULT_STACKSIZE (16 * 1024) #define SCE_FIOS_CALLBACK_THREAD_DEFAULT_STACKSIZE (8 * 1024) #define SCE_FIOS_PARAMS_INITIALIZER \ { \ 0, sizeof(SceFiosParams), 0, 0, 2, 2, 0, 0, (256 * 1024), 2, 0, 0, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, {0, 0}, \ NULL, NULL, NULL, \ {SCE_FIOS_IO_THREAD_DEFAULT_PRIORITY, \ SCE_FIOS_DECOMPRESSOR_THREAD_DEFAULT_PRIORITY, \ SCE_FIOS_CALLBACK_THREAD_DEFAULT_PRIORITY}, \ {SCE_FIOS_IO_THREAD_DEFAULT_AFFINITY, \ SCE_FIOS_DECOMPRESSOR_THREAD_DEFAULT_AFFINITY, \ SCE_FIOS_CALLBACK_THREAD_DEFAULT_AFFINITY}, \ { \ SCE_FIOS_IO_THREAD_DEFAULT_STACKSIZE, SCE_FIOS_DECOMPRESSOR_THREAD_DEFAULT_STACKSIZE, \ SCE_FIOS_CALLBACK_THREAD_DEFAULT_STACKSIZE \ } \ } #define SCE_FIOS_IO_THREAD 0 #define SCE_FIOS_DECOMPRESSOR_THREAD 1 #define SCE_FIOS_CALLBACK_THREAD 2 #define SCE_FIOS_FH_SIZE 80 #define SCE_FIOS_DH_SIZE 80 #define SCE_FIOS_OP_SIZE 168 #define SCE_FIOS_CHUNK_SIZE 64 #define SCE_FIOS_ALIGN_UP(val, align) (((val) + ((align) -1)) & ~((align) -1)) #define SCE_FIOS_STORAGE_SIZE(num, size) (((num) * (size)) + SCE_FIOS_ALIGN_UP(SCE_FIOS_ALIGN_UP((num), 8) / 8, 8)) #define SCE_FIOS_DH_STORAGE_SIZE(numDHs, pathMax) SCE_FIOS_STORAGE_SIZE(numDHs, SCE_FIOS_DH_SIZE + pathMax) #define SCE_FIOS_FH_STORAGE_SIZE(numFHs, pathMax) SCE_FIOS_STORAGE_SIZE(numFHs, SCE_FIOS_FH_SIZE + pathMax) #define SCE_FIOS_OP_STORAGE_SIZE(numOps, pathMax) SCE_FIOS_STORAGE_SIZE(numOps, SCE_FIOS_OP_SIZE + pathMax) #define SCE_FIOS_CHUNK_STORAGE_SIZE(numChunks) SCE_FIOS_STORAGE_SIZE(numChunks, SCE_FIOS_CHUNK_SIZE) int sceFiosInitialize(SceFiosParams* params); typedef int64_t SceFiosTime; typedef int32_t SceFiosHandle; typedef SceFiosHandle SceFiosFH; typedef struct SceFiosOpenParams { uint32_t openFlags : 16; uint32_t opFlags : 16; uint32_t reserved; SceFiosBuffer buffer; } SceFiosOpenParams; typedef struct SceFiosOpAttr { SceFiosTime deadline; void* pCallback; void* pCallbackContext; int32_t priority : 8; uint32_t opflags : 24; uint32_t userTag; void* userPtr; void* pReserved; } SceFiosOpAttr; int sceFiosFHOpenWithModeSync( const SceFiosOpAttr* pAttr, SceFiosFH* pOutFH, const char* pPath, const SceFiosOpenParams* pOpenParams, int32_t nativeMode ); #ifdef __cplusplus } #endif