21#define MODNAME "DVRFILE"
23#define DPRINTF(x...) printf(MODNAME ": " x)
28extern int module_start(
int argc,
char *argv[],
void *startaddr,
ModuleInfo_t *mi);
29extern int module_stop(
int argc,
char *argv[],
void *startaddr,
ModuleInfo_t *mi);
36extern int dvrf_df_devctl(
iomanX_iop_file_t *f,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
39extern int dvrf_df_format(
iomanX_iop_file_t *f,
const char *dev,
const char *blockdev,
void *arg,
int arglen);
42extern int dvrf_df_ioctl2(
iomanX_iop_file_t *f,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
46extern int dvrf_df_mount(
iomanX_iop_file_t *f,
const char *fsname,
const char *devname,
int flag,
void *arg,
int arglen);
47extern int dvrf_df_open(
iomanX_iop_file_t *f,
const char *name,
int flags,
int mode);
49extern int dvrf_df_readlink(
iomanX_iop_file_t *f,
const char *path,
char *buf,
unsigned int buflen);
51extern int dvrf_df_rename(
iomanX_iop_file_t *f,
const char *old,
const char *new_1);
53extern int dvrf_df_symlink(
iomanX_iop_file_t *f,
const char *old,
const char *new_1);
57extern void CopySceStat(
iox_stat_t *stat, u8 *dvrp_stat);
59static inline u32 bswap32(u32 val)
62 return __builtin_bswap32(val);
64 return (val << 24) + ((val & 0xFF00) << 8) + ((val >> 8) & 0xFF00) + ((val >> 24) & 0xFF);
70 char translated_name[1040];
72 sprintf(translated_name,
"%s%d:%s", f->
device->name, f->
unit, name);
73 return dvrf_df_chdir(f, translated_name);
78 char translated_name[1040];
80 sprintf(translated_name,
"%s%d:%s", f->
device->name, f->
unit, name);
81 return dvrf_df_chstat(f, translated_name, stat, statmask);
84static int dvrf_translator_df_devctl(
iomanX_iop_file_t *f,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen)
86 char translated_name[1040];
88 sprintf(translated_name,
"%s%d:%s", f->
device->name, f->
unit, name);
89 return dvrf_df_devctl(f, translated_name, cmd, arg, arglen, buf, buflen);
94 char translated_path[1040];
96 sprintf(translated_path,
"%s%d:%s", f->
device->name, f->
unit, path);
97 return dvrf_df_dopen(f, translated_path);
100static int dvrf_translator_df_format(
iomanX_iop_file_t *f,
const char *dev,
const char *blockdev,
void *arg,
int arglen)
102 char translated_dev[1040];
104 if (strcmp(f->
device->name,
"dvr_hdd") != 0) {
105 sprintf(translated_dev,
"%s:%s", f->
device->name, dev);
106 *(u32 *)arg = bswap32(*(u32 *)arg);
108 sprintf(translated_dev,
"%s%d:%s", f->
device->name, f->
unit, dev);
110 return dvrf_df_format(f, translated_dev, blockdev, arg, arglen);
115 char translated_name[1040];
117 sprintf(translated_name,
"%s%d:%s", f->
device->name, f->
unit, name);
118 return dvrf_df_getstat(f, translated_name, stat);
121static int dvrf_translator_df_mkdir(
iomanX_iop_file_t *f,
const char *path,
int mode)
123 char translated_path[1040];
125 sprintf(translated_path,
"%s%d:%s", f->
device->name, f->
unit, path);
126 return dvrf_df_mkdir(f, translated_path, mode);
129static int dvrf_translator_df_mount(
iomanX_iop_file_t *f,
const char *fsname,
const char *devname,
int flag,
void *arg,
int arglen)
131 char translated_fsname[1040];
133 sprintf(translated_fsname,
"%s%d:%s", f->
device->name, f->
unit, fsname);
134 return dvrf_df_mount(f, translated_fsname, devname, flag, arg, arglen);
137static int dvrf_translator_df_open(
iomanX_iop_file_t *f,
const char *name,
int flags,
int mode)
139 char translated_name[1040];
141 sprintf(translated_name,
"%s%d:%s", f->
device->name, f->
unit, name);
142 return dvrf_df_open(f, translated_name, flags, mode);
145static int dvrf_translator_df_readlink(
iomanX_iop_file_t *f,
const char *path,
char *buf,
unsigned int buflen)
147 char translated_path[1040];
149 sprintf(translated_path,
"%s%d:%s", f->
device->name, f->
unit, path);
150 return dvrf_df_readlink(f, translated_path, buf, buflen);
155 char translated_name[1040];
157 sprintf(translated_name,
"%s%d:%s", f->
device->name, f->
unit, name);
158 return dvrf_df_remove(f, translated_name);
161static int dvrf_translator_df_rename(
iomanX_iop_file_t *f,
const char *old,
const char *new_1)
163 char translated_old[1040];
164 char translated_new[1040];
166 sprintf(translated_old,
"%s%d:%s", f->
device->name, f->
unit, old);
167 sprintf(translated_new,
"%s%d:%s", f->
device->name, f->
unit, new_1);
168 return dvrf_df_rename(f, translated_old, translated_new);
173 char translated_path[1040];
175 sprintf(translated_path,
"%s%d:%s", f->
device->name, f->
unit, path);
176 return dvrf_df_rmdir(f, translated_path);
179static int dvrf_translator_df_symlink(
iomanX_iop_file_t *f,
const char *old,
const char *new_1)
181 char translated_old[1040];
182 char translated_new[1040];
184 sprintf(translated_old,
"%s%d:%s", f->
device->name, f->
unit, old);
185 sprintf(translated_new,
"%s%d:%s", f->
device->name, f->
unit, new_1);
186 return dvrf_df_symlink(f, translated_old, translated_new);
189static int dvrf_translator_df_sync(
iomanX_iop_file_t *f,
const char *dev,
int flag)
191 char translated_dev[1040];
193 sprintf(translated_dev,
"%s%d:%s", f->
device->name, f->
unit, dev);
194 return dvrf_df_sync(f, translated_dev, flag);
199 char translated_fsname[1040];
201 sprintf(translated_fsname,
"%s%d:%s", f->
device->name, f->
unit, fsname);
202 return dvrf_df_umount(f, translated_fsname);
208 dvrf_translator_df_format,
209 dvrf_translator_df_open,
215 dvrf_translator_df_remove,
216 dvrf_translator_df_mkdir,
217 dvrf_translator_df_rmdir,
218 dvrf_translator_df_dopen,
221 dvrf_translator_df_getstat,
222 dvrf_translator_df_chstat,
223 dvrf_translator_df_rename,
224 dvrf_translator_df_chdir,
225 dvrf_translator_df_sync,
226 dvrf_translator_df_mount,
227 dvrf_translator_df_umount,
229 dvrf_translator_df_devctl,
230 dvrf_translator_df_symlink,
231 dvrf_translator_df_readlink,
235#define GEN_TRANSLATION_FUNCS(basefuncname, basedevname, shouldbswapformatarg, drvname) \
236 static iomanX_iop_device_t basefuncname##_drv = { \
238 (IOP_DT_FS | IOP_DT_FSEXT), \
241 &dvrf_translator_functbl, \
244GEN_TRANSLATION_FUNCS(dvrpfs,
"dvr_pfs", 1,
"PFS Driver for DVR");
245GEN_TRANSLATION_FUNCS(dvrhdd,
"dvr_hdd", 0,
"HDD Driver for DVR");
246GEN_TRANSLATION_FUNCS(dvrhdck,
"dvr_hdck", 1,
"HDCK Driver for DVR");
247GEN_TRANSLATION_FUNCS(dvrfssk,
"dvr_fssk", 1,
"FSSK Driver for DVR");
248GEN_TRANSLATION_FUNCS(dvrfsck,
"dvr_fsck", 1,
"FSCK Driver for DVR");
251int current_chunk_size;
256IRX_ID(MODNAME, 1, 1);
258int _start(
int argc,
char *argv[],
void *startaddr,
ModuleInfo_t *mi)
261 return module_start(argc, argv, startaddr, mi);
263 return module_stop(argc, argv, startaddr, mi);
266int module_start(
int argc,
char *argv[],
void *startaddr,
ModuleInfo_t *mi)
273 for (i = 0; i < 30000; i += 1) {
274 if ((SPD_REG16(0x4230) & 0x20) != 0) {
281 DPRINTF(
"IOMAN task of DVRP is not running...\n");
282 return MODULE_NO_RESIDENT_END;
285 current_chunk_size = 0x4000;
286 if (iomanX_AddDrv(&dvrpfs_drv) || iomanX_AddDrv(&dvrhdd_drv)) {
289 for (i = 0; i < argc; i += 1) {
290 if (!strcmp(argv[i],
"fschk"))
294 return MODULE_REMOVABLE_END;
296 if (mi && ((mi->
newflags & 2) != 0))
298 return MODULE_RESIDENT_END;
301 DPRINTF(
"dvrfile.irx : FILE SYSTEM CHECK MODE\n");
303 if (iomanX_AddDrv(&dvrhdck_drv)) {
307 if (iomanX_AddDrv(&dvrfssk_drv)) {
311 if (iomanX_AddDrv(&dvrfsck_drv)) {
316 return MODULE_REMOVABLE_END;
318 if (mi && ((mi->
newflags & 2) != 0))
320 return MODULE_RESIDENT_END;
323 iomanX_DelDrv(dvrpfs_drv.name);
324 iomanX_DelDrv(dvrhdd_drv.name);
325 iomanX_DelDrv(dvrhdck_drv.name);
326 iomanX_DelDrv(dvrfssk_drv.name);
327 iomanX_DelDrv(dvrfsck_drv.name);
328 return MODULE_NO_RESIDENT_END;
331int module_stop(
int argc,
char *argv[],
void *startaddr,
ModuleInfo_t *mi)
339 if (iomanX_DelDrv(dvrpfs_drv.name) || iomanX_DelDrv(dvrhdd_drv.name)) {
341 return MODULE_REMOVABLE_END;
343 return MODULE_RESIDENT_END;
346 return MODULE_NO_RESIDENT_END;
349static int check_cmdack_err(
int (*func)(drvdrv_exec_cmd_ack *cmdack), drvdrv_exec_cmd_ack *cmdack,
int *retval,
const char *funcname)
353 DPRINTF(
"%s -> IO error (phase %d)\n", funcname, cmdack->phase);
356 if (cmdack->comp_status) {
358 DPRINTF(
"%s -> Complete parameter error (phase %d), %04X\n", funcname, cmdack->phase, cmdack->comp_status);
361 *retval = (cmdack->return_result_word[0] << 16) + cmdack->return_result_word[1];
375 sema_struct.attr = 0;
376 sema_struct.initial = 1;
378 sema_struct.option = 0;
379 this_sema_id = CreateSema(&sema_struct);
380 if (this_sema_id < 0) {
383 sema_id = this_sema_id;
394 if (DeleteSema(sema_id)) {
404 drvdrv_exec_cmd_ack cmdack;
409 strcpy((
char *)SBUF, name);
410 cmdack.command = 0x1101;
411 cmdack.input_word_count = 0;
412 cmdack.input_buffer = SBUF;
413 cmdack.input_buffer_length = strlen(name) + 1;
414 cmdack.timeout = 10000000;
415 if (check_cmdack_err(&DvrdrvExecCmdAckDmaSendComp, &cmdack, &retval, __func__)) {
426 drvdrv_exec_cmd_ack cmdack;
432 strcpy((
char *)&SBUF[1], name);
433 cmdack.command = 0x1102;
434 cmdack.input_buffer = SBUF;
435 cmdack.input_word_count = 2;
436 cmdack.input_buffer_length = strlen(name) + 5;
437 cmdack.output_buffer = RBUF;
438 cmdack.timeout = 10000000;
439 if (check_cmdack_err(&DvrdrvExecCmdAckDma2Comp, &cmdack, &retval, __func__)) {
442 CopySceStat(stat, (u8 *)RBUF);
452 drvdrv_exec_cmd_ack cmdack;
456 cmdack.command = 0x1103;
458 cmdack.input_word[0] = (dvrp_fd >> 16) & 0xFFFF;
459 cmdack.input_word[1] = dvrp_fd;
460 cmdack.input_word_count = 2;
461 cmdack.timeout = 10000000;
462 if (check_cmdack_err(&DvrdrvExecCmdAckComp, &cmdack, &retval, __func__)) {
476 drvdrv_exec_cmd_ack cmdack;
480 cmdack.command = 0x1104;
482 cmdack.input_word[0] = (dvrp_fd >> 16) & 0xFFFF;
483 cmdack.input_word[1] = dvrp_fd;
484 cmdack.input_word_count = 2;
485 cmdack.timeout = 10000000;
486 if (check_cmdack_err(&DvrdrvExecCmdAckComp, &cmdack, &retval, __func__)) {
496int dvrf_df_devctl(
iomanX_iop_file_t *f,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen)
500 drvdrv_exec_cmd_ack cmdack;
507 if ((*(u32 *)arg & 0x7F) != 0) {
509 }
else if (*(
int *)arg <= 0x20000) {
510 current_chunk_size = *(u32 *)arg;
516 argoffset = arglen + 16;
517 SBUF[0] = bswap32(argoffset);
518 SBUF[1] = bswap32((u32)cmd);
519 SBUF[2] = bswap32(buflen);
520 SBUF[3] = bswap32(arglen);
521 memcpy(&SBUF[4], arg, arglen);
522 strcpy((
char *)SBUF + argoffset, name);
523 cmdack.input_buffer_length = argoffset + strlen(name) + 1;
524 cmdack.command = 0x1105;
525 cmdack.input_word_count = 0;
526 cmdack.input_buffer = SBUF;
527 cmdack.output_buffer = RBUF;
528 cmdack.timeout = 30000000;
529 if (check_cmdack_err(&DvrdrvExecCmdAckDma2Comp, &cmdack, &retval, __func__)) {
532 if (!retval && buf) {
533 memcpy(buf, cmdack.output_buffer, buflen);
543 drvdrv_exec_cmd_ack cmdack;
546 strcpy((
char *)SBUF, path);
547 cmdack.command = 0x1106;
548 cmdack.input_word_count = 0;
549 cmdack.input_buffer = SBUF;
550 cmdack.input_buffer_length = strlen(path) + 1;
551 cmdack.timeout = 10000000;
552 if (check_cmdack_err(&DvrdrvExecCmdAckDmaSendComp, &cmdack, &retval, __func__)) {
556 DPRINTF(
"%s -> fd error (fd=%d)\n", __func__, retval);
569 drvdrv_exec_cmd_ack cmdack;
572 cmdack.command = 0x1107;
574 cmdack.input_word[0] = (dvrp_fd >> 16) & 0xFFFF;
575 cmdack.input_word[1] = dvrp_fd;
576 cmdack.input_word_count = 2;
577 cmdack.output_buffer = RBUF;
578 cmdack.timeout = 10000000;
579 if (check_cmdack_err(&DvrdrvExecCmdAckDmaRecvComp, &cmdack, &retval, __func__)) {
582 memcpy(buf, RBUF,
sizeof(*buf));
583 buf->stat.mode = bswap32(buf->stat.mode);
584 buf->stat.attr = bswap32(buf->stat.attr);
585 buf->stat.size = bswap32(buf->stat.size);
586 buf->stat.hisize = bswap32(buf->stat.hisize);
587 buf->stat.private_0 = bswap32(buf->stat.private_0);
588 buf->stat.private_1 = bswap32(buf->stat.private_1);
589 buf->stat.private_2 = bswap32(buf->stat.private_2);
590 buf->stat.private_3 = bswap32(buf->stat.private_3);
591 buf->stat.private_4 = bswap32(buf->stat.private_4);
592 buf->stat.private_5 = bswap32(buf->stat.private_5);
594 tmp = buf->stat.ctime[6];
595 buf->stat.ctime[6] = buf->stat.ctime[7];
596 buf->stat.ctime[7] = tmp;
597 tmp = buf->stat.atime[6];
598 buf->stat.atime[6] = buf->stat.atime[7];
599 buf->stat.atime[7] = tmp;
600 tmp = buf->stat.mtime[6];
601 buf->stat.mtime[6] = buf->stat.mtime[7];
602 buf->stat.mtime[7] = tmp;
608int dvrf_df_format(
iomanX_iop_file_t *f,
const char *dev,
const char *blockdev,
void *arg,
int arglen)
615 drvdrv_exec_cmd_ack cmdack;
620 dev_len = strlen(dev) + 13;
621 blockdev_len = strlen(blockdev);
623 arg_offset = dev_len + blockdev_len + 1;
624 SBUF[1] = bswap32(arg_offset);
625 SBUF[0] = bswap32(dev_len);
626 SBUF[2] = bswap32(arglen);
627 strcpy((
char *)&SBUF[3], dev_);
628 strcpy((
char *)SBUF + dev_len, blockdev);
629 memcpy((
char *)SBUF + arg_offset, arg, arglen);
630 cmdack.command = 0x1108;
631 cmdack.input_word_count = 0;
632 cmdack.input_buffer = SBUF;
633 cmdack.input_buffer_length = arg_offset + arglen;
634 cmdack.timeout = 3600000000;
635 if (check_cmdack_err(&DvrdrvExecCmdAckDmaSendComp, &cmdack, &retval, __func__)) {
646 drvdrv_exec_cmd_ack cmdack;
651 strcpy((
char *)SBUF, name);
652 cmdack.command = 0x1109;
653 cmdack.input_word_count = 0;
654 cmdack.input_buffer = SBUF;
655 cmdack.input_buffer_length = strlen(name) + 1;
656 cmdack.output_buffer = RBUF;
657 cmdack.timeout = 10000000;
658 if (check_cmdack_err(&DvrdrvExecCmdAckDma2Comp, &cmdack, &retval, __func__)) {
661 CopySceStat(stat, (u8 *)RBUF);
671 drvdrv_exec_cmd_ack cmdack;
675 cmdack.command = 0x110A;
676 cmdack.input_word[0] = (dvrp_fd >> 16) & 0xFFFF;
677 cmdack.input_word[1] = dvrp_fd;
678 cmdack.input_word[2] = (cmd >> 16) & 0xFFFF;
679 cmdack.input_word[3] = cmd;
680 cmdack.input_word[4] = ((u32)param >> 16) & 0xFFFF;
681 cmdack.input_word[5] = (u32)param & 0xFFFF;
682 cmdack.input_word_count = 6;
683 cmdack.timeout = 10000000;
684 if (check_cmdack_err(&DvrdrvExecCmdAckComp, &cmdack, &retval, __func__)) {
692int dvrf_df_ioctl2(
iomanX_iop_file_t *f,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen)
696 drvdrv_exec_cmd_ack cmdack;
700 SBUF[1] = bswap32(cmd);
701 SBUF[2] = bswap32(buflen);
702 SBUF[0] = bswap32(dvrp_fd);
703 SBUF[3] = bswap32(arglen);
704 memcpy(((u8 *)SBUF) + 0x10, arg, arglen);
705 cmdack.command = 0x110B;
706 cmdack.input_buffer = SBUF;
707 cmdack.input_buffer_length = arglen + 16;
708 cmdack.input_word_count = 0;
709 cmdack.output_buffer = RBUF;
710 cmdack.timeout = 10000000;
711 if (check_cmdack_err(&DvrdrvExecCmdAckDma2Comp, &cmdack, &retval, __func__)) {
714 memcpy(buf, RBUF, buflen);
724 drvdrv_exec_cmd_ack cmdack;
728 cmdack.command = 0x110C;
729 cmdack.input_word[0] = (dvrp_fd >> 16) & 0xFFFF;
730 cmdack.input_word[1] = dvrp_fd;
731 cmdack.input_word[2] = (offset >> 16) & 0xFFFF;
732 cmdack.input_word[3] = offset;
733 cmdack.input_word[4] = (mode >> 16) & 0xFFFF;
734 cmdack.input_word[5] = mode;
735 cmdack.input_word_count = 6;
736 cmdack.timeout = 10000000;
737 if (check_cmdack_err(&DvrdrvExecCmdAckComp, &cmdack, &retval, __func__)) {
750 drvdrv_exec_cmd_ack cmdack;
756 cmdack.command = 0x110D;
757 cmdack.input_word[0] = (dvrp_fd >> 16) & 0xFFFF;
758 cmdack.input_word[1] = dvrp_fd;
759 cmdack.input_word[2] = (offset >> 48) & 0xFFFF;
760 cmdack.input_word[3] = (offset >> 32) & 0xFFFF;
761 cmdack.input_word[4] = (offset >> 16) & 0xFFFF;
762 cmdack.input_word[5] = offset;
763 cmdack.input_word[6] = (whence >> 16) & 0xFFFF;
764 cmdack.input_word[7] = whence;
765 cmdack.input_word_count = 8;
766 cmdack.timeout = 10000000;
768 if (check_cmdack_err(&DvrdrvExecCmdAckComp, &cmdack, &rretval, __func__)) {
772 retval = ((s64)cmdack.return_result_word[0] << 48) | ((s64)cmdack.return_result_word[1] << 32) | ((s64)cmdack.return_result_word[2] << 16) | (s64)cmdack.return_result_word[3];
781 drvdrv_exec_cmd_ack cmdack;
786 SBUF[0] = bswap32(mode);
787 strcpy((
char *)&SBUF[1], path);
788 cmdack.command = 0x110E;
789 cmdack.input_word_count = 0;
790 cmdack.input_buffer = SBUF;
791 cmdack.input_buffer_length = strlen(path) + 5;
792 cmdack.timeout = 10000000;
793 if (check_cmdack_err(&DvrdrvExecCmdAckDmaSendComp, &cmdack, &retval, __func__)) {
801int dvrf_df_mount(
iomanX_iop_file_t *f,
const char *fsname,
const char *devname,
int flag,
void *arg,
int arglen)
806 unsigned int arg_offs;
808 drvdrv_exec_cmd_ack cmdack;
813 SBUF[0] = bswap32(flag);
814 fsname_len = strlen(fsname) + 17;
815 devname_len = strlen(devname);
817 arg_offs = fsname_len + devname_len + 1;
818 SBUF[2] = bswap32(arg_offs);
819 SBUF[1] = bswap32(fsname_len);
820 SBUF[3] = bswap32(arglen);
821 strcpy((
char *)&SBUF[4], fsname_);
822 strcpy((
char *)SBUF + fsname_len, devname);
823 memcpy(((u8 *)SBUF) + arg_offs, arg, arglen);
825 cmdack.command = 0x110F;
826 cmdack.input_buffer = SBUF;
827 cmdack.input_word_count = 0;
828 cmdack.input_buffer_length = arg_offs + arglen;
829 cmdack.timeout = 10000000;
830 if (check_cmdack_err(&DvrdrvExecCmdAckDmaSendComp, &cmdack, &retval, __func__)) {
842 drvdrv_exec_cmd_ack cmdack;
846 SBUF[0] = bswap32(flags);
847 mode_ = (mode_ << 8) + (mode_ >> 8);
848 memcpy(&SBUF[1], &mode_,
sizeof(mode_));
849 strcpy((
char *)&SBUF[1] + 2, name);
850 cmdack.command = 0x1110;
851 cmdack.input_word_count = 0;
852 cmdack.input_buffer = SBUF;
853 cmdack.input_buffer_length = strlen(name) + 7;
854 cmdack.timeout = 10000000;
855 if (check_cmdack_err(&DvrdrvExecCmdAckDmaSendComp, &cmdack, &retval, __func__)) {
859 DPRINTF(
"%s -> fd error (fd=%d)\n", __func__, retval);
877 drvdrv_exec_cmd_ack cmdack;
881 if (((u32)ptr & 3) != 0) {
882 unaligned_size = 4 - ((u32)ptr & 3);
885 out_buf = (
char *)ptr;
888 cmdack.command = 0x1111;
889 cmdack.input_word[0] = (dvrp_fd >> 16) & 0xFFFF;
890 cmdack.input_word[1] = dvrp_fd;
891 cmdack.input_word_count = 4;
892 cmdack.timeout = 10000000;
895 if (remain_size <= 0) {
898 chunk_size = current_chunk_size;
899 if (remain_size < current_chunk_size) {
900 chunk_size = remain_size;
902 if (unaligned_size != 0) {
903 chunk_size = unaligned_size;
905 cmdack.input_word[2] = (chunk_size >> 16) & 0xFFFF;
906 cmdack.input_word[3] = chunk_size;
907 if ((chunk_size & 0x7F) != 0 || unaligned_size != 0) {
908 cmdack.output_buffer = (
char *)RBUF;
910 cmdack.output_buffer = out_buf;
912 if (check_cmdack_err(&DvrdrvExecCmdAckDmaRecvComp, &cmdack, &read_size, __func__)) {
916 if ((chunk_size & 0x7F) != 0 || unaligned_size != 0) {
917 memcpy(out_buf, RBUF, chunk_size);
920 if (read_size <= 0) {
923 remain_size -= read_size;
924 out_buf += read_size;
925 total_read += read_size;
933int dvrf_df_readlink(
iomanX_iop_file_t *f,
const char *path,
char *buf,
unsigned int buflen)
936 drvdrv_exec_cmd_ack cmdack;
941 SBUF[0] = bswap32(buflen);
942 strcpy((
char *)&SBUF[1], path);
943 cmdack.input_buffer_length = strlen(path) + 5;
944 cmdack.command = 0x1112;
945 cmdack.input_word_count = 0;
946 cmdack.input_buffer = SBUF;
947 cmdack.output_buffer = RBUF;
948 cmdack.timeout = 10000000;
949 if (check_cmdack_err(&DvrdrvExecCmdAckDma2Comp, &cmdack, &retval, __func__)) {
952 memcpy(buf, RBUF, buflen);
961 drvdrv_exec_cmd_ack cmdack;
966 strcpy((
char *)SBUF, name);
967 cmdack.command = 0x1113;
968 cmdack.input_word_count = 0;
969 cmdack.input_buffer = SBUF;
970 cmdack.input_buffer_length = strlen(name) + 1;
971 cmdack.timeout = 10000000;
972 if (check_cmdack_err(&DvrdrvExecCmdAckDmaSendComp, &cmdack, &retval, __func__)) {
986 drvdrv_exec_cmd_ack cmdack;
991 old_strlen = strlen(old);
993 new_offs = old_strlen + 5;
994 SBUF[0] = bswap32(new_offs);
995 strcpy((
char *)&SBUF[1], old_);
996 strcpy((
char *)SBUF + new_offs, new_1);
997 cmdack.command = 0x1114;
998 cmdack.input_word_count = 0;
999 cmdack.input_buffer = SBUF;
1000 cmdack.input_buffer_length = new_offs + strlen(new_1) + 1;
1001 cmdack.timeout = 10000000;
1002 if (check_cmdack_err(&DvrdrvExecCmdAckDmaSendComp, &cmdack, &retval, __func__)) {
1006 SignalSema(sema_id);
1013 drvdrv_exec_cmd_ack cmdack;
1018 strcpy((
char *)SBUF, path);
1019 cmdack.command = 0x1115;
1020 cmdack.input_word_count = 0;
1021 cmdack.input_buffer = SBUF;
1022 cmdack.input_buffer_length = strlen(path) + 1;
1023 cmdack.timeout = 10000000;
1024 if (check_cmdack_err(&DvrdrvExecCmdAckDmaSendComp, &cmdack, &retval, __func__)) {
1028 SignalSema(sema_id);
1038 drvdrv_exec_cmd_ack cmdack;
1043 old_len = strlen(old);
1045 new_offs = old_len + 5;
1046 SBUF[0] = bswap32(new_offs);
1047 strcpy((
char *)&SBUF[1], old_);
1048 strcpy((
char *)SBUF + new_offs, new_1);
1049 cmdack.command = 0x1116;
1050 cmdack.input_word_count = 0;
1051 cmdack.input_buffer = SBUF;
1052 cmdack.input_buffer_length = new_offs + strlen(new_1) + 1;
1053 cmdack.timeout = 10000000;
1054 if (check_cmdack_err(&DvrdrvExecCmdAckDmaSendComp, &cmdack, &retval, __func__)) {
1058 SignalSema(sema_id);
1065 drvdrv_exec_cmd_ack cmdack;
1070 SBUF[0] = bswap32(flag);
1071 strcpy((
char *)&SBUF[1], dev);
1072 cmdack.command = 0x1117;
1073 cmdack.input_word_count = 0;
1074 cmdack.input_buffer = SBUF;
1075 cmdack.input_buffer_length = strlen(dev) + 5;
1076 cmdack.timeout = 10000000;
1077 if (check_cmdack_err(&DvrdrvExecCmdAckDmaSendComp, &cmdack, &retval, __func__)) {
1081 SignalSema(sema_id);
1088 drvdrv_exec_cmd_ack cmdack;
1093 strcpy((
char *)SBUF, fsname);
1094 cmdack.command = 0x1118;
1095 cmdack.input_word_count = 0;
1096 cmdack.input_buffer = SBUF;
1097 cmdack.input_buffer_length = strlen(fsname) + 1;
1098 cmdack.timeout = 10000000;
1099 if (check_cmdack_err(&DvrdrvExecCmdAckDmaSendComp, &cmdack, &retval, __func__)) {
1103 SignalSema(sema_id);
1115 drvdrv_exec_cmd_ack cmdack;
1118 in_buffer = (
char *)ptr;
1120 if (((u32)ptr & 3) != 0) {
1121 unaligned_size = 4 - ((u32)ptr & 3);
1122 memcpy(RBUF, ptr, unaligned_size);
1127 cmdack.command = 0x1119;
1128 cmdack.input_word[0] = (dvrp_fd >> 16) & 0xFFFF;
1129 cmdack.input_word[1] = dvrp_fd;
1130 cmdack.input_word_count = 4;
1131 cmdack.timeout = 10000000;
1132 while (remain_size > 0) {
1134 chunk_size = current_chunk_size;
1135 if (remain_size < current_chunk_size) {
1136 chunk_size = remain_size;
1138 if (unaligned_size != 0) {
1139 chunk_size = unaligned_size;
1141 cmdack.input_word[2] = (chunk_size >> 16) & 0xFFFF;
1142 cmdack.input_word[3] = chunk_size;
1143 if (unaligned_size != 0) {
1144 cmdack.input_buffer = (
char *)RBUF;
1147 cmdack.input_buffer = in_buffer;
1149 cmdack.input_buffer_length = chunk_size;
1150 if (check_cmdack_err(&DvrdrvExecCmdAckDmaSendComp, &cmdack, &retval, __func__)) {
1156 remain_size -= retval;
1157 in_buffer += retval;
1158 total_write += retval;
1160 retval = total_write;
1162 SignalSema(sema_id);
1166void CopySceStat(
iox_stat_t *stat, u8 *dvrp_stat)
1168 stat->mode = bswap32(((u32 *)dvrp_stat)[0]);
1169 stat->attr = bswap32(((u32 *)dvrp_stat)[1]);
1170 stat->size = bswap32(((u32 *)dvrp_stat)[2]);
1171 memcpy(stat->ctime, &((u32 *)dvrp_stat)[3], 6);
1172 stat->ctime[6] = ((u8 *)dvrp_stat)[19];
1173 stat->ctime[7] = ((u8 *)dvrp_stat)[18];
1174 memcpy(stat->atime, &((u32 *)dvrp_stat)[5], 6);
1175 stat->atime[6] = ((u8 *)dvrp_stat)[27];
1176 stat->atime[7] = ((u8 *)dvrp_stat)[26];
1177 memcpy(stat->mtime, &((u32 *)dvrp_stat)[7], 6);
1178 stat->mtime[6] = ((u8 *)dvrp_stat)[35];
1179 stat->mtime[7] = ((u8 *)dvrp_stat)[34];
1180 stat->hisize = bswap32(((u32 *)dvrp_stat)[9]);
1181 stat->
private_0 = bswap32(((u32 *)dvrp_stat)[10]);
1182 stat->private_1 = bswap32(((u32 *)dvrp_stat)[11]);
1183 stat->private_2 = bswap32(((u32 *)dvrp_stat)[12]);
1184 stat->private_3 = bswap32(((u32 *)dvrp_stat)[13]);
1185 stat->private_4 = bswap32(((u32 *)dvrp_stat)[14]);
1186 stat->
private_5 = bswap32(((u32 *)dvrp_stat)[15]);
struct _iomanX_iop_device * device