27#define NEWLIB_PORT_AWARE
31extern int _iop_reboot_count;
33void _ps2sdk_fileXio_init();
34void _ps2sdk_fileXio_deinit();
54#ifdef F___fileXioInited
55int __fileXioInited = 0;
57extern int __fileXioInited;
60#ifdef F___fileXioBlockMode
61int __fileXioBlockMode;
63extern int __fileXioBlockMode;
66#ifdef F___fileXioCompletionSema
67int __fileXioCompletionSema = -1;
69extern int __fileXioCompletionSema;
72#ifdef F___lock_sema_id
73int __lock_sema_id = -1;
75extern int __lock_sema_id;
78static inline void _fxio_intr(
void)
80 iSignalSema(__fileXioCompletionSema);
83static inline int _lock(
void)
85 return(WaitSema(__lock_sema_id));
88static inline int _unlock(
void)
90 return(SignalSema(__lock_sema_id));
98 static int _rb_count = 0;
100 if(_rb_count != _iop_reboot_count)
102 _rb_count = _iop_reboot_count;
115 __lock_sema_id = CreateSema(&sp);
117 while(((res = sceSifBindRpc(&__cd0, FILEXIO_IRX, 0)) >= 0) && (__cd0.server == NULL))
126 __fileXioCompletionSema = CreateSema(&sp);
127 if (__fileXioCompletionSema < 0)
131 __fileXioBlockMode = FXIO_WAIT;
133 _ps2sdk_fileXio_init();
140void fileXioExit(
void)
144 if(__lock_sema_id >= 0) DeleteSema(__lock_sema_id);
145 if(__fileXioCompletionSema >= 0) DeleteSema(__fileXioCompletionSema);
147 memset(&__cd0, 0,
sizeof(__cd0));
149 _ps2sdk_fileXio_deinit();
156void fileXioStop(
void)
158 if(fileXioInit() < 0)
161 sceSifCallRpc(&__cd0, FILEXIO_STOP, 0, __sbuff, 0, __sbuff, 0, 0, 0);
167#ifdef F_fileXioGetDeviceList
168int fileXioGetDeviceList(
struct fileXioDevice deviceEntry[],
unsigned int req_entries)
173 if(fileXioInit() < 0)
177 WaitSema(__fileXioCompletionSema);
179 packet->deviceEntry = deviceEntry;
180 packet->reqEntries = req_entries;
183 if((rv = sceSifCallRpc(&__cd0, FILEXIO_GETDEVICELIST, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_devlist_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
185 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
186 else { rv = __sbuff[0]; }
189 SignalSema(__fileXioCompletionSema);
196#ifdef F_fileXioGetdir
197int fileXioGetdir(
const char* pathname,
struct fileXioDirEntry dirEntry[],
unsigned int req_entries)
202 if(fileXioInit() < 0)
206 WaitSema(__fileXioCompletionSema);
209 strncpy(packet->pathname, pathname,
sizeof(packet->pathname));
211 sceSifWriteBackDCache(dirEntry, (
sizeof(
struct fileXioDirEntry) * req_entries));
213 packet->dirEntry = dirEntry;
214 packet->reqEntries = req_entries;
217 if((rv = sceSifCallRpc(&__cd0, FILEXIO_GETDIR, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_getdir_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
219 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
220 else { rv = __sbuff[0]; }
223 SignalSema(__fileXioCompletionSema);
231int fileXioMount(
const char* mountpoint,
const char* mountstring,
int flag)
236 if(fileXioInit() < 0)
240 WaitSema(__fileXioCompletionSema);
242 strncpy(packet->blockdevice, mountstring,
sizeof(packet->blockdevice));
243 strncpy(packet->mountpoint, mountpoint,
sizeof(packet->mountpoint));
244 packet->flags = flag;
246 if((rv = sceSifCallRpc(&__cd0, FILEXIO_MOUNT, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_mount_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
248 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
249 else { rv = __sbuff[0]; }
252 SignalSema(__fileXioCompletionSema);
259#ifdef F_fileXioUmount
260int fileXioUmount(
const char* mountpoint)
265 if(fileXioInit() < 0)
269 WaitSema(__fileXioCompletionSema);
271 strncpy(packet->mountpoint, mountpoint,
sizeof(packet->mountpoint));
273 if((rv = sceSifCallRpc(&__cd0, FILEXIO_UMOUNT, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_unmount_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
275 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
276 else { rv = __sbuff[0]; }
279 SignalSema(__fileXioCompletionSema);
286#ifdef F_fileXioCopyfile
287int fileXioCopyfile(
const char* source,
const char* dest,
int mode)
292 if(fileXioInit() < 0)
296 WaitSema(__fileXioCompletionSema);
298 strncpy(packet->source, source,
sizeof(packet->source));
299 strncpy(packet->dest, dest,
sizeof(packet->dest));
302 if((rv = sceSifCallRpc(&__cd0, FILEXIO_COPYFILE, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_copyfile_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
304 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
305 else { rv = __sbuff[0]; }
308 SignalSema(__fileXioCompletionSema);
316int fileXioMkdir(
const char* pathname,
int mode)
321 if(fileXioInit() < 0)
325 WaitSema(__fileXioCompletionSema);
327 strncpy(packet->pathname, pathname,
sizeof(packet->pathname));
330 if((rv = sceSifCallRpc(&__cd0, FILEXIO_MKDIR, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_mkdir_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
332 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
333 else { rv = __sbuff[0]; }
336 SignalSema(__fileXioCompletionSema);
344int fileXioRmdir(
const char* pathname)
349 if(fileXioInit() < 0)
353 WaitSema(__fileXioCompletionSema);
355 strncpy(packet->pathname, pathname,
sizeof(packet->pathname));
357 if((rv = sceSifCallRpc(&__cd0, FILEXIO_RMDIR, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_pathsel_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
359 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
360 else { rv = __sbuff[0]; }
363 SignalSema(__fileXioCompletionSema);
370#ifdef F_fileXioRemove
371int fileXioRemove(
const char* pathname)
376 if(fileXioInit() < 0)
380 WaitSema(__fileXioCompletionSema);
382 strncpy(packet->pathname, pathname,
sizeof(packet->pathname));
384 if((rv = sceSifCallRpc(&__cd0, FILEXIO_REMOVE, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_pathsel_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
386 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
387 else { rv = __sbuff[0]; }
390 SignalSema(__fileXioCompletionSema);
397#ifdef F_fileXioRename
398int fileXioRename(
const char* source,
const char* dest)
403 if(fileXioInit() < 0)
407 WaitSema(__fileXioCompletionSema);
409 strncpy(packet->source, source,
sizeof(packet->source));
410 strncpy(packet->dest, dest,
sizeof(packet->dest));
412 if((rv = sceSifCallRpc(&__cd0, FILEXIO_RENAME, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_rename_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
414 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
415 else { rv = __sbuff[0]; }
418 SignalSema(__fileXioCompletionSema);
425#ifdef F_fileXioSymlink
426int fileXioSymlink(
const char* source,
const char* dest)
431 if(fileXioInit() < 0)
435 WaitSema(__fileXioCompletionSema);
437 strncpy(packet->source, source,
sizeof(packet->source));
438 strncpy(packet->dest, dest,
sizeof(packet->dest));
440 if((rv = sceSifCallRpc(&__cd0, FILEXIO_SYMLINK, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_rename_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
442 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
443 else { rv = __sbuff[0]; }
446 SignalSema(__fileXioCompletionSema);
453#ifdef F_fileXioReadlink
454int fileXioReadlink(
const char* source,
char* buf,
unsigned int buflen)
459 if(fileXioInit() < 0)
463 WaitSema(__fileXioCompletionSema);
465 if( !IS_UNCACHED_SEG(buf))
466 sceSifWriteBackDCache(buf, buflen);
468 strncpy(packet->source, source,
sizeof(packet->source));
469 packet->buffer = buf;
470 packet->buflen = buflen;
472 if((rv = sceSifCallRpc(&__cd0, FILEXIO_READLINK, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_readlink_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
474 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
475 else { rv = __sbuff[0]; }
478 SignalSema(__fileXioCompletionSema);
486int fileXioChdir(
const char* pathname)
491 if(fileXioInit() < 0)
495 WaitSema(__fileXioCompletionSema);
497 strncpy(packet->pathname, pathname,
sizeof(packet->pathname));
499 if((rv = sceSifCallRpc(&__cd0, FILEXIO_CHDIR, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_pathsel_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
501 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
502 else { rv = __sbuff[0]; }
505 SignalSema(__fileXioCompletionSema);
513int fileXioOpen(
const char* source,
int flags, ...)
519 va_start(alist, flags);
520 mode = va_arg(alist,
int);
523 if(fileXioInit() < 0)
527 WaitSema(__fileXioCompletionSema);
529 strncpy(packet->pathname, source,
sizeof(packet->pathname));
530 packet->flags = flags;
532 if((rv = sceSifCallRpc(&__cd0, FILEXIO_OPEN, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_open_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
534 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
535 else { rv = __sbuff[0]; }
538 SignalSema(__fileXioCompletionSema);
546int fileXioClose(
int fd)
551 if(fileXioInit() < 0)
555 WaitSema(__fileXioCompletionSema);
559 if((rv = sceSifCallRpc(&__cd0, FILEXIO_CLOSE, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_close_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
561 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
562 else { rv = __sbuff[0]; }
565 SignalSema(__fileXioCompletionSema);
573static inline void recv_intr(
void *data_raw)
575 rests_pkt *rests = UNCACHED_SEG(data_raw);
577 if(rests->ssize) memcpy(rests->sbuf, rests->sbuffer, rests->ssize);
578 if(rests->esize) memcpy(rests->ebuf, rests->ebuffer, rests->esize);
580 iSignalSema(__fileXioCompletionSema);
583int fileXioRead(
int fd,
void *buf,
int size)
588 if(fileXioInit() < 0)
592 WaitSema(__fileXioCompletionSema);
595 packet->buffer = buf;
597 packet->intrData = __intr_data;
599 if (!IS_UNCACHED_SEG(buf))
600 sceSifWriteBackDCache(buf, size);
602 if((rv = sceSifCallRpc(&__cd0, FILEXIO_READ, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_read_packet), __sbuff, 4, &recv_intr, __intr_data)) >= 0)
604 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
605 else { rv = __sbuff[0]; }
608 SignalSema(__fileXioCompletionSema);
616int fileXioWrite(
int fd,
const void *buf,
int size)
622 if(fileXioInit() < 0)
626 WaitSema(__fileXioCompletionSema);
628 if((
unsigned int)buf & 0x3F)
630 miss = 64 - ((
unsigned int)buf & 0x3F);
631 if(miss > (
unsigned int)size) miss = size;
637 packet->buffer = buf;
639 packet->unalignedDataLen = miss;
641 memcpy(packet->unalignedData, buf, miss);
643 if(!IS_UNCACHED_SEG(buf))
644 sceSifWriteBackDCache((
void*)buf, size);
646 if((rv = sceSifCallRpc(&__cd0, FILEXIO_WRITE, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_write_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
648 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
649 else { rv = __sbuff[0]; }
652 SignalSema(__fileXioCompletionSema);
660int fileXioLseek(
int fd,
int offset,
int whence)
665 if(fileXioInit() < 0)
669 WaitSema(__fileXioCompletionSema);
672 packet->offset = (u32)offset;
673 packet->whence = whence;
675 if((rv = sceSifCallRpc(&__cd0, FILEXIO_LSEEK, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_lseek_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
677 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
678 else { rv = __sbuff[0]; }
681 SignalSema(__fileXioCompletionSema);
688#ifdef F_fileXioLseek64
692s64 fileXioLseek64(
int fd, s64 offset,
int whence)
698 if(fileXioInit() < 0)
702 WaitSema(__fileXioCompletionSema);
705 packet->offset_lo = (u32)(offset & 0xffffffff);
706 packet->offset_hi = (u32)((offset >> 32) & 0xffffffff);
707 packet->whence = whence;
709 if((rv = sceSifCallRpc(&__cd0, FILEXIO_LSEEK64, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_lseek64_packet), __sbuff, 8, (
void *)&_fxio_intr, NULL)) >= 0)
711 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
713 s64 rvHI = ret_packet->pos_hi;
715 rv = rvHI | ret_packet->pos_lo;
719 SignalSema(__fileXioCompletionSema);
727#ifdef F_fileXioChStat
728int fileXioChStat(
const char *name,
iox_stat_t *stat,
int mask)
733 if(fileXioInit() < 0)
737 WaitSema(__fileXioCompletionSema);
739 strncpy(packet->pathname, name,
sizeof(packet->pathname));
743 if(!IS_UNCACHED_SEG(stat))
744 sceSifWriteBackDCache(stat,
sizeof(
iox_stat_t));
746 if((rv = sceSifCallRpc(&__cd0, FILEXIO_CHSTAT, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_chstat_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
748 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
749 else { rv = __sbuff[0]; }
752 SignalSema(__fileXioCompletionSema);
759#ifdef F_fileXioGetStat
760int fileXioGetStat(
const char *name,
iox_stat_t *stat)
765 if(fileXioInit() < 0)
769 WaitSema(__fileXioCompletionSema);
771 strncpy(packet->pathname, name,
sizeof(packet->pathname));
774 if(!IS_UNCACHED_SEG(stat))
775 sceSifWriteBackDCache(stat,
sizeof(
iox_stat_t));
777 if((rv = sceSifCallRpc(&__cd0, FILEXIO_GETSTAT, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_getstat_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
779 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
780 else { rv = __sbuff[0]; }
783 SignalSema(__fileXioCompletionSema);
790#ifdef F_fileXioFormat
791int fileXioFormat(
const char *dev,
const char *blockdev,
const void *args,
int arglen)
796 if(fileXioInit() < 0)
800 WaitSema(__fileXioCompletionSema);
802 strncpy(packet->device, dev,
sizeof(packet->device));
804 strncpy(packet->blockDevice, blockdev,
sizeof(packet->blockDevice));
806 if((
unsigned int)arglen >
sizeof(packet->args)) arglen =
sizeof(packet->args);
807 memcpy(packet->args, args, arglen);
808 packet->arglen = arglen;
810 if((rv = sceSifCallRpc(&__cd0, FILEXIO_FORMAT, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_format_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
812 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
813 else { rv = __sbuff[0]; }
816 SignalSema(__fileXioCompletionSema);
824int fileXioSync(
const char *devname,
int flag)
829 if(fileXioInit() < 0)
833 WaitSema(__fileXioCompletionSema);
835 strncpy(packet->device, devname,
sizeof(packet->device));
836 packet->flags = flag;
838 if((rv = sceSifCallRpc(&__cd0, FILEXIO_SYNC, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_sync_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
840 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
841 else { rv = __sbuff[0]; }
844 SignalSema(__fileXioCompletionSema);
852int fileXioDopen(
const char *name)
857 if(fileXioInit() < 0)
861 WaitSema(__fileXioCompletionSema);
863 strncpy(packet->pathname, name,
sizeof(packet->pathname));
864 if((rv = sceSifCallRpc(&__cd0, FILEXIO_DOPEN, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_pathsel_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
866 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
867 else { rv = __sbuff[0]; }
870 SignalSema(__fileXioCompletionSema);
877#ifdef F_fileXioDclose
878int fileXioDclose(
int fd)
883 if(fileXioInit() < 0)
887 WaitSema(__fileXioCompletionSema);
890 if((rv = sceSifCallRpc(&__cd0, FILEXIO_DCLOSE, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_close_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
892 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
893 else { rv = __sbuff[0]; }
896 SignalSema(__fileXioCompletionSema);
909 if(fileXioInit() < 0)
913 WaitSema(__fileXioCompletionSema);
916 packet->dirent = dirent;
918 if (!IS_UNCACHED_SEG(dirent))
921 if((rv = sceSifCallRpc(&__cd0, FILEXIO_DREAD, __fileXioBlockMode, __sbuff,
sizeof(
struct fxio_dread_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
923 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
924 else { rv = __sbuff[0]; }
927 SignalSema(__fileXioCompletionSema);
934static inline void fxio_ctl_intr(
void *data_raw)
938 memcpy(pkt->dest, pkt->buf, pkt->len);
940 iSignalSema(__fileXioCompletionSema);
943#ifdef F_fileXioDevctl
944int fileXioDevctl(
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen)
949 if(fileXioInit() < 0)
953 WaitSema(__fileXioCompletionSema);
955 if(arglen > CTL_BUF_SIZE) arglen = CTL_BUF_SIZE;
956 if(buflen > CTL_BUF_SIZE) buflen = CTL_BUF_SIZE;
957 strncpy(packet->name, name, CTL_BUF_SIZE);
958 packet->name[CTL_BUF_SIZE-1] =
'\0';
959 memcpy(packet->arg, arg, arglen);
962 packet->arglen = arglen;
964 packet->buflen = buflen;
965 packet->intr_data = __intr_data;
967 sceSifWriteBackDCache(buf, buflen);
970 rv = sceSifCallRpc(&__cd0, FILEXIO_DEVCTL, __fileXioBlockMode, packet,
sizeof(
struct fxio_devctl_packet), __sbuff, 4, &fxio_ctl_intr, __intr_data);
972 rv = sceSifCallRpc(&__cd0, FILEXIO_DEVCTL, __fileXioBlockMode, packet,
sizeof(
struct fxio_devctl_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL);
976 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
977 else { rv = __sbuff[0]; }
980 SignalSema(__fileXioCompletionSema);
988int fileXioIoctl(
int fd,
int cmd,
void *arg){
992 if(fileXioInit() < 0)
996 WaitSema(__fileXioCompletionSema);
998 memcpy(packet->arg, arg, IOCTL_BUF_SIZE);
1003 if((rv = sceSifCallRpc(&__cd0, FILEXIO_IOCTL, __fileXioBlockMode, packet,
sizeof(
struct fxio_ioctl_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
1005 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
1006 else { rv = __sbuff[0]; }
1009 SignalSema(__fileXioCompletionSema);
1016#ifdef F_fileXioIoctl2
1017int fileXioIoctl2(
int fd,
int command,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen)
1022 if(fileXioInit() < 0)
1026 WaitSema(__fileXioCompletionSema);
1028 if(arglen > CTL_BUF_SIZE) arglen = CTL_BUF_SIZE;
1029 if(buflen > CTL_BUF_SIZE) buflen = CTL_BUF_SIZE;
1030 memcpy(packet->arg, arg, arglen);
1033 packet->cmd = command;
1034 packet->arglen = arglen;
1036 packet->buflen = buflen;
1037 packet->intr_data = __intr_data;
1039 sceSifWriteBackDCache(buf, buflen);
1042 rv = sceSifCallRpc(&__cd0, FILEXIO_IOCTL2, __fileXioBlockMode, packet,
sizeof(
struct fxio_ioctl2_packet), __sbuff, 4, &fxio_ctl_intr, __intr_data);
1044 rv = sceSifCallRpc(&__cd0, FILEXIO_IOCTL2, __fileXioBlockMode, packet,
sizeof(
struct fxio_ioctl2_packet), __sbuff, 4, (
void *)&_fxio_intr, NULL);
1048 if(__fileXioBlockMode == FXIO_NOWAIT) { rv = 0; }
1049 else { rv = __sbuff[0]; }
1052 SignalSema(__fileXioCompletionSema);
1059#ifdef F_fileXioWaitAsync
1060int fileXioWaitAsync(
int mode,
int *retVal)
1062 if(fileXioInit() < 0)
1065 if(__fileXioBlockMode != FXIO_NOWAIT)
return 0;
1071 WaitSema(__fileXioCompletionSema);
1072 SignalSema(__fileXioCompletionSema);
1075 *retVal = *(
int *)UNCACHED_SEG(&__sbuff[0]);
1077 return FXIO_COMPLETE;
1081 if(PollSema(__fileXioCompletionSema) < 0)
1082 return FXIO_INCOMPLETE;
1084 SignalSema(__fileXioCompletionSema);
1087 *retVal = *(
int *)UNCACHED_SEG(&__sbuff[0]);
1089 return FXIO_COMPLETE;
1097#ifdef F_fileXioSetBlockMode
1098void fileXioSetBlockMode(
int blocking)
1100 __fileXioBlockMode = blocking;
1104#ifdef F_fileXioSetRWBufferSize
1105int fileXioSetRWBufferSize(
int size){
1109 if(fileXioInit() < 0)
1113 WaitSema(__fileXioCompletionSema);
1115 packet->size = size;
1117 if((rv = sceSifCallRpc(&__cd0, FILEXIO_SETRWBUFFSIZE, 0, packet,
sizeof(
struct fxio_rwbuff), __sbuff, 4, (
void *)&_fxio_intr, NULL)) >= 0)
1122 SignalSema(__fileXioCompletionSema);