22#define MODNAME "DVRMISC"
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 dvrmisc_df_devctl(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
35extern int dvrmisc_df_ioctl2(
iomanX_iop_file_t *f,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
36extern int dvrioctl2_nop(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
37extern int dvrioctl2_version(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
38extern int dvrioctl2_led_hdd_rec(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
39extern int dvrioctl2_led_dvd_rec(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
40extern int dvrioctl2_get_sircs(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
41extern int dvrioctl2_get_time(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
42extern int dvrioctl2_set_timezone(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
43extern int dvrioctl2_save_preset_info(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
44extern int dvrioctl2_load_preset_info(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
45extern int dvrioctl2_test_dev_rst(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
46extern int dvrioctl2_test_sdram_chk(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
47extern int dvrioctl2_test_mpe_chk(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
48extern int dvrioctl2_test_mpd_chk(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
49extern int dvrioctl2_test_vdec_chk(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
50extern int dvrioctl2_partition_free(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
51extern int dvrioctl2_buzzer(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
52extern int dvrioctl2_clr_preset_info(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
53extern int dvrioctl2_get_vbi_err_rate(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
54extern int dvrioctl2_update_dvrp_firmware(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
55extern int dvrioctl2_flash_write_status(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
56extern int dvrioctl2_set_device_key(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
57extern int dvrioctl2_get_device_key(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
58extern int dvrioctl2_set_dv_nodeid(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
59extern int dvrioctl2_get_dv_nodeid(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
60extern int dvrioctl2_diag_test(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
68 {0x5668, &dvrioctl2_get_sircs},
69 {0x5666, &dvrioctl2_led_hdd_rec},
70 {0x5667, &dvrioctl2_led_dvd_rec},
71 {0x5669, &dvrioctl2_get_time},
72 {0x566A, &dvrioctl2_set_timezone},
73 {0x566B, &dvrioctl2_save_preset_info},
74 {0x566C, &dvrioctl2_load_preset_info},
75 {0x5664, &dvrioctl2_nop},
76 {0x5665, &dvrioctl2_version},
77 {0x566D, &dvrioctl2_test_dev_rst},
78 {0x566E, &dvrioctl2_test_sdram_chk},
79 {0x566F, &dvrioctl2_test_mpe_chk},
80 {0x5670, &dvrioctl2_test_mpd_chk},
81 {0x5671, &dvrioctl2_test_vdec_chk},
82 {0x5672, &dvrioctl2_partition_free},
83 {0x5673, &dvrioctl2_buzzer},
84 {0x5674, &dvrioctl2_clr_preset_info},
85 {0x5675, &dvrioctl2_get_vbi_err_rate},
86 {0x5676, &dvrioctl2_update_dvrp_firmware},
87 {0x5677, &dvrioctl2_flash_write_status},
88 {0x5678, &dvrioctl2_set_device_key},
89 {0x5679, &dvrioctl2_get_device_key},
90 {0x567A, &dvrioctl2_set_dv_nodeid},
91 {0x567B, &dvrioctl2_get_dv_nodeid},
92 {0x5682, &dvrioctl2_diag_test},
95IOMANX_RETURN_VALUE_IMPL(
EUNSUP);
101 IOMANX_RETURN_VALUE(
EUNSUP),
102 IOMANX_RETURN_VALUE(
EUNSUP),
103 IOMANX_RETURN_VALUE(
EUNSUP),
104 IOMANX_RETURN_VALUE(
EUNSUP),
105 IOMANX_RETURN_VALUE(
EUNSUP),
106 IOMANX_RETURN_VALUE(
EUNSUP),
108 IOMANX_RETURN_VALUE(
EUNSUP),
109 IOMANX_RETURN_VALUE(
EUNSUP),
110 IOMANX_RETURN_VALUE(
EUNSUP),
111 IOMANX_RETURN_VALUE(
EUNSUP),
112 IOMANX_RETURN_VALUE(
EUNSUP),
113 IOMANX_RETURN_VALUE(
EUNSUP),
114 IOMANX_RETURN_VALUE(
EUNSUP),
115 IOMANX_RETURN_VALUE(
EUNSUP),
116 IOMANX_RETURN_VALUE(
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_S64(
EUNSUP),
123 IOMANX_RETURN_VALUE(
EUNSUP),
124 IOMANX_RETURN_VALUE(
EUNSUP),
129 .desc =
"Digital Video Recorder MISC task",
138IRX_ID(MODNAME, 1, 1);
140int _start(
int argc,
char *argv[],
void *startaddr,
ModuleInfo_t *mi)
143 return module_start(argc, argv, startaddr, mi);
145 return module_stop(argc, argv, startaddr, mi);
148int module_start(
int argc,
char *argv[],
void *startaddr,
ModuleInfo_t *mi)
156 for (i = 0; i < 30000; ++i) {
157 if (((*((vu32 *)0xB0004230)) & 4) != 0)
162 DPRINTF(
"MISC task of DVRP is not running...\n");
163 return MODULE_NO_RESIDENT_END;
165 if (iomanX_AddDrv(&DVRMISC) != 0)
166 return MODULE_NO_RESIDENT_END;
169 return MODULE_REMOVABLE_END;
171 if (mi && ((mi->
newflags & 2) != 0))
173 return MODULE_RESIDENT_END;
177int module_stop(
int argc,
char *argv[],
void *startaddr,
ModuleInfo_t *mi)
184 if (iomanX_DelDrv(DVRMISC.name) != 0)
185 return MODULE_REMOVABLE_END;
186 return MODULE_NO_RESIDENT_END;
200 v1 = CreateSema(&v3);
211 if (DeleteSema(sema_id) != 0)
227int dvrmisc_df_devctl(
246 while (DevctlCmdTbl[v12].cmd != cmd) {
248 if (v11 >=
sizeof(DevctlCmdTbl) /
sizeof(DevctlCmdTbl[0]))
251 v10 = DevctlCmdTbl[v12].fn(a1, cmd, arg, arglen, buf, buflen);
253 if (v11 ==
sizeof(DevctlCmdTbl) /
sizeof(DevctlCmdTbl[0]))
259int dvrmisc_df_ioctl2(
280int dvrioctl2_nop(
iomanX_iop_file_t *a1,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen)
282 drvdrv_exec_cmd_ack cmdack;
291 cmdack.command = 0x5101;
292 cmdack.input_word_count = 0;
293 if (DvrdrvExecCmdAck(&cmdack)) {
294 DPRINTF(
"dvrioctl2_nop -> Handshake error!\n");
297 if (cmdack.ack_status_ack) {
298 DPRINTF(
"dvrioctl2_nop -> Status error!\n");
305int dvrioctl2_version(
313 drvdrv_exec_cmd_ack cmdack;
321 cmdack.command = 0x5102;
322 cmdack.input_word_count = 0;
323 if (DvrdrvExecCmdAck(&cmdack)) {
324 DPRINTF(
"dvrioctl2_version -> Handshake error!\n");
326 }
else if (cmdack.ack_status_ack) {
327 DPRINTF(
"dvrioctl2_version -> Status error!\n");
330 *(u16 *)buf = cmdack.output_word[0];
331 *((u16 *)buf + 1) = cmdack.output_word[1];
336int dvrioctl2_led_hdd_rec(
344 drvdrv_exec_cmd_ack cmdack;
352 cmdack.command = 0x5104;
353 cmdack.input_word_count = 1;
354 cmdack.input_word[0] = *(u16 *)arg;
355 if (DvrdrvExecCmdAck(&cmdack)) {
356 DPRINTF(
"dvrioctl2_led_hdd_rec -> Handshake error!\n");
359 if (cmdack.ack_status_ack) {
360 DPRINTF(
"dvrioctl2_led_hdd_rec -> Status error!\n");
367int dvrioctl2_led_dvd_rec(
375 drvdrv_exec_cmd_ack cmdack;
383 cmdack.command = 0x5106;
384 cmdack.input_word_count = 1;
385 cmdack.input_word[0] = *(u16 *)arg;
386 if (DvrdrvExecCmdAck(&cmdack)) {
387 DPRINTF(
"dvrioctl2_led_dvd_rec -> Handshake error!\n");
390 if (cmdack.ack_status_ack) {
391 DPRINTF(
"dvrioctl2_led_dvd_rec -> Status error!\n");
398int dvrioctl2_get_sircs(
406 drvdrv_exec_cmd_ack cmdack;
414 cmdack.command = 0x5107;
415 cmdack.input_word_count = 0;
416 if (DvrdrvExecCmdAck(&cmdack)) {
417 DPRINTF(
"dvrioctl2_get_sircs -> Handshake error!\n");
419 }
else if (cmdack.ack_status_ack) {
420 DPRINTF(
"dvrioctl2_get_sircs -> Status error!\n");
423 *(u16 *)buf = cmdack.output_word[0];
424 *((u16 *)buf + 1) = cmdack.output_word[1];
425 *((u16 *)buf + 2) = cmdack.output_word[2];
426 *((u16 *)buf + 3) = cmdack.output_word[3];
427 *((u16 *)buf + 4) = cmdack.output_word[4];
432int dvrioctl2_get_time(
440 drvdrv_exec_cmd_ack cmdack;
448 cmdack.command = 0x5108;
449 cmdack.input_word_count = 0;
450 if (DvrdrvExecCmdAck(&cmdack)) {
451 DPRINTF(
"dvrioctl2_get_time -> Handshake error!\n");
453 }
else if (cmdack.ack_status_ack) {
454 DPRINTF(
"dvrioctl2_get_time -> Status error!\n");
457 *(u8 *)buf = cmdack.output_word[0];
458 *((u8 *)buf + 1) = cmdack.output_word[1];
459 *((u8 *)buf + 2) = cmdack.output_word[2];
460 *((u8 *)buf + 3) = cmdack.output_word[3];
461 *((u8 *)buf + 5) = cmdack.output_word[5];
462 *((u8 *)buf + 6) = cmdack.output_word[6];
463 *((u8 *)buf + 7) = cmdack.output_word[7];
468int dvrioctl2_set_timezone(
476 drvdrv_exec_cmd_ack cmdack;
484 cmdack.command = 0x5109;
485 cmdack.input_word[0] = *(u16 *)arg;
486 cmdack.input_word_count = 2;
487 cmdack.input_word[1] = *((u16 *)arg + 1);
488 if (DvrdrvExecCmdAck(&cmdack)) {
489 DPRINTF(
"dvrioctl2_set_timezone -> Handshake error!\n");
492 if (cmdack.ack_status_ack) {
493 DPRINTF(
"dvrioctl2_set_timezone -> Status error!\n");
500int dvrioctl2_save_preset_info(
508 drvdrv_exec_cmd_ack cmdack;
517 cmdack.command = 0x510A;
518 cmdack.input_word_count = 0;
519 cmdack.timeout = 15000000;
520 if (DvrdrvExecCmdAckComp(&cmdack)) {
521 DPRINTF(
"dvrioctl2_save_preset_info -> Handshake error!\n");
523 }
else if (cmdack.ack_status_ack || cmdack.comp_status) {
524 DPRINTF(
"dvrioctl2_save_preset_info -> Status error!\n");
530int dvrioctl2_load_preset_info(
538 drvdrv_exec_cmd_ack cmdack;
547 cmdack.command = 0x510B;
548 cmdack.input_word_count = 0;
549 cmdack.timeout = 15000000;
550 if (DvrdrvExecCmdAckComp(&cmdack)) {
551 DPRINTF(
"dvrioctl2_load_preset_info -> Handshake error!\n");
553 }
else if (cmdack.ack_status_ack || cmdack.comp_status) {
554 DPRINTF(
"dvrioctl2_load_preset_info -> Status error!\n");
560int dvrioctl2_test_dev_rst(
568 drvdrv_exec_cmd_ack cmdack;
577 cmdack.command = 0x510C;
578 cmdack.input_word_count = 0;
579 cmdack.timeout = 15000000;
580 if (DvrdrvExecCmdAckComp(&cmdack)) {
581 DPRINTF(
"dvrioctl2_test_dev_rst -> Handshake error!\n");
583 }
else if (cmdack.ack_status_ack || cmdack.comp_status) {
584 DPRINTF(
"dvrioctl2_test_dev_rst -> Status error!\n");
590int dvrioctl2_test_sdram_chk(
598 drvdrv_exec_cmd_ack cmdack;
606 cmdack.command = 0x510D;
607 cmdack.input_word_count = 0;
608 cmdack.timeout = 20000000;
609 if (DvrdrvExecCmdAckComp(&cmdack)) {
610 DPRINTF(
"dvrioctl2_test_sdram_chk -> Handshake error!\n");
612 }
else if (cmdack.ack_status_ack || cmdack.comp_status) {
613 DPRINTF(
"dvrioctl2_test_sdram_chk -> Status error!\n");
616 *(u32 *)buf = (cmdack.return_result_word[0] << 16) + cmdack.return_result_word[1];
617 *((u32 *)buf + 1) = (cmdack.return_result_word[2] << 16) + cmdack.return_result_word[3];
618 *((u32 *)buf + 2) = (cmdack.return_result_word[4] << 16) + cmdack.return_result_word[5];
623int dvrioctl2_test_mpe_chk(
631 drvdrv_exec_cmd_ack cmdack;
639 cmdack.command = 0x510E;
640 cmdack.input_word_count = 0;
641 cmdack.timeout = 15000000;
642 if (DvrdrvExecCmdAckComp(&cmdack)) {
643 DPRINTF(
"dvrioctl2_test_mpe_chk -> Handshake error!\n");
645 }
else if (cmdack.ack_status_ack || cmdack.comp_status) {
646 DPRINTF(
"dvrioctl2_test_mpe_chk -> Status error!\n");
649 *(u16 *)buf = cmdack.return_result_word[0];
654int dvrioctl2_test_mpd_chk(
662 drvdrv_exec_cmd_ack cmdack;
670 cmdack.command = 0x510F;
671 cmdack.input_word_count = 0;
672 cmdack.timeout = 15000000;
673 if (DvrdrvExecCmdAckComp(&cmdack)) {
674 DPRINTF(
"dvrioctl2_test_mpd_chk -> Handshake error!\n");
676 }
else if (cmdack.ack_status_ack || cmdack.comp_status) {
677 DPRINTF(
"dvrioctl2_test_mpd_chk -> Status error!\n");
680 *(u16 *)buf = cmdack.return_result_word[0];
685int dvrioctl2_test_vdec_chk(
693 drvdrv_exec_cmd_ack cmdack;
702 cmdack.command = 0x5110;
703 cmdack.input_word_count = 0;
704 cmdack.timeout = 15000000;
705 if (DvrdrvExecCmdAckComp(&cmdack)) {
706 DPRINTF(
"dvrioctl2_test_vdec_chk -> Handshake error!\n");
708 }
else if (cmdack.ack_status_ack || cmdack.comp_status) {
709 DPRINTF(
"dvrioctl2_test_vdec_chk -> Status error!\n");
715int dvrioctl2_partition_free(
733 v7 = iomanX_devctl((
const char *)arg, 0x5002, 0, 0, 0, 0);
736 DPRINTF(
"dvrioctl2_partition_free : Cannot execute PDIOC_ZONEFREE.,%d\n", v7);
739 v9 = iomanX_devctl((
const char *)arg, 0x5001, 0, 0, 0, 0);
742 DPRINTF(
"dvrioctl2_partition_free : Cannot execute PDIOC_ZONESZ.,%d\n", v9);
746 if (*(s64 *)buf <= 0x7FFFFFF) {
748 *((u32 *)buf + 1) = 0;
750 *(u32 *)buf = v10 - 0x8000000;
751 *((u32 *)buf + 1) = (v10 >> 32) - 1 + ((
unsigned int)(v10 - 0x8000000) < 0xF8000000);
764 drvdrv_exec_cmd_ack cmdack;
773 cmdack.command = 0x5111;
774 cmdack.input_word_count = 0;
775 if (DvrdrvExecCmdAck(&cmdack)) {
776 DPRINTF(
"dvrioctl2_buzzer -> Handshake error!\n");
779 if (cmdack.ack_status_ack) {
780 DPRINTF(
"dvrioctl2_buzzer -> Status error!\n");
787int dvrioctl2_clr_preset_info(
795 drvdrv_exec_cmd_ack cmdack;
804 cmdack.command = 0x5112;
805 cmdack.input_word_count = 0;
806 cmdack.timeout = 20000000;
807 if (DvrdrvExecCmdAckComp(&cmdack)) {
808 DPRINTF(
"dvrioctl2_clr_preset_info -> Handshake error!\n");
811 if (cmdack.ack_status_ack) {
812 DPRINTF(
"dvrioctl2_clr_preset_info -> Status error!\n");
819int dvrioctl2_get_vbi_err_rate(
827 drvdrv_exec_cmd_ack cmdack;
835 cmdack.command = 0x5113;
836 cmdack.input_word_count = 0;
837 if (DvrdrvExecCmdAck(&cmdack)) {
838 DPRINTF(
"dvrioctl2_get_vbi_err_rate -> Handshake error!\n");
841 if (cmdack.ack_status_ack) {
842 DPRINTF(
"dvrioctl2_get_vbi_err_rate -> Status error!\n");
845 *(u32 *)buf = (cmdack.output_word[0] << 16) + cmdack.output_word[1];
846 *((u32 *)buf + 1) = (cmdack.output_word[2] << 16) + cmdack.output_word[3];
852int dvrioctl2_update_dvrp_firmware(
866 drvdrv_exec_cmd_ack cmdack;
876 update_fd = iomanX_open((
const char *)arg, 1, 0x49, arglen);
881 update_size = iomanX_lseek(update_fd, 0, 2);
882 if (iomanX_lseek(update_fd, 0, 0) < 0)
884 cmdack.command = 0x5114;
885 cmdack.input_word[0] = update_size >> 16;
886 cmdack.input_word[1] = update_size;
887 cmdack.input_word_count = 2;
888 cmdack.timeout = 10000000;
889 if (DvrdrvExecCmdAckComp(&cmdack)) {
890 DPRINTF(
"FLASH_DATA_TOTALSIZE -> Handshake error!\n");
895 if (cmdack.ack_status_ack) {
896 DPRINTF(
"FLASH_DATA_TOTALSIZE -> Status error!\n");
899 if (cmdack.comp_status) {
900 DPRINTF(
"FLASH_DATA_TOTALSIZE -> Status error!\n");
903 if (update_size != (cmdack.return_result_word[0] << 16) + cmdack.return_result_word[1])
904 DPRINTF(
"Size of firmware is not equal to Size of buffer on DVRP memory.\n");
905 for (i = 0x3FFF;; i = 0x3FFF) {
915 read_size = iomanX_read(update_fd, SBUF, 0x4000);
918 cmdack.command = 0x5115;
919 cmdack.input_word[0] = read_offset >> 16;
920 cmdack.input_word[1] = read_offset;
921 cmdack.input_word_count = 2;
922 cmdack.input_buffer = SBUF;
923 cmdack.input_buffer_length = read_size;
924 cmdack.timeout = 10000000;
925 if (DvrdrvExecCmdAckDmaSendComp(&cmdack)) {
926 DPRINTF(
"MISCCMD_FLASH_DATA_DOWNLOAD -> Handshake error!\n");
929 if (cmdack.ack_status_ack || (read_offset += read_size, cmdack.comp_status)) {
930 DPRINTF(
"MISCCMD_FLASH_DATA_DOWNLOAD -> Status error!\n");
933 for (j = 0; j < read_size; ++j) {
934 checksum += (u8)SBUF[j];
937 cmdack.command = 0x5116;
938 cmdack.input_word[0] = update_size >> 16;
939 cmdack.input_word[2] = checksum >> 16;
940 cmdack.input_word[1] = update_size;
941 cmdack.input_word[3] = checksum;
942 cmdack.input_word[4] = 0;
943 cmdack.input_word[5] = 0;
944 cmdack.input_word_count = 6;
945 cmdack.timeout = 10000000;
946 if (DvrdrvExecCmdAckComp(&cmdack)) {
947 DPRINTF(
"MISCCMD_FLASH_DATA_CHECKSUM -> Handshake error!\n");
950 if (cmdack.ack_status_ack) {
951 DPRINTF(
"MISCCMD_FLASH_DATA_CHECKSUM -> ACK Status error!\n");
953 if (cmdack.comp_status) {
955 DPRINTF(
"MISCCMD_FLASH_DATA_CHECKSUM -> COMP Status error!\n");
957 "Check sum error! IOP:%08X,DVRP:%08X\n",
959 (cmdack.return_result_word[0] << 16) | cmdack.return_result_word[1]);
962 cmdack.command = 0x5117;
963 cmdack.input_word_count = 0;
964 cmdack.timeout = 10000000;
965 if (DvrdrvExecCmdAckComp(&cmdack)) {
966 DPRINTF(
"MISCCMD_FLASH_DATA_WRITE -> Handshake error!\n");
969 if (cmdack.ack_status_ack) {
970 DPRINTF(
"MISCCMD_FLASH_DATA_WRITE -> ACK Status error!\n");
973 if (!cmdack.comp_status)
975 DPRINTF(
"MISCCMD_FLASH_DATA_WRITE -> COMP Status error!\n");
980 iomanX_close(update_fd);
984int dvrioctl2_flash_write_status(
992 drvdrv_exec_cmd_ack cmdack;
1000 cmdack.command = 0x5118;
1001 cmdack.input_word_count = 0;
1002 if (DvrdrvExecCmdAck(&cmdack)) {
1003 DPRINTF(
"dvrioctl2_flash_write_status -> Handshake error!\n");
1005 }
else if (cmdack.ack_status_ack) {
1006 DPRINTF(
"dvrioctl2_flash_write_status -> Status error!\n");
1009 *(u16 *)buf = cmdack.output_word[0];
1010 *((u16 *)buf + 1) = cmdack.output_word[1];
1015int dvrioctl2_set_device_key(
1019 unsigned int arglen,
1021 unsigned int buflen)
1027 int *byteswap_tmp_end;
1030 drvdrv_exec_cmd_ack cmdack;
1033 "dvrioctl2_set_device_key (io=%p,cmd=%08X,argp=%p,arglen=%u,bufp=%p,buflen=%u)\n",
1040 cmdack.command = 0x511B;
1041 cmdack.input_word[0] = 0;
1042 cmdack.input_word[1] = 456;
1043 cmdack.input_word_count = 2;
1044 cmdack.timeout = 10000000;
1045 DPRINTF(
"dvrcmd.cmd_p[0]:%x\n", 0);
1046 DPRINTF(
"dvrcmd.cmd_p[1]:%x\n", 456);
1047 cmdack_err = DvrdrvExecCmdAckComp(&cmdack);
1048 DPRINTF(
"dvrcmd.ack_p[0]:%x\n", cmdack.ack_status_ack);
1050 DPRINTF(
"DEVKEY_TOTALSIZE -> Handshake error!\n");
1053 if (cmdack.ack_status_ack || cmdack.comp_status) {
1054 DPRINTF(
"DEVKEY_TOTALSIZE -> Status error!\n");
1057 bsize = (cmdack.return_result_word[0] << 16) + cmdack.return_result_word[1];
1059 DPRINTF(
"Size of firmware is not equal to Size of buffer on DVRP memory.\n");
1060 DPRINTF(
"FSIZE:%08X\n", 456);
1061 DPRINTF(
"BSIZE:%08X\n", bsize);
1062 cmdack.command = 0x511C;
1063 ((u32 *)SBUF)[0] = *(u32 *)
"XESD";
1064 byteswap_tmp2 = (
int *)&SBUF[4];
1065 byteswap_tmp = (
int *)arg;
1066 byteswap_tmp_end = (
int *)((
char *)arg + 448);
1068 byteswap_tmp2[0] = byteswap_tmp[0];
1069 byteswap_tmp2[1] = byteswap_tmp[1];
1070 byteswap_tmp2[2] = byteswap_tmp[2];
1071 byteswap_tmp2[3] = byteswap_tmp[3];
1074 }
while (byteswap_tmp != byteswap_tmp_end);
1075 *byteswap_tmp2 = *byteswap_tmp;
1076 cmdack.input_word_count = 2;
1077 cmdack.input_word[0] = 0;
1078 cmdack.input_word[1] = 0;
1079 cmdack.input_buffer = &SBUF;
1080 cmdack.input_buffer_length = 456;
1081 cmdack.timeout = 10000000;
1082 cmdack_err3 = DvrdrvExecCmdAckDmaSendComp(&cmdack);
1083 DPRINTF(
"dvrcmd.ack_p[0]:%x\n", cmdack.ack_status_ack);
1085 DPRINTF(
"MISCCMD_DEVKEY_DOWNLOAD -> Handshake error!\n");
1088 if (cmdack.ack_status_ack) {
1089 DPRINTF(
"MISCCMD_DEVKEY_DOWNLOAD -> Status error!\n");
1092 if (cmdack.comp_status) {
1093 DPRINTF(
"MISCCMD_DEVKEY_DOWNLOAD -> Status error!\n");
1096 cmdack.command = 0x5119;
1097 cmdack.input_word_count = 0;
1098 cmdack.timeout = 10000000;
1099 cmdack_err2 = DvrdrvExecCmdAckComp(&cmdack);
1100 DPRINTF(
"dvrcmd.ack_p[0]:%x\n", cmdack.ack_status_ack);
1102 DPRINTF(
"MISCCMD_SAVE_DEVKEY_INFO -> Handshake error!\n");
1105 if (cmdack.ack_status_ack) {
1106 DPRINTF(
"MISCCMD_SAVE_DEVKEY_INFO -> Status error!\n");
1109 if (cmdack.comp_status) {
1110 DPRINTF(
"MISCCMD_SAVE_DEVKEY_INFO -> Status error!\n");
1116int dvrioctl2_get_device_key(
1120 unsigned int arglen,
1122 unsigned int buflen)
1125 u16 *return_result_word;
1127 drvdrv_exec_cmd_ack cmdack;
1136 cmdack.command = 0x511A;
1137 cmdack.input_word[0] = 0;
1138 cmdack.input_word[1] = 4;
1139 cmdack.input_word_count = 2;
1140 cmdack.timeout = 15000000;
1141 if (DvrdrvExecCmdAckComp(&cmdack)) {
1142 DPRINTF(
"MISCCMD_GET_DEVKEY_INFO -> Handshake error!\n");
1145 if (cmdack.ack_status_ack) {
1146 DPRINTF(
"MISCCMD_GET_DEVKEY_INFO -> Status error!\n");
1149 if (cmdack.comp_status) {
1150 DPRINTF(
"MISCCMD_GET_DEVKEY_INFO -> Status error!\n");
1154 return_result_word = cmdack.return_result_word;
1159 v8[0] = (*return_result_word & 0xFF00) >> 8;
1160 v8[1] = (*return_result_word & 0x00FF);
1161 return_result_word += 1;
1165 }
while (busywait-- >= 0);
1166 if (memcmp(v27,
"XESD", 4) == 0) {
1174 in_word_tmp = &cmdack.return_result_word[2];
1177 v15 = (u8 *)buf + v13;
1179 v15[0] = (*in_word_tmp & 0xFF00) >> 8;
1180 v15[1] = (*in_word_tmp & 0x00FF);
1193 cmdack.command = 0x511A;
1194 cmdack.input_word[0] = v17;
1195 cmdack.input_word[1] = v21;
1196 cmdack.input_word_count = 2;
1197 cmdack.timeout = 30000000;
1198 if (DvrdrvExecCmdAckComp(&cmdack)) {
1199 DPRINTF(
"MISCCMD_GET_DEVKEY_INFO -> Handshake error!\n");
1202 if (cmdack.ack_status_ack) {
1203 DPRINTF(
"MISCCMD_GET_DEVKEY_INFO -> Status error!\n");
1207 if (cmdack.comp_status) {
1208 DPRINTF(
"MISCCMD_GET_DEVKEY_INFO -> Status error!\n");
1211 if ((u16)v21 + 1 > 1) {
1213 in_word_tmp2 = cmdack.return_result_word;
1216 v24 = (u8 *)buf + v19;
1219 v24[4] = (*in_word_tmp2 & 0xFF00) >> 8;
1220 v24[5] = (*in_word_tmp2 & 0x00FF);
1222 }
while (v22 < (u16)v21 + 1);
1234int dvrioctl2_set_dv_nodeid(
1238 unsigned int arglen,
1240 unsigned int buflen)
1242 unsigned int argwalked;
1243 drvdrv_exec_cmd_ack cmdack;
1251 cmdack.command = 0x511D;
1254 inword_tmp = ((u8 *)&cmdack.input_word[0]);
1257 inword_tmp2 = ((u8 *)arg + argwalked);
1258 inword_tmp[0] = inword_tmp2[1];
1259 inword_tmp[1] = inword_tmp2[0];
1262 }
while (argwalked < arglen);
1264 cmdack.input_word_count = 4;
1265 cmdack.timeout = 10000000;
1266 if (DvrdrvExecCmdAckComp(&cmdack)) {
1267 DPRINTF(
"MISCCMD_SAVE_DV_NODEID -> Handshake error!\n");
1270 if (cmdack.ack_status_ack) {
1271 DPRINTF(
"MISCCMD_SAVE_DV_NODEID -> Status error!\n");
1274 if (cmdack.comp_status) {
1275 DPRINTF(
"MISCCMD_SAVE_DV_NODEID -> Status error!\n");
1281int dvrioctl2_get_dv_nodeid(
1285 unsigned int arglen,
1287 unsigned int buflen)
1289 unsigned int bufwalked;
1290 drvdrv_exec_cmd_ack cmdack;
1297 cmdack.command = 0x511E;
1298 cmdack.input_word_count = 0;
1299 cmdack.timeout = 15000000;
1300 if (DvrdrvExecCmdAckComp(&cmdack)) {
1301 DPRINTF(
"MISCCMD_GET_DV_NODEID -> Handshake error!\n");
1304 if (cmdack.ack_status_ack) {
1305 DPRINTF(
"MISCCMD_GET_DV_NODEID -> Status error!\n");
1308 if (cmdack.comp_status) {
1309 DPRINTF(
"MISCCMD_GET_DV_NODEID -> Status error!\n");
1314 u16 *return_result_word;
1317 return_result_word = cmdack.return_result_word;
1320 buftmp = (
char *)buf + bufwalked;
1322 buftmp[0] = (*return_result_word & 0xFF00) >> 8;
1323 buftmp[1] = (*return_result_word & 0x00FF);
1324 return_result_word += 1;
1325 }
while (bufwalked < buflen);
1328 while ((
unsigned int)(bufbusyloop++) < buflen)
1336int dvrioctl2_diag_test(
1340 unsigned int arglen,
1342 unsigned int buflen)
1350 drvdrv_exec_cmd_ack cmdack;
1357 cmdack.command = 0x511F;
1358 cmdack.input_word[0] = *(u16 *)arg;
1359 cmdack.input_word[1] = *((u16 *)arg + 1);
1360 cmdack.input_word[2] = *((u16 *)arg + 2);
1361 cmdack.input_word[3] = *((u16 *)arg + 3);
1362 cmdack.input_word[4] = *((u16 *)arg + 4);
1363 cmdack.input_word_count = 5;
1364 cmdack.timeout = 120000000;
1365 if (cmdack.input_word[2]) {
1366 DPRINTF(
"------------------- > SetTO:%d msec\n", 120000);
1367 cmdack.timeout = 10000000 * cmdack.input_word[2];
1369 DPRINTF(
"arg : %4x", cmdack.input_word[0]);
1370 DPRINTF(
" %4x", cmdack.input_word[1]);
1371 DPRINTF(
" %4x ", cmdack.input_word[2]);
1372 DPRINTF(
" SetTimeOutTo : %d usec\n", cmdack.timeout);
1373 cmdack_err = DvrdrvExecCmdAckComp(&cmdack);
1375 testcnt_tmp = test_count++;
1378 "cmd ID : %d -------------------- TEST VERSION - diag test -------------------- r %d -- c %d\n",
1382 DPRINTF(
"diag_test dvrcmd.ack_p[0]:%x\n", cmdack.ack_status_ack);
1383 DPRINTF(
"diag_test dvrcmd.phase:%x\n", cmdack.phase);
1385 DPRINTF(
"dvrioctl2_diag_test -> Handshake error!\n");
1388 if (cmdack.ack_status_ack) {
1389 DPRINTF(
"dvrioctl2_diag_test -> Status error in ACK! param:%04x\n", cmdack.ack_status_ack);
1392 if (cmdack.comp_status) {
1393 DPRINTF(
"dvrioctl2_diag_test -> Status error in COMP! param:%04x\n", cmdack.comp_status);
1397 DPRINTF(
"---------------------------- return buffer\n");
1398 outbuf_tmp = (u16 *)&cmdack.return_result_word[0];
1401 DPRINTF(
" %4x", *outbuf_tmp);
1402 *(u16 *)buf = *outbuf_tmp;
1404 buf = (
char *)buf + 2;
1405 }
while (outbuf_cnt < 16);