24#define DPRINTF(x...) printf(MODNAME ": " x)
29extern int module_start(
int argc,
char *argv[],
void *startaddr,
ModuleInfo_t *mi);
30extern int module_stop(
int argc,
char *argv[],
void *startaddr,
ModuleInfo_t *mi);
34extern int dvr_df_devctl(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
35extern int dvr_df_ioctl2(
iomanX_iop_file_t *f,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
36extern int dvrioctl2_rec_start(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
37extern int dvrioctl2_rec_pause(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
38extern int dvrioctl2_rec_stop(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
39extern int dvrioctl2_set_rec_end_time(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
40extern int dvrioctl2_get_rec_info(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
41extern int dvrioctl2_get_rec_time(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
42extern int dvrioctl2_read_resfile(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
43extern int dvrioctl2_clear_resfile_flag(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
44extern int dvrioctl2_rec_prohibit(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
45extern int dvrioctl2_get_status_register(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
46extern int dvrioctl2_get_ifo_time_entry(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
47extern int dvrioctl2_get_ifo_vobu_entry(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
48extern int dvrioctl2_epg_test(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
49extern int dvrioctl2_send_timer_event(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
50extern int dvrioctl2_epg_cancel(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
51extern int dvrioctl2_tevent_buf_clr(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
52extern int dvrioctl2_tevent_buf_send(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
53extern int dvrioctl2_tevent_buf_trans_dvrp(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
54extern int dvrioctl2_start_hdd_test(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
55extern int dvrioctl2_stop_hdd_test(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
56extern int dvrioctl2_get_hdd_test_stat(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
57extern int dvrioctl2_pre_update_a(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
58extern int dvrioctl2_pre_update_b(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
59extern int dvrioctl2_get_rec_vro_pckn(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
60extern int dvrioctl2_enc_dec_test(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
61extern int dvrioctl2_tevent_buf_recv_first(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
62extern int dvrioctl2_tevent_buf_recv_next(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
63extern int dvrioctl2_finish_auto_process(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
64extern int dvrioctl2_make_menu(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
65extern int dvrioctl2_re_enc_start(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
66extern int dvrioctl2_rec_pictclip(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
67extern int dvrpAuthEnc(u16);
70unsigned char dvrpAuth_tbl[256] = {0x00};
75 int (*fn)(
iomanX_iop_file_t *,
const char *, int,
void *,
unsigned int,
void *,
unsigned int);
78 {0x5663, &dvrioctl2_get_status_register},
79 {0x5638, &dvrioctl2_get_ifo_time_entry},
80 {0x5639, &dvrioctl2_get_ifo_vobu_entry},
81 {0x5632, &dvrioctl2_rec_start},
82 {0x5633, &dvrioctl2_rec_pause},
83 {0x5634, &dvrioctl2_rec_stop},
84 {0x5635, &dvrioctl2_set_rec_end_time},
85 {0x5636, &dvrioctl2_get_rec_info},
86 {0x5637, &dvrioctl2_get_rec_time},
87 {0x563A, &dvrioctl2_read_resfile},
88 {0x563B, &dvrioctl2_clear_resfile_flag},
89 {0x563F, &dvrioctl2_rec_prohibit},
90 {0x5640, &dvrioctl2_epg_test},
91 {0x5641, &dvrioctl2_send_timer_event},
92 {0x5642, &dvrioctl2_epg_cancel},
93 {0x565A, &dvrioctl2_tevent_buf_clr},
94 {0x565B, &dvrioctl2_tevent_buf_send},
95 {0x565C, &dvrioctl2_tevent_buf_trans_dvrp},
96 {0x5643, &dvrioctl2_start_hdd_test},
97 {0x5644, &dvrioctl2_stop_hdd_test},
98 {0x5645, &dvrioctl2_get_hdd_test_stat},
99 {0x5646, &dvrioctl2_pre_update_a},
100 {0x5647, &dvrioctl2_pre_update_b},
101 {0x5648, &dvrioctl2_get_rec_vro_pckn},
102 {0x5649, &dvrioctl2_enc_dec_test},
103 {0x565D, &dvrioctl2_tevent_buf_recv_first},
104 {0x565E, &dvrioctl2_tevent_buf_recv_next},
105 {0x5651, &dvrioctl2_finish_auto_process},
106 {0x564A, &dvrioctl2_make_menu},
107 {0x564B, &dvrioctl2_re_enc_start},
108 {0x5650, &dvrioctl2_rec_pictclip},
111IOMANX_RETURN_VALUE_IMPL(
EUNSUP);
117 IOMANX_RETURN_VALUE(
EUNSUP),
118 IOMANX_RETURN_VALUE(
EUNSUP),
119 IOMANX_RETURN_VALUE(
EUNSUP),
120 IOMANX_RETURN_VALUE(
EUNSUP),
121 IOMANX_RETURN_VALUE(
EUNSUP),
122 IOMANX_RETURN_VALUE(
EUNSUP),
124 IOMANX_RETURN_VALUE(
EUNSUP),
125 IOMANX_RETURN_VALUE(
EUNSUP),
126 IOMANX_RETURN_VALUE(
EUNSUP),
127 IOMANX_RETURN_VALUE(
EUNSUP),
128 IOMANX_RETURN_VALUE(
EUNSUP),
129 IOMANX_RETURN_VALUE(
EUNSUP),
130 IOMANX_RETURN_VALUE(
EUNSUP),
131 IOMANX_RETURN_VALUE(
EUNSUP),
132 IOMANX_RETURN_VALUE(
EUNSUP),
133 IOMANX_RETURN_VALUE(
EUNSUP),
134 IOMANX_RETURN_VALUE(
EUNSUP),
135 IOMANX_RETURN_VALUE(
EUNSUP),
136 IOMANX_RETURN_VALUE(
EUNSUP),
137 IOMANX_RETURN_VALUE_S64(
EUNSUP),
139 IOMANX_RETURN_VALUE(
EUNSUP),
140 IOMANX_RETURN_VALUE(
EUNSUP),
143char TEVENT_BUF[6144];
148 .desc =
"Digital Video Recorder DVR task",
156IRX_ID(MODNAME, 1, 1);
158int _start(
int argc,
char *argv[],
void *startaddr,
ModuleInfo_t *mi)
161 return module_start(argc, argv, startaddr, mi);
163 return module_stop(argc, argv, startaddr, mi);
166int module_start(
int argc,
char *argv[],
void *startaddr,
ModuleInfo_t *mi)
174 for (i = 0; i < 30000; ++i) {
175 if (((*((vu32 *)0xB0004230)) & 0x10) != 0)
180 DPRINTF(
"DVR task of DVRP is not running...\n");
181 return MODULE_NO_RESIDENT_END;
183 if (iomanX_AddDrv(&DVR) != 0)
184 return MODULE_NO_RESIDENT_END;
187 return MODULE_REMOVABLE_END;
189 if (mi && ((mi->
newflags & 2) != 0))
191 return MODULE_RESIDENT_END;
195int module_stop(
int argc,
char *argv[],
void *startaddr,
ModuleInfo_t *mi)
202 if (iomanX_DelDrv(DVR.name) != 0)
203 return MODULE_REMOVABLE_END;
204 return MODULE_NO_RESIDENT_END;
218 v1 = CreateSema(&v3);
229 if (DeleteSema(sema_id) != 0)
262 while (DevctlCmdTbl[v13].cmd != cmd) {
264 if (v12 >=
sizeof(DevctlCmdTbl) /
sizeof(DevctlCmdTbl[0]))
267 v11 = DevctlCmdTbl[v13].fn(a1, name, cmd, arg, arglen, buf, buflen);
269 if (v12 ==
sizeof(DevctlCmdTbl) /
sizeof(DevctlCmdTbl[0]))
275int dvr_df_ioctl2(
iomanX_iop_file_t *f,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen)
289int dvrioctl2_rec_start(
303 drvdrv_exec_cmd_ack cmdack;
312 cmdack.command = 0x2101;
313 cmdack.input_word[0] = *((u16 *)arg + 1);
314 cmdack.input_word[1] = *(u16 *)arg;
315 cmdack.input_word[2] = *((u16 *)arg + 3);
316 cmdack.input_word[3] = *((u16 *)arg + 2);
317 cmdack.input_word[4] = *((u16 *)arg + 4);
318 cmdack.input_word[5] = *((u16 *)arg + 5);
319 cmdack.input_word[6] = *((u16 *)arg + 6);
321 while (busywait-- >= 0)
323 cmdack.input_word_count = 7;
324 cmdack.timeout = 5000000;
325 cmdackerr = DvrdrvExecCmdAckComp(&cmdack);
327 DPRINTF(
"dvrioctl2_rec_start -> Handshake error!,%d\n", cmdackerr);
331 err = cmdack.ack_status_ack;
333 if (!cmdack.ack_status_ack) {
334 if (!cmdack.comp_status)
337 err = cmdack.comp_status;
340 DPRINTF(
"dvrioctl2_rec_start -> Status error!,%04X\n", err);
344int dvrioctl2_rec_pause(
354 drvdrv_exec_cmd_ack *p_cmdack;
356 drvdrv_exec_cmd_ack cmdack;
367 cmdack.command = 0x2102;
370 p_cmdack->input_word[0] = *(u16 *)arg;
371 arg = (
char *)arg + 2;
372 p_cmdack = (drvdrv_exec_cmd_ack *)((
char *)p_cmdack + 2);
374 cmdack.input_word_count = 1;
375 cmdackerr = DvrdrvExecCmdAck(&cmdack);
377 DPRINTF(
"dvrioctl2_rec_pause -> Handshake error!,%d\n", cmdackerr);
380 if (cmdack.ack_status_ack) {
381 DPRINTF(
"dvrioctl2_rec_pause -> Status error!,%04X\n", cmdack.ack_status_ack);
388int dvrioctl2_rec_stop(
398 drvdrv_exec_cmd_ack cmdack;
408 cmdack.command = 0x2103;
409 cmdack.input_word_count = 0;
410 cmdack.timeout = 5000000;
411 cmdackerr = DvrdrvExecCmdAckComp(&cmdack);
413 DPRINTF(
"dvrioctl2_rec_stop -> Handshake error!,%d\n", cmdackerr);
416 if (cmdack.ack_status_ack) {
417 DPRINTF(
"dvrioctl2_rec_stop -> Status error!,%04X\n", cmdack.ack_status_ack);
419 if (!cmdack.comp_status)
421 DPRINTF(
"dvrioctl2_rec_start -> Status error!,%04X\n", cmdack.comp_status);
426int dvrioctl2_set_rec_end_time(
436 drvdrv_exec_cmd_ack cmdack;
445 cmdack.command = 0x2104;
446 cmdack.input_word[0] = (*(u32 *)arg) >> 16;
447 cmdack.input_word_count = 2;
448 cmdack.input_word[1] = *(u16 *)arg;
449 cmdackerr = DvrdrvExecCmdAck(&cmdack);
451 DPRINTF(
"dvrioctl2_rec_end_time -> Handshake error!,%d\n", cmdackerr);
454 if (cmdack.ack_status_ack) {
455 DPRINTF(
"dvrioctl2_rec_end_time -> Status error!,%04X\n", cmdack.ack_status_ack);
462int dvrioctl2_get_rec_info(
477 if (buflen >= 0x15) {
479 drvdrv_exec_cmd_ack cmdack;
480 cmdack.command = 0x2105;
481 cmdack.input_word_count = 0;
482 cmdackerr = DvrdrvExecCmdAck(&cmdack);
484 DPRINTF(
"dvrioctl2_get_rec_info -> Handshake error!,%d\n", cmdackerr);
489 if (cmdack.ack_status_ack) {
490 DPRINTF(
"dvrioctl2_get_rec_info -> Status error!,%04X\n", cmdack.ack_status_ack);
499 v11 = &cmdack.output_word[v9];
500 *((u8 *)buf + v10 + 3) = (*v11 & 0xFF00) >> 8;
501 *((u8 *)buf + v10 + 2) = (*v11 & 0x00FF);
504 *((u8 *)buf + 22) = 0;
509 DPRINTF(
"dvrioctl2_get_rec_info -> buflen is smaller than 21.\n");
514int dvrioctl2_get_rec_time(
524 drvdrv_exec_cmd_ack cmdack;
533 cmdack.command = 0x2106;
534 cmdack.input_word_count = 0;
535 cmdackerr = DvrdrvExecCmdAck(&cmdack);
537 DPRINTF(
"dvrioctl2_get_rec_time -> Handshake error!,%d\n", cmdackerr);
540 if (cmdack.ack_status_ack) {
541 DPRINTF(
"dvrioctl2_get_rec_time -> Status error!,%04X\n", cmdack.ack_status_ack);
545 *((u32 *)buf + 1) = (cmdack.output_word[0] << 16) + cmdack.output_word[1];
551int dvrioctl2_get_ifo_time_entry(
561 drvdrv_exec_cmd_ack cmdack;
570 cmdack.command = 0x2107;
571 cmdack.input_word_count = 0;
572 cmdackerr = DvrdrvExecCmdAck(&cmdack);
574 DPRINTF(
"dvrioctl2_get_ifo_time_entry -> Handshake error!,%d\n", cmdackerr);
576 }
else if (cmdack.ack_status_ack) {
577 DPRINTF(
"dvrioctl2_get_ifo_time_entry -> Status error!,%04X\n", cmdack.ack_status_ack);
581 *((u16 *)buf + 1) = cmdack.output_word[0];
582 *((u16 *)buf + 2) = cmdack.output_word[1];
583 *((u16 *)buf + 3) = cmdack.output_word[2];
584 *((u32 *)buf + 2) = (cmdack.output_word[3] << 16) + cmdack.output_word[4];
589int dvrioctl2_get_ifo_vobu_entry(
599 drvdrv_exec_cmd_ack cmdack;
608 cmdack.command = 0x2108;
609 cmdack.input_word_count = 0;
610 cmdackerr = DvrdrvExecCmdAck(&cmdack);
612 DPRINTF(
"dvrioctl2_get_ifo_vobu_entry -> Handshake error!,%d\n", cmdackerr);
614 }
else if (cmdack.ack_status_ack) {
615 DPRINTF(
"dvrioctl2_get_ifo_vobu_entry -> Status error!,%04X\n", cmdack.ack_status_ack);
619 *((u16 *)buf + 1) = cmdack.output_word[0];
620 *((u16 *)buf + 2) = cmdack.output_word[1];
621 *((u16 *)buf + 3) = cmdack.output_word[2];
626int dvrioctl2_read_resfile(
636 drvdrv_exec_cmd_ack cmdack;
646 cmdack.command = 0x2109;
647 cmdack.input_word_count = 0;
648 cmdackerr = DvrdrvExecCmdAck(&cmdack);
650 DPRINTF(
"dvrioctl2_read_resfile -> Handshake error!,%d\n", cmdackerr);
653 if (cmdack.ack_status_ack) {
654 DPRINTF(
"dvrioctl2_read_resfile -> Status error!,%04X\n", cmdack.ack_status_ack);
661int dvrioctl2_clear_resfile_flag(
671 drvdrv_exec_cmd_ack cmdack;
681 cmdack.command = 0x210A;
682 cmdack.input_word_count = 0;
683 cmdackerr = DvrdrvExecCmdAck(&cmdack);
685 DPRINTF(
"dvrioctl2_clear_resfile_flag -> Handshake error!,%d\n", cmdackerr);
688 if (cmdack.ack_status_ack) {
689 DPRINTF(
"dvrioctl2_clear_resfile_flag -> Status error!,%04X\n", cmdack.ack_status_ack);
696int dvrioctl2_rec_prohibit(
706 drvdrv_exec_cmd_ack cmdack;
715 cmdack.command = 0x210E;
716 cmdack.input_word_count = 1;
717 cmdack.input_word[0] = *(u16 *)arg;
718 cmdackerr = DvrdrvExecCmdAck(&cmdack);
720 DPRINTF(
"dvrioctl2_rec_prohibit -> Handshake error!,%d\n", cmdackerr);
723 if (cmdack.ack_status_ack) {
724 DPRINTF(
"dvrioctl2_rec_prohibit -> Status error!,%04X\n", cmdack.ack_status_ack);
731int dvrioctl2_epg_test(
741 drvdrv_exec_cmd_ack cmdack;
750 cmdack.command = 0x210F;
751 cmdack.input_word_count = 1;
752 cmdack.input_word[0] = *(u16 *)arg;
753 cmdackerr = DvrdrvExecCmdAck(&cmdack);
755 DPRINTF(
"dvrioctl2_epg_test -> Handshake error!,%d\n", cmdackerr);
758 if (cmdack.ack_status_ack) {
759 DPRINTF(
"dvrioctl2_epg_test -> Status error!,%04X\n", cmdack.ack_status_ack);
766int dvrioctl2_send_timer_event(
775 drvdrv_exec_cmd_ack cmdack;
783 cmdack.command = 0x2110;
784 cmdack.input_word_count = 0;
785 cmdack.input_buffer = arg;
786 cmdack.timeout = 10000000;
787 cmdack.input_buffer_length = arglen;
788 if (DvrdrvExecCmdAckDmaSendComp(&cmdack)) {
789 DPRINTF(
"dvrioctl2_send_timer_event -> IO error (phase %d)\n", cmdack.phase);
792 if (cmdack.comp_status) {
794 "dvrioctl2_send_timer_event -> Complete parameter (%04X) error (phase %d)\n",
803int dvrioctl2_epg_cancel(
813 drvdrv_exec_cmd_ack cmdack;
822 cmdack.command = 0x2111;
823 cmdack.input_word_count = 0;
824 cmdack.input_word[0] = *(u16 *)arg;
825 cmdackerr = DvrdrvExecCmdAck(&cmdack);
827 DPRINTF(
"dvrioctl2_epg_cancel -> Handshake error!,%d\n", cmdackerr);
830 if (cmdack.ack_status_ack) {
831 DPRINTF(
"dvrioctl2_epg_cancel -> Status error!,%04X\n", cmdack.ack_status_ack);
838int dvrioctl2_get_status_register(
854 *(u16 *)buf = (*((vu32 *)0xB0004230));
855 *((u16 *)buf + 1) = (*((vu32 *)0xB0004234));
856 *((u16 *)buf + 2) = (*((vu32 *)0xB0004238));
857 *((u16 *)buf + 3) = (*((vu32 *)0xB000423C));
861int dvrioctl2_tevent_buf_clr(
882 v8 = &TEVENT_BUF[6143];
888 tevent_p = TEVENT_BUF;
893int dvrioctl2_tevent_buf_send(
908 if ((
int)(tevent_data_sz + arglen) < 0x1801) {
910 for (i = 0; i < (int)arglen; arg = (
char *)arg + 1) {
912 *tevent_p = *(u8 *)arg;
915 tevent_data_sz += arglen;
920int dvrioctl2_tevent_buf_trans_dvrp(
929 drvdrv_exec_cmd_ack cmdack;
939 cmdack.command = 0x2110;
940 cmdack.input_word_count = 0;
941 cmdack.input_buffer = TEVENT_BUF;
942 cmdack.timeout = 10000000;
943 cmdack.input_buffer_length = tevent_data_sz;
944 if (DvrdrvExecCmdAckDmaSendComp(&cmdack)) {
945 DPRINTF(
"dvrioctl2_tevent_buf_trans_dvrp -> IO error (phase %d)\n", cmdack.phase);
948 if (cmdack.comp_status) {
950 "dvrioctl2_tevent_buf_trans_dvrp -> Complete parameter (%04X) error (phase %d)\n",
959int dvrioctl2_start_hdd_test(
972 drvdrv_exec_cmd_ack cmdack;
981 cmdack.command = 0x2112;
982 cmdack.input_word[0] = *(u16 *)arg;
983 cmdack.input_word[1] = *((u16 *)arg + 3);
984 cmdack.input_word[2] = *((u16 *)arg + 2);
985 cmdack.input_word[3] = *((u16 *)arg + 5);
986 cmdack.input_word[4] = *((u16 *)arg + 4);
987 cmdack.input_word[5] = *((u16 *)arg + 6);
988 cmdack.input_word[6] = *((u16 *)arg + 7);
989 cmdack.input_word[7] = *((u16 *)arg + 8);
990 cmdack.input_word_count = 8;
991 cmdack.timeout = 1000000 * (*((u16 *)arg + 8) + 30);
992 cmdackerr = DvrdrvExecCmdAckComp(&cmdack);
994 DPRINTF(
"dvrioctl2_start_hdd_test -> Handshake error!,%d\n", cmdackerr);
998 ack_status_ack = cmdack.ack_status_ack;
1000 if (!cmdack.ack_status_ack) {
1001 if (!cmdack.comp_status)
1004 ack_status_ack = cmdack.comp_status;
1007 DPRINTF(
"dvrioctl2_start_hdd_test -> Status error!,%04X\n", ack_status_ack);
1011int dvrioctl2_stop_hdd_test(
1016 unsigned int arglen,
1018 unsigned int buflen)
1024 drvdrv_exec_cmd_ack cmdack;
1034 cmdack.command = 0x2113;
1035 cmdack.input_word_count = 0;
1036 cmdack.timeout = 30000000;
1037 cmdackerr = DvrdrvExecCmdAckComp(&cmdack);
1039 DPRINTF(
"dvrioctl2_stop_hdd_test -> Handshake error!,%d\n", cmdackerr);
1043 ack_status_ack = cmdack.ack_status_ack;
1045 if (!cmdack.ack_status_ack) {
1046 if (!cmdack.comp_status)
1049 ack_status_ack = cmdack.comp_status;
1053 DPRINTF(
"dvrioctl2_stop_hdd_test -> Status error!,%04X\n", ack_status_ack);
1058int dvrioctl2_get_hdd_test_stat(
1063 unsigned int arglen,
1065 unsigned int buflen)
1068 drvdrv_exec_cmd_ack cmdack;
1077 cmdack.command = 0x2114;
1078 cmdack.input_word_count = 0;
1079 cmdackerr = DvrdrvExecCmdAck(&cmdack);
1081 DPRINTF(
"dvrioctl2_get_hdd_test_stat -> Handshake error!,%d\n", cmdackerr);
1083 }
else if (cmdack.ack_status_ack) {
1084 DPRINTF(
"dvrioctl2_get_hdd_test_stat -> Status error!,%04X\n", cmdack.ack_status_ack);
1087 *(u16 *)buf = cmdack.output_word[0];
1088 *((u32 *)buf + 1) = (cmdack.output_word[1] << 16) + cmdack.output_word[2];
1089 *((u32 *)buf + 2) = (cmdack.output_word[3] << 16) + cmdack.output_word[4];
1090 *((u16 *)buf + 6) = cmdack.output_word[5];
1091 *((u16 *)buf + 7) = cmdack.output_word[6];
1092 *((u16 *)buf + 8) = cmdack.output_word[7];
1097int dvrioctl2_pre_update_a(
1102 unsigned int arglen,
1104 unsigned int buflen)
1107 drvdrv_exec_cmd_ack cmdack;
1116 cmdack.command = 0x2115;
1117 cmdack.input_word_count = 0;
1118 cmdackerr = DvrdrvExecCmdAck(&cmdack);
1120 DPRINTF(
"dvrioctl2_pre_update_a -> Handshake error!,%d\n", cmdackerr);
1122 }
else if (cmdack.ack_status_ack) {
1123 DPRINTF(
"dvrioctl2_pre_update_a -> Status error!,%04X\n", cmdack.ack_status_ack);
1126 *(u16 *)buf = dvrpAuthEnc(cmdack.output_word[0]);
1131int dvrioctl2_pre_update_b(
1136 unsigned int arglen,
1138 unsigned int buflen)
1144 drvdrv_exec_cmd_ack cmdack;
1153 cmdack.command = 0x2116;
1154 cmdack.input_word_count = 1;
1155 cmdack.timeout = 10000000;
1156 cmdack.input_word[0] = *(u16 *)arg;
1157 cmdackerr = DvrdrvExecCmdAckComp(&cmdack);
1159 DPRINTF(
"dvrioctl2_pre_update_b -> Handshake error!,%d\n", cmdackerr);
1163 ack_status_ack = cmdack.ack_status_ack;
1165 if (!cmdack.ack_status_ack) {
1166 if (!cmdack.comp_status)
1169 ack_status_ack = cmdack.comp_status;
1173 DPRINTF(
"dvrioctl2_pre_update_b -> Status error!,%04X\n", ack_status_ack);
1178int dvrioctl2_get_rec_vro_pckn(
1183 unsigned int arglen,
1185 unsigned int buflen)
1188 drvdrv_exec_cmd_ack cmdack;
1197 cmdack.command = 0x2117;
1198 cmdack.input_word_count = 0;
1199 cmdackerr = DvrdrvExecCmdAck(&cmdack);
1201 DPRINTF(
"dvrioctl2_get_rec_vro_pckn -> Handshake error!,%d\n", cmdackerr);
1204 if (cmdack.ack_status_ack == 0xFFFE) {
1205 DPRINTF(
"dvrioctl2_get_rec_vro_pckn -> Mode error!,%04X\n", 0xFFFE);
1207 if (!cmdack.ack_status_ack) {
1208 *(u32 *)buf = (cmdack.output_word[0] << 16) + cmdack.output_word[1];
1211 DPRINTF(
"dvrioctl2_get_rec_vro_pckn -> Status error!,%04X\n", cmdack.ack_status_ack);
1216int dvrioctl2_enc_dec_test(
1221 unsigned int arglen,
1223 unsigned int buflen)
1226 drvdrv_exec_cmd_ack cmdack;
1235 cmdack.command = 0x2118;
1236 cmdack.input_word_count = 1;
1237 cmdack.timeout = 10000000;
1238 cmdack.input_word[0] = *(u16 *)arg;
1239 cmdackerr = DvrdrvExecCmdAckComp(&cmdack);
1241 DPRINTF(
"dvrioctl2_enc_dec_test -> ACK Handshake error!,%d\n", cmdackerr);
1244 if (cmdack.ack_status_ack) {
1245 DPRINTF(
"dvrioctl2_enc_dec_test -> ACK Status error!,%04X\n", cmdack.ack_status_ack);
1247 if (!cmdack.comp_status)
1249 DPRINTF(
"dvrioctl2_enc_dec_test -> COMP Status error!,%04X\n", cmdack.comp_status);
1254int dvrioctl2_make_menu(
1259 unsigned int arglen,
1261 unsigned int buflen)
1273 drvdrv_exec_cmd_ack cmdack;
1281 cmdack.command = 0x2119;
1282 cmdack.input_word[0] = *((u16 *)arg + 1);
1283 cmdack.input_word[1] = *(u16 *)arg;
1284 cmdack.input_word[2] = *((u16 *)arg + 3);
1285 cmdack.input_word[3] = *((u16 *)arg + 2);
1286 cmdack.input_word[4] = *((u16 *)arg + 4);
1287 cmdack.input_word[5] = 0;
1291 v11 = &cmdack.input_word[5];
1295 v12 = (
char *)arg + v8;
1297 v13 = (
char *)arg + v9;
1300 v11[1] = v13[10] + ((u8)v12[10] << 8);
1303 cmdack.input_word_count = 16;
1304 cmdack.timeout = 30000000;
1305 cmdackerr = DvrdrvExecCmdAckComp(&cmdack);
1306 *(u16 *)buf = cmdack.comp_status;
1308 DPRINTF(
"dvrioctl2_make_menu -> ACK Handshake error!,%d\n", cmdackerr);
1311 if (cmdack.ack_status_ack) {
1312 DPRINTF(
"dvrioctl2_make_menu -> ACK Status error!,%04X\n", cmdack.ack_status_ack);
1316 if (cmdack.comp_status) {
1317 DPRINTF(
"dvrioctl2_make_menu -> COMP Status error!,%04X\n", cmdack.comp_status);
1321 input_word = cmdack.return_result_word;
1326 v20 = (
char *)buf + v17;
1327 v21 = (
char *)buf + v19;
1331 v21[2] = (*input_word & 0x00FF);
1332 v20[2] = (*input_word & 0xFF00) >> 8;
1335 *((u8 *)buf + 22) = 0;
1337 while (busywait-- >= 0)
1342int dvrioctl2_re_enc_start(
1347 unsigned int arglen,
1349 unsigned int buflen)
1365 drvdrv_exec_cmd_ack cmdack;
1373 cmdack.command = 0x211A;
1374 cmdack.input_word[0] = *((u16 *)arg + 1);
1375 cmdack.input_word[1] = *(u16 *)arg;
1376 cmdack.input_word[2] = *((u16 *)arg + 3);
1377 cmdack.input_word[3] = *((u16 *)arg + 2);
1378 cmdack.input_word[4] = *((u16 *)arg + 4);
1379 cmdack.input_word[5] = *((u16 *)arg + 5);
1380 cmdack.input_word[6] = *((u16 *)arg + 6);
1384 v10 = &cmdack.input_word[6];
1388 v11 = (u8 *)arg + v8;
1389 v12 = (u8 *)arg + v9;
1390 v10[1] = v12[14] + ((u8)v11[14] << 8);
1396 cmdack.input_word[17] = 0;
1400 v16 = &cmdack.input_word[17];
1404 v17 = (u8 *)arg + v14;
1405 v18 = (u8 *)arg + v15;
1406 v16[1] = v18[35] + ((u8)v17[35] << 8);
1412 cmdack.input_word[26] = 0;
1413 cmdack.input_word[27] = 0;
1414 cmdack.input_word[28] = *((u16 *)arg + 28);
1415 cmdack.input_word[29] = *((u16 *)arg + 29);
1416 cmdack.input_word[30] = *((u16 *)arg + 30);
1417 cmdack.input_word[31] = *((u16 *)arg + 31);
1418 cmdack.input_word[32] = 0;
1420 while (busywait-- >= 0)
1422 cmdack.input_word_count = 33;
1423 cmdack.timeout = 30000000;
1424 cmdackerr = DvrdrvExecCmdAckComp(&cmdack);
1425 *(u16 *)buf = cmdack.comp_status;
1427 DPRINTF(
"dvrioctl2_re_enc_start -> ACK Handshake error!,%d\n", cmdackerr);
1430 if (cmdack.ack_status_ack) {
1431 DPRINTF(
"dvrioctl2_re_enc_start -> ACK Status error!,%04X\n", cmdack.ack_status_ack);
1435 if (cmdack.comp_status) {
1436 DPRINTF(
"dvrioctl2_re_enc_start -> COMP Status error!,%04X\n", cmdack.comp_status);
1440 v26 = &cmdack.input_word[1];
1445 v28 = (u8 *)buf + v25;
1446 v29 = (u8 *)buf + v27;
1447 v29[2] = *((u8 *)v26 + 274);
1448 v28[2] = v26[137] >> 8;
1454 *((u8 *)buf + 22) = 0;
1458int dvrpAuthEnc(u16 a1)
1460 return (u8)dvrpAuth_tbl[(u8)a1] | ((u8)dvrpAuth_tbl[a1 >> 8] << 8);
1465 drvdrv_exec_cmd_ack cmdack;
1467 DPRINTF(
"------------------- 2 ------------------ dvr_recv_dma(io=%p, buf=%p, buflen=%d)\n", a1, buf, buflen);
1468 if (((u32)buf & 3) != 0) {
1469 DPRINTF(
"dvr_recv_dma : Address is not a multiple of 4.\n");
1474 int ack_status_ack2;
1477 if ((buflen & 0x7F) != 0)
1478 DPRINTF(
"buflen is not a multiple of 128.\n");
1479 buflen_tmp = buflen;
1480 while (buflen_tmp > 0) {
1481 cmdack.command = 0x211B;
1482 cmdack.input_word[0] = 0;
1483 cmdack.input_word[1] = 0;
1484 cmdack.input_word[2] = 0;
1485 cmdack.input_word[3] = 6144;
1486 cmdack.input_word_count = 4;
1487 cmdack.output_buffer = buf_tmp;
1488 cmdack.timeout = 0x10000;
1489 if (DvrdrvExecCmdAckDmaRecvComp(&cmdack)) {
1491 DPRINTF(
"dvr_recv_dma : IO error (phase %d)\n", cmdack.phase);
1494 if (cmdack.comp_status) {
1496 DPRINTF(
"dvr_recv_dma : Complete parameter error (phase %d), %04X\n", cmdack.phase, cmdack.comp_status);
1499 ack_status_ack2 = cmdack.ack_status_ack2;
1500 DPRINTF(
"rsize : %d / %d \n", cmdack.ack_status_ack2, 6144);
1501 if (ack_status_ack2 <= 0)
1503 buflen_tmp -= ack_status_ack2;
1504 if (ack_status_ack2 < 0x1801)
1506 buf_tmp += ack_status_ack2;
1508 err = cmdack.ack_status_ack2;
1510 DPRINTF(
"dvr_recv_dma: ret = %d\n", err);
1515u8 TELTEXT_BUF[0x1800];
1516unsigned int TELTEXT_ACTLEN;
1517unsigned int TELTEXT_BUFOFFSET;
1519int dvrioctl2_tevent_buf_recv_first(
1524 unsigned int arglen,
1526 unsigned int buflen)
1532 TELTEXT_BUFOFFSET = 0;
1534 DPRINTF(
"dvr_tevent_buf_recv_first(io=%p, cmd=%d buf=%p, nbyte=%u)\n", a1, cmd, buf, buflen);
1535 TELTEXT_ACTLEN = dvr_recv_dma(a1, TELTEXT_BUF,
sizeof(TELTEXT_BUF));
1536 if ((TELTEXT_ACTLEN & 0x80000000) == 0) {
1537 if (buflen == 1024) {
1538 memcpy(buf, (u8 *)TELTEXT_BUF + TELTEXT_BUFOFFSET, 1024);
1539 TELTEXT_BUFOFFSET += 1024;
1540 if (TELTEXT_ACTLEN <= 0x400) {
1541 DPRINTF(
"tevent_buf_recv_first: actlen:%u request-buflen:%d return 0 < DMA EOT >\n", TELTEXT_ACTLEN, 1024);
1544 DPRINTF(
"tevent_buf_recv_first: return <DMA_REMAIND>\n");
1548 DPRINTF(
"tevent_buf_recv_first: bufflen error! return 0 < EOT > .\n");
1552 DPRINTF(
"tevent_buf_recv_first: dma error! return 0 < EOT >.\n");
1557int dvrioctl2_tevent_buf_recv_next(
1562 unsigned int arglen,
1564 unsigned int buflen)
1570 DPRINTF(
"dvr_tevent_buf_recv_next(io=%p, cmd=%d buf=%p, nbyte=%u)\n", a1, cmd, buf, buflen);
1571 if (buflen == 1024) {
1572 if (TELTEXT_BUFOFFSET + 1024 <
sizeof(TELTEXT_BUF)) {
1573 memcpy(buf, TELTEXT_BUF + TELTEXT_BUFOFFSET, 1024);
1574 TELTEXT_BUFOFFSET += 1024;
1575 if ((
int)TELTEXT_BUFOFFSET < (
int)TELTEXT_ACTLEN) {
1576 DPRINTF(
"tevent_buf_recv_next: return <DMA_REMAIND>\n");
1579 DPRINTF(
"tevent_buf_recv_next: return 0 < DMA EOT >!\n");
1581 DPRINTF(
"tevent_buf_recv_next: bufflen error!\n");
1584 DPRINTF(
"tevent_buf_recv_next: bufflen error!\n");
1589int dvrioctl2_finish_auto_process(
1594 unsigned int arglen,
1596 unsigned int buflen)
1599 drvdrv_exec_cmd_ack cmdack;
1607 cmdack.command = 0x211C;
1608 cmdack.input_word_count = 1;
1609 cmdack.timeout = 5000000;
1610 cmdack.input_word[0] = *(u16 *)arg;
1611 cmdackerr = DvrdrvExecCmdAck(&cmdack);
1613 DPRINTF(
"dvrioctl2_finish_auto_process -> Handshake error!,%d\n", cmdackerr);
1616 if (cmdack.ack_status_ack == 0xFFFE) {
1617 DPRINTF(
"dvrioctl2_finish_auto_process -> Mode error!,%04X\n", 0xFFFE);
1619 if (!cmdack.ack_status_ack) {
1620 *(u32 *)buf = (cmdack.output_word[0] << 16) + cmdack.output_word[1];
1623 DPRINTF(
"dvrioctl2_finish_auto_process -> Status error!,%04X\n", cmdack.ack_status_ack);
1628int dvrioctl2_rec_pictclip(
1633 unsigned int arglen,
1635 unsigned int buflen)
1639 drvdrv_exec_cmd_ack cmdack;
1648 cmdack.command = 0x211D;
1649 cmdack.input_word[0] = *((u16 *)arg + 1);
1650 cmdack.input_word[1] = *((u16 *)arg + 0);
1651 cmdack.input_word[2] = *((u16 *)arg + 3);
1652 cmdack.input_word[3] = *((u16 *)arg + 2);
1653 cmdack.input_word[4] = *((u16 *)arg + 4);
1654 cmdack.input_word[5] = *((u16 *)arg + 5);
1655 cmdack.input_word[6] = *((u16 *)arg + 6);
1657 while (busywait-- >= 0)
1659 cmdack.input_word_count = 7;
1660 cmdack.timeout = 30000000;
1661 cmdackerr = DvrdrvExecCmdAckComp(&cmdack);
1663 DPRINTF(
"dvrioctl2_re_enc_start -> ACK Handshake error!,%d\n", cmdackerr);
1666 if (cmdack.ack_status_ack) {
1667 DPRINTF(
"dvrioctl2_re_enc_start -> ACK Status error!,%04X\n", cmdack.ack_status_ack);
1669 if (!cmdack.comp_status)
1671 DPRINTF(
"dvrioctl2_re_enc_start -> COMP Status error!,%04X\n", cmdack.comp_status);