21#define MODNAME "DVRDV"
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);
33extern int dvrdv_df_devctl(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
34extern int dvrdv_df_ioctl2(
iomanX_iop_file_t *f,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
35extern int dvrioctl2_dv_dubb_start(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
36extern int dvrioctl2_dv_dubb_stop(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
37extern int dvrioctl2_dv_dubb_rec_start(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
38extern int dvrioctl2_dv_dubb_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_get_dvcam_info(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
40extern int dvrioctl2_get_dvcam_name(
iomanX_iop_file_t *a1,
const char *name,
int cmd,
void *arg,
unsigned int arglen,
void *buf,
unsigned int buflen);
45 int (*fn)(
iomanX_iop_file_t *,
const char *, int,
void *,
unsigned int,
void *,
unsigned int);
48 {0x5601, &dvrioctl2_dv_dubb_start},
49 {0x5602, &dvrioctl2_dv_dubb_stop},
50 {0x5603, &dvrioctl2_dv_dubb_rec_start},
51 {0x5604, &dvrioctl2_dv_dubb_rec_stop},
52 {0x5607, &dvrioctl2_get_dvcam_info},
53 {0x5608, &dvrioctl2_get_dvcam_name},
56IOMANX_RETURN_VALUE_IMPL(
EUNSUP);
62 IOMANX_RETURN_VALUE(
EUNSUP),
63 IOMANX_RETURN_VALUE(
EUNSUP),
64 IOMANX_RETURN_VALUE(
EUNSUP),
65 IOMANX_RETURN_VALUE(
EUNSUP),
66 IOMANX_RETURN_VALUE(
EUNSUP),
67 IOMANX_RETURN_VALUE(
EUNSUP),
69 IOMANX_RETURN_VALUE(
EUNSUP),
70 IOMANX_RETURN_VALUE(
EUNSUP),
71 IOMANX_RETURN_VALUE(
EUNSUP),
72 IOMANX_RETURN_VALUE(
EUNSUP),
73 IOMANX_RETURN_VALUE(
EUNSUP),
74 IOMANX_RETURN_VALUE(
EUNSUP),
75 IOMANX_RETURN_VALUE(
EUNSUP),
76 IOMANX_RETURN_VALUE(
EUNSUP),
77 IOMANX_RETURN_VALUE(
EUNSUP),
78 IOMANX_RETURN_VALUE(
EUNSUP),
79 IOMANX_RETURN_VALUE(
EUNSUP),
80 IOMANX_RETURN_VALUE(
EUNSUP),
81 IOMANX_RETURN_VALUE(
EUNSUP),
82 IOMANX_RETURN_VALUE_S64(
EUNSUP),
84 IOMANX_RETURN_VALUE(
EUNSUP),
85 IOMANX_RETURN_VALUE(
EUNSUP),
90 .desc =
"Digital Video Recorder DVR task",
99int _start(
int argc,
char *argv[],
void *startaddr,
ModuleInfo_t *mi)
102 return module_start(argc, argv, startaddr, mi);
104 return module_stop(argc, argv, startaddr, mi);
107int module_start(
int argc,
char *argv[],
void *startaddr,
ModuleInfo_t *mi)
115 for (i = 0; i < 30000; ++i) {
116 if (((*((vu32 *)0xB0004230)) & 4) != 0)
121 DPRINTF(
"DVR task of DVRP is not running...\n");
122 return MODULE_NO_RESIDENT_END;
124 if (iomanX_AddDrv(&DVR) != 0)
125 return MODULE_NO_RESIDENT_END;
128 return MODULE_REMOVABLE_END;
130 if (mi && ((mi->
newflags & 2) != 0))
132 return MODULE_RESIDENT_END;
136int module_stop(
int argc,
char *argv[],
void *startaddr,
ModuleInfo_t *mi)
143 if (iomanX_DelDrv(DVR.name) != 0)
144 return MODULE_REMOVABLE_END;
145 return MODULE_NO_RESIDENT_END;
159 v1 = CreateSema(&v3);
170 if (DeleteSema(sema_id) != 0)
203 while (DevctlCmdTbl[v12].cmd != cmd) {
205 if (v11 >=
sizeof(DevctlCmdTbl) /
sizeof(DevctlCmdTbl[0]))
208 v10 = DevctlCmdTbl[v12].fn(a1, name, cmd, arg, arglen, buf, buflen);
210 if (v11 ==
sizeof(DevctlCmdTbl) /
sizeof(DevctlCmdTbl[0]))
237int dvrioctl2_dv_dubb_start(
247 drvdrv_exec_cmd_ack cmdack;
257 DPRINTF(
"------------------------------ dv dubb start!!!\n");
258 cmdack.command = 0x4101;
259 cmdack.input_word_count = 0;
260 cmdack_err = DvrdrvExecCmdAck(&cmdack);
262 DPRINTF(
"dvrioctl2_dv_dubb_start -> Handshake error!,%d\n", cmdack_err);
265 if (cmdack.ack_status_ack) {
266 DPRINTF(
"dvrioctl2_dv_dubb_start -> Status error!,%04X\n", cmdack.ack_status_ack);
273int dvrioctl2_dv_dubb_stop(
283 drvdrv_exec_cmd_ack cmdack;
293 DPRINTF(
"------------------------------ dv dubb stop!!!\n");
294 cmdack.command = 0x4102;
295 cmdack.input_word_count = 0;
296 cmdack_err = DvrdrvExecCmdAck(&cmdack);
298 DPRINTF(
"dvrioctl2_dv_dubb_stop -> Handshake error!,%d\n", cmdack_err);
301 if (cmdack.ack_status_ack) {
302 DPRINTF(
"dvrioctl2_dv_dubb_stop -> Status error!,%04X\n", cmdack.ack_status_ack);
309int dvrioctl2_dv_dubb_rec_start(
322 drvdrv_exec_cmd_ack cmdack;
331 cmdack.command = 0x4103;
332 DPRINTF(
"------------------------------ dv dubb rec start!!!\n");
334 v9 = (u16 *)((u8 *)arg + 8);
335 v10 = &cmdack.input_word[4];
342 cmdack.input_word[0] = *((u16 *)arg + 1);
343 cmdack.input_word[1] = *(u16 *)arg;
344 cmdack.input_word[2] = *((u16 *)arg + 3);
345 cmdack.input_word[3] = *((u16 *)arg + 2);
346 cmdack.input_word_count = 7;
347 cmdack_err = DvrdrvExecCmdAck(&cmdack);
349 DPRINTF(
"dvrioctl2_dv_dubb_rec_start -> Handshake error!,%d\n", cmdack_err);
352 if (cmdack.ack_status_ack) {
353 DPRINTF(
"dvrioctl2_dv_dubb_rec_start -> Status error!,%04X\n", cmdack.ack_status_ack);
360int dvrioctl2_dv_dubb_rec_stop(
370 drvdrv_exec_cmd_ack cmdack;
380 DPRINTF(
"------------------------------ dv dubb rec stop!!!\n");
381 cmdack.command = 0x4104;
382 cmdack.input_word_count = 0;
383 cmdack.timeout = 5000000;
384 cmdack_err = DvrdrvExecCmdAckComp(&cmdack);
386 DPRINTF(
"phase %d\n", cmdack.phase);
387 DPRINTF(
"dvrioctl2_dv_dubb_rec_stop -> Handshake error!,%d\n", cmdack_err);
390 if (cmdack.ack_status_ack) {
391 DPRINTF(
"phase %d\n", cmdack.phase);
392 DPRINTF(
"dvrioctl2_dv_dubb_rec_stop -> Status error!,%04X\n", cmdack.ack_status_ack);
399int dvrioctl2_get_dvcam_info(
409 drvdrv_exec_cmd_ack cmdack;
418 cmdack.command = 0x4107;
419 cmdack.input_word_count = 0;
420 cmdack_err = DvrdrvExecCmdAck(&cmdack);
422 DPRINTF(
"phase %d\n", cmdack.phase);
423 DPRINTF(
"dvrioctl2_get_dvcam_info -> Handshake error!,%d\n", cmdack_err);
426 if (cmdack.ack_status_ack) {
427 DPRINTF(
"dvrioctl2_get_dvcam_info -> Status error!,%04X\n", cmdack.ack_status_ack);
432 v11 = &cmdack.output_word[0];
437 buf = (
char *)buf + 2;
439 }
while (cpy_cnt < 4);
445int dvrioctl2_get_dvcam_name(
454 drvdrv_exec_cmd_ack cmdack;
460 DPRINTF(
"dvrioctl2_get_dvcam_name(io=%p, cmd=%d buf=%p, nbyte=%u)\n", a1, cmd, buf, buflen);
461 cmdack.command = 0x4108;
462 cmdack.input_word[0] = 0;
463 cmdack.input_word[1] = 0;
464 cmdack.input_word[2] = (buflen & 0xFFFF0000) >> 16;
465 cmdack.input_word[3] = buflen;
466 cmdack.input_word_count = 4;
467 cmdack.output_buffer = buf;
468 cmdack.timeout = 5000000;
469 if (DvrdrvExecCmdAckDmaRecvComp(&cmdack)) {
470 DPRINTF(
"dvrioctl2_get_dvcam_name : IO error (phase %d)\n", cmdack.phase);
473 if (cmdack.comp_status) {
474 DPRINTF(
"dvrioctl2_get_dvcam_name : Complete parameter error (phase %d), %04X\n", cmdack.phase, cmdack.comp_status);