28#define NEWLIB_PORT_AWARE
32void _ps2sdk_fileXio_init();
33void _ps2sdk_fileXio_deinit();
35SifRpcClientData_t __cd0;
41int __fileXioBlockMode;
43int __fileXioCompletionSema;
47static inline void _fxio_intr(
void)
49 iSignalSema(__fileXioCompletionSema);
52static inline int _lock(
void)
54 return(WaitSema(__lock_sema_id));
57static inline int _unlock(
void)
59 return(SignalSema(__lock_sema_id));
67 if (HasIopRebootedSinceLastCall())
78 __lock_sema_id = CreateSema(&sp);
79 if (__lock_sema_id < 0)
85 while(((res = sceSifBindRpc(&__cd0, FILEXIO_IRX, 0)) >= 0) && (__cd0.server == NULL))
94 __fileXioCompletionSema = CreateSema(&sp);
95 if (__fileXioCompletionSema < 0)
97 __fileXioCompletionSema = 0;
101 __fileXioBlockMode = FXIO_WAIT;
103 _ps2sdk_fileXio_init();
108void fileXioExit(
void)
112 if (__lock_sema_id > 0)
114 DeleteSema(__lock_sema_id);
117 if (__fileXioCompletionSema > 0)
119 DeleteSema(__fileXioCompletionSema);
120 __fileXioCompletionSema = 0;
123 memset(&__cd0, 0,
sizeof(__cd0));
125 _ps2sdk_fileXio_deinit();
129void fileXioStop(
void)
131 if(fileXioInit() < 0)
134 sceSifCallRpc(&__cd0, FILEXIO_STOP, 0, __sbuff, 0, __sbuff, 0, 0, 0);
139int fileXioGetDeviceList(
struct fileXioDevice deviceEntry[],
unsigned int req_entries)
144 if(fileXioInit() < 0)
148 WaitSema(__fileXioCompletionSema);
150 packet->deviceEntry = deviceEntry;
151 packet->reqEntries = req_entries;
154 if((rv = sceSifCallRpc(&__cd0, FILEXIO_GETDEVICELIST, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_devlist_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
156 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
157 else { rv = __sbuff[0]; }
160 SignalSema(__fileXioCompletionSema);
166int fileXioGetdir(
const char* pathname,
struct fileXioDirEntry dirEntry[],
unsigned int req_entries)
171 if(fileXioInit() < 0)
175 WaitSema(__fileXioCompletionSema);
178 strlcpy(packet->pathname, pathname,
sizeof(packet->pathname));
180 sceSifWriteBackDCache(dirEntry, (
sizeof(
struct fileXioDirEntry) * req_entries));
182 packet->dirEntry = dirEntry;
183 packet->reqEntries = req_entries;
186 if((rv = sceSifCallRpc(&__cd0, FILEXIO_GETDIR, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_getdir_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
188 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
189 else { rv = __sbuff[0]; }
192 SignalSema(__fileXioCompletionSema);
198int fileXioMount(
const char* mountpoint,
const char* mountstring,
int flag)
203 if(fileXioInit() < 0)
207 WaitSema(__fileXioCompletionSema);
209 strlcpy(packet->blockdevice, mountstring,
sizeof(packet->blockdevice));
210 strlcpy(packet->mountpoint, mountpoint,
sizeof(packet->mountpoint));
211 packet->flags = flag;
213 if((rv = sceSifCallRpc(&__cd0, FILEXIO_MOUNT, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_mount_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
215 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
216 else { rv = __sbuff[0]; }
219 SignalSema(__fileXioCompletionSema);
225int fileXioUmount(
const char* mountpoint)
230 if(fileXioInit() < 0)
234 WaitSema(__fileXioCompletionSema);
236 strlcpy(packet->mountpoint, mountpoint,
sizeof(packet->mountpoint));
238 if((rv = sceSifCallRpc(&__cd0, FILEXIO_UMOUNT, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_unmount_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
240 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
241 else { rv = __sbuff[0]; }
244 SignalSema(__fileXioCompletionSema);
250int fileXioCopyfile(
const char* source,
const char* dest,
int mode)
255 if(fileXioInit() < 0)
259 WaitSema(__fileXioCompletionSema);
261 strlcpy(packet->source, source,
sizeof(packet->source));
262 strlcpy(packet->dest, dest,
sizeof(packet->dest));
265 if((rv = sceSifCallRpc(&__cd0, FILEXIO_COPYFILE, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_copyfile_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
267 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
268 else { rv = __sbuff[0]; }
271 SignalSema(__fileXioCompletionSema);
277int fileXioMkdir(
const char* pathname,
int mode)
282 if(fileXioInit() < 0)
286 WaitSema(__fileXioCompletionSema);
288 strlcpy(packet->pathname, pathname,
sizeof(packet->pathname));
291 if((rv = sceSifCallRpc(&__cd0, FILEXIO_MKDIR, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_mkdir_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
293 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
294 else { rv = __sbuff[0]; }
297 SignalSema(__fileXioCompletionSema);
303int fileXioRmdir(
const char* pathname)
308 if(fileXioInit() < 0)
312 WaitSema(__fileXioCompletionSema);
314 strlcpy(packet->pathname, pathname,
sizeof(packet->pathname));
316 if((rv = sceSifCallRpc(&__cd0, FILEXIO_RMDIR, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_pathsel_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
318 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
319 else { rv = __sbuff[0]; }
322 SignalSema(__fileXioCompletionSema);
328int fileXioRemove(
const char* pathname)
333 if(fileXioInit() < 0)
337 WaitSema(__fileXioCompletionSema);
339 strlcpy(packet->pathname, pathname,
sizeof(packet->pathname));
341 if((rv = sceSifCallRpc(&__cd0, FILEXIO_REMOVE, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_pathsel_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
343 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
344 else { rv = __sbuff[0]; }
347 SignalSema(__fileXioCompletionSema);
353int fileXioRename(
const char* source,
const char* dest)
358 if(fileXioInit() < 0)
362 WaitSema(__fileXioCompletionSema);
364 strlcpy(packet->source, source,
sizeof(packet->source));
365 strlcpy(packet->dest, dest,
sizeof(packet->dest));
367 if((rv = sceSifCallRpc(&__cd0, FILEXIO_RENAME, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_rename_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
369 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
370 else { rv = __sbuff[0]; }
373 SignalSema(__fileXioCompletionSema);
379int fileXioSymlink(
const char* source,
const char* dest)
384 if(fileXioInit() < 0)
388 WaitSema(__fileXioCompletionSema);
390 strlcpy(packet->source, source,
sizeof(packet->source));
391 strlcpy(packet->dest, dest,
sizeof(packet->dest));
393 if((rv = sceSifCallRpc(&__cd0, FILEXIO_SYMLINK, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_rename_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
395 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
396 else { rv = __sbuff[0]; }
399 SignalSema(__fileXioCompletionSema);
405int fileXioReadlink(
const char* source,
char* buf,
unsigned int buflen)
410 if(fileXioInit() < 0)
414 WaitSema(__fileXioCompletionSema);
416 if( !IS_UNCACHED_SEG(buf))
417 sceSifWriteBackDCache(buf, buflen);
419 strlcpy(packet->source, source,
sizeof(packet->source));
420 packet->buffer = buf;
421 packet->buflen = buflen;
423 if((rv = sceSifCallRpc(&__cd0, FILEXIO_READLINK, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_readlink_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
425 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
426 else { rv = __sbuff[0]; }
429 SignalSema(__fileXioCompletionSema);
435int fileXioChdir(
const char* pathname)
440 if(fileXioInit() < 0)
444 WaitSema(__fileXioCompletionSema);
446 strlcpy(packet->pathname, pathname,
sizeof(packet->pathname));
448 if((rv = sceSifCallRpc(&__cd0, FILEXIO_CHDIR, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_pathsel_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
450 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
451 else { rv = __sbuff[0]; }
454 SignalSema(__fileXioCompletionSema);
460int fileXioOpen(
const char* source,
int flags, ...)
466 va_start(alist, flags);
467 mode = va_arg(alist,
int);
470 if(fileXioInit() < 0)
474 WaitSema(__fileXioCompletionSema);
476 strlcpy(packet->pathname, source,
sizeof(packet->pathname));
477 packet->flags = flags;
479 if((rv = sceSifCallRpc(&__cd0, FILEXIO_OPEN, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_open_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
481 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
482 else { rv = __sbuff[0]; }
485 SignalSema(__fileXioCompletionSema);
491int fileXioClose(
int fd)
496 if(fileXioInit() < 0)
500 WaitSema(__fileXioCompletionSema);
504 if((rv = sceSifCallRpc(&__cd0, FILEXIO_CLOSE, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_close_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
506 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
507 else { rv = __sbuff[0]; }
510 SignalSema(__fileXioCompletionSema);
516static inline void recv_intr(
void *data_raw)
518 rests_pkt *rests = UNCACHED_SEG(data_raw);
520 if(rests->ssize) memcpy(rests->sbuf, rests->sbuffer, rests->ssize);
521 if(rests->esize) memcpy(rests->ebuf, rests->ebuffer, rests->esize);
523 iSignalSema(__fileXioCompletionSema);
526int fileXioRead(
int fd,
void *buf,
int size)
531 if(fileXioInit() < 0)
535 WaitSema(__fileXioCompletionSema);
538 packet->buffer = buf;
540 packet->intrData = __intr_data;
542 if (!IS_UNCACHED_SEG(buf))
543 sceSifWriteBackDCache(buf, size);
545 if((rv = sceSifCallRpc(&__cd0, FILEXIO_READ, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_read_packet), __sbuff, 4, &recv_intr, __intr_data)) >= 0)
547 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
548 else { rv = __sbuff[0]; }
551 SignalSema(__fileXioCompletionSema);
557int fileXioWrite(
int fd,
const void *buf,
int size)
563 if(fileXioInit() < 0)
567 WaitSema(__fileXioCompletionSema);
569 if((
unsigned int)buf & 0x3F)
571 miss = 64 - ((
unsigned int)buf & 0x3F);
572 if(miss > (
unsigned int)size) miss = size;
578 packet->buffer = buf;
580 packet->unalignedDataLen = miss;
582 memcpy(packet->unalignedData, buf, miss);
584 if(!IS_UNCACHED_SEG(buf))
585 sceSifWriteBackDCache((
void*)buf, size);
587 if((rv = sceSifCallRpc(&__cd0, FILEXIO_WRITE, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_write_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
589 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
590 else { rv = __sbuff[0]; }
593 SignalSema(__fileXioCompletionSema);
599int fileXioLseek(
int fd,
int offset,
int whence)
604 if(fileXioInit() < 0)
608 WaitSema(__fileXioCompletionSema);
611 packet->offset = (u32)offset;
612 packet->whence = whence;
614 if((rv = sceSifCallRpc(&__cd0, FILEXIO_LSEEK, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_lseek_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
616 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
617 else { rv = __sbuff[0]; }
620 SignalSema(__fileXioCompletionSema);
629s64 fileXioLseek64(
int fd, s64 offset,
int whence)
635 if(fileXioInit() < 0)
639 WaitSema(__fileXioCompletionSema);
642 packet->offset_lo = (u32)(offset & 0xffffffff);
643 packet->offset_hi = (u32)((offset >> 32) & 0xffffffff);
644 packet->whence = whence;
646 if((rv = sceSifCallRpc(&__cd0, FILEXIO_LSEEK64, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_lseek64_packet), __sbuff, 8, (
void *)&_fxio_intr, NULL)) >= 0)
648 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
650 s64 rvHI = ret_packet->pos_hi;
652 rv = rvHI | ret_packet->pos_lo;
656 SignalSema(__fileXioCompletionSema);
663int fileXioChStat(
const char *name,
iox_stat_t *stat,
int mask)
668 if(fileXioInit() < 0)
672 WaitSema(__fileXioCompletionSema);
674 strlcpy(packet->pathname, name,
sizeof(packet->pathname));
678 if(!IS_UNCACHED_SEG(stat))
679 sceSifWriteBackDCache(stat,
sizeof(
iox_stat_t));
681 if((rv = sceSifCallRpc(&__cd0, FILEXIO_CHSTAT, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_chstat_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
683 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
684 else { rv = __sbuff[0]; }
687 SignalSema(__fileXioCompletionSema);
693int fileXioGetStat(
const char *name,
iox_stat_t *stat)
698 if(fileXioInit() < 0)
702 WaitSema(__fileXioCompletionSema);
704 strlcpy(packet->pathname, name,
sizeof(packet->pathname));
707 if(!IS_UNCACHED_SEG(stat))
708 sceSifWriteBackDCache(stat,
sizeof(
iox_stat_t));
710 if((rv = sceSifCallRpc(&__cd0, FILEXIO_GETSTAT, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_getstat_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
712 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
713 else { rv = __sbuff[0]; }
716 SignalSema(__fileXioCompletionSema);
722int fileXioFormat(
const char *dev,
const char *blockdev,
const void *args,
int arglen)
727 if(fileXioInit() < 0)
731 WaitSema(__fileXioCompletionSema);
733 strlcpy(packet->device, dev,
sizeof(packet->device));
734 strlcpy(packet->blockDevice, blockdev ? blockdev :
"",
sizeof(packet->blockDevice));
736 if((
unsigned int)arglen >
sizeof(packet->args)) arglen =
sizeof(packet->args);
737 memcpy(packet->args, args, arglen);
738 packet->arglen = arglen;
740 if((rv = sceSifCallRpc(&__cd0, FILEXIO_FORMAT, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_format_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
742 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
743 else { rv = __sbuff[0]; }
746 SignalSema(__fileXioCompletionSema);
752int fileXioSync(
const char *devname,
int flag)
757 if(fileXioInit() < 0)
761 WaitSema(__fileXioCompletionSema);
763 strlcpy(packet->device, devname,
sizeof(packet->device));
764 packet->flags = flag;
766 if((rv = sceSifCallRpc(&__cd0, FILEXIO_SYNC, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_sync_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
768 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
769 else { rv = __sbuff[0]; }
772 SignalSema(__fileXioCompletionSema);
778int fileXioDopen(
const char *name)
783 if(fileXioInit() < 0)
787 WaitSema(__fileXioCompletionSema);
789 strlcpy(packet->pathname, name,
sizeof(packet->pathname));
790 if((rv = sceSifCallRpc(&__cd0, FILEXIO_DOPEN, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_pathsel_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
792 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
793 else { rv = __sbuff[0]; }
796 SignalSema(__fileXioCompletionSema);
802int fileXioDclose(
int fd)
807 if(fileXioInit() < 0)
811 WaitSema(__fileXioCompletionSema);
814 if((rv = sceSifCallRpc(&__cd0, FILEXIO_DCLOSE, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_close_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
816 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
817 else { rv = __sbuff[0]; }
820 SignalSema(__fileXioCompletionSema);
831 if(fileXioInit() < 0)
835 WaitSema(__fileXioCompletionSema);
838 packet->dirent = dirent;
840 if (!IS_UNCACHED_SEG(dirent))
843 if((rv = sceSifCallRpc(&__cd0, FILEXIO_DREAD, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_dread_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
845 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
846 else { rv = __sbuff[0]; }
849 SignalSema(__fileXioCompletionSema);
855static inline void fxio_ctl_intr(
void *data_raw)
859 memcpy(pkt->dest, pkt->buf, pkt->len);
861 iSignalSema(__fileXioCompletionSema);
864int fileXioDevctl(
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen)
869 if(fileXioInit() < 0)
873 WaitSema(__fileXioCompletionSema);
875 if(arglen > CTL_BUF_SIZE) arglen = CTL_BUF_SIZE;
876 if(buflen > CTL_BUF_SIZE) buflen = CTL_BUF_SIZE;
877 strlcpy(packet->name, name,
sizeof(packet->name));
878 memcpy(packet->arg, arg, arglen);
881 packet->arglen = arglen;
883 packet->buflen = buflen;
884 packet->intr_data = __intr_data;
886 sceSifWriteBackDCache(buf, buflen);
889 rv = sceSifCallRpc(&__cd0, FILEXIO_DEVCTL, __fileXioBlockMode, packet,
sizeof(
struct fxio_devctl_packet), __sbuff, 4, &fxio_ctl_intr, __intr_data);
891 rv = sceSifCallRpc(&__cd0, FILEXIO_DEVCTL, __fileXioBlockMode, packet,
sizeof(
struct fxio_devctl_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL);
895 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
896 else { rv = __sbuff[0]; }
899 SignalSema(__fileXioCompletionSema);
905int fileXioIoctl(
int fd,
int cmd,
void *arg){
909 if(fileXioInit() < 0)
913 WaitSema(__fileXioCompletionSema);
915 memcpy(packet->arg, arg, IOCTL_BUF_SIZE);
920 if((rv = sceSifCallRpc(&__cd0, FILEXIO_IOCTL, __fileXioBlockMode, packet,
sizeof(
struct fxio_ioctl_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
922 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
923 else { rv = __sbuff[0]; }
926 SignalSema(__fileXioCompletionSema);
932int fileXioIoctl2(
int fd,
int command,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen)
937 if(fileXioInit() < 0)
941 WaitSema(__fileXioCompletionSema);
943 if(arglen > CTL_BUF_SIZE) arglen = CTL_BUF_SIZE;
944 if(buflen > CTL_BUF_SIZE) buflen = CTL_BUF_SIZE;
945 memcpy(packet->arg, arg, arglen);
948 packet->cmd = command;
949 packet->arglen = arglen;
951 packet->buflen = buflen;
952 packet->intr_data = __intr_data;
954 sceSifWriteBackDCache(buf, buflen);
957 rv = sceSifCallRpc(&__cd0, FILEXIO_IOCTL2, __fileXioBlockMode, packet,
sizeof(
struct fxio_ioctl2_packet), __sbuff, 4, &fxio_ctl_intr, __intr_data);
959 rv = sceSifCallRpc(&__cd0, FILEXIO_IOCTL2, __fileXioBlockMode, packet,
sizeof(
struct fxio_ioctl2_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL);
963 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
964 else { rv = __sbuff[0]; }
967 SignalSema(__fileXioCompletionSema);
973int fileXioWaitAsync(
int mode,
int *retVal)
975 if(fileXioInit() < 0)
978 if(__fileXioBlockMode != FXIO_NOWAIT)
return 0;
984 WaitSema(__fileXioCompletionSema);
985 SignalSema(__fileXioCompletionSema);
988 *retVal = *(
int *)UNCACHED_SEG(&__sbuff[0]);
990 return FXIO_COMPLETE;
994 if(PollSema(__fileXioCompletionSema) < 0)
995 return FXIO_INCOMPLETE;
997 SignalSema(__fileXioCompletionSema);
1000 *retVal = *(
int *)UNCACHED_SEG(&__sbuff[0]);
1002 return FXIO_COMPLETE;
1009void fileXioSetBlockMode(
int blocking)
1011 __fileXioBlockMode = blocking;
1014int fileXioSetRWBufferSize(
int size){
1018 if(fileXioInit() < 0)
1022 WaitSema(__fileXioCompletionSema);
1024 packet->size = size;
1026 if((rv = sceSifCallRpc(&__cd0, FILEXIO_SETRWBUFFSIZE, 0, packet,
sizeof(
struct fxio_rwbuff), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
1031 SignalSema(__fileXioCompletionSema);