--- strace-4.5.20/dvb.c.dvb~ 2010-05-04 11:03:29.735795276 +0200 +++ strace-4.5.20/dvb.c 2010-05-04 11:03:29.735795276 +0200 @@ -0,0 +1,231 @@ +/* + * Copyright (c) 2006 Bernhard Rosenkraenzer <bero@arklinux.org> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $Id: sock.c,v 1.11 2005/06/01 19:02:37 roland Exp $ + */ + +#include "defs.h" + +#ifdef LINUX +#include <linux/dvb/dmx.h> +#include <linux/dvb/frontend.h> +#include <sys/ioctl.h> + +static const struct xlat dmxout[] = { + { DMX_OUT_DECODER, "DMX_OUT_DECODER" }, + { DMX_OUT_TAP, "DMX_OUT_TAP" }, + { DMX_OUT_TS_TAP, "DMX_OUT_TS_TAP" }, + { 0, NULL } +}; + +static const struct xlat dmxin[] = { + { DMX_IN_FRONTEND, "DMX_IN_FRONTEND" }, + { DMX_IN_DVR, "DMX_IN_DVR" }, + { 0, NULL } +}; + +static const struct xlat dmxpestype[] = { + { DMX_PES_AUDIO0, "DMX_PES_AUDIO0" }, + { DMX_PES_VIDEO0, "DMX_PES_VIDEO0" }, + { DMX_PES_TELETEXT0, "DMX_PES_TELETEXT0" }, + { DMX_PES_SUBTITLE0, "DMX_PES_SUBTITLE0" }, + { DMX_PES_PCR0, "DMX_PES_PCR0" }, + + { DMX_PES_AUDIO1, "DMX_PES_AUDIO1" }, + { DMX_PES_VIDEO1, "DMX_PES_VIDEO1" }, + { DMX_PES_TELETEXT1, "DMX_PES_TELETEXT1" }, + { DMX_PES_SUBTITLE1, "DMX_PES_SUBTITLE1" }, + { DMX_PES_PCR1, "DMX_PES_PCR1" }, + + { DMX_PES_AUDIO2, "DMX_PES_AUDIO2" }, + { DMX_PES_VIDEO2, "DMX_PES_VIDEO2" }, + { DMX_PES_TELETEXT2, "DMX_PES_TELETEXT2" }, + { DMX_PES_SUBTITLE2, "DMX_PES_SUBTITLE2" }, + { DMX_PES_PCR2, "DMX_PES_PCR2" }, + + { DMX_PES_AUDIO3, "DMX_PES_AUDIO3" }, + { DMX_PES_VIDEO3, "DMX_PES_VIDEO3" }, + { DMX_PES_TELETEXT3, "DMX_PES_TELETEXT3" }, + { DMX_PES_SUBTITLE3, "DMX_PES_SUBTITLE3" }, + { DMX_PES_PCR3, "DMX_PES_PCR3" }, + + { DMX_PES_OTHER, "DMX_PES_OTHER" }, + { 0, NULL } +}; + +static const struct xlat dmxfilterflags[] = { + { DMX_CHECK_CRC, "DMX_CHECK_CRC" }, + { DMX_ONESHOT, "DMX_ONESHOT" }, + { DMX_IMMEDIATE_START, "DMX_IMMEDIATE_START" }, + { DMX_KERNEL_CLIENT, "DMX_KERNEL_CLIENT" }, + { 0, NULL } +}; + +static const struct xlat dmxsource[] = { + { DMX_SOURCE_FRONT0, "DMX_SOURCE_FRONT0" }, + { DMX_SOURCE_FRONT1, "DMX_SOURCE_FRONT1" }, + { DMX_SOURCE_FRONT2, "DMX_SOURCE_FRONT2" }, + { DMX_SOURCE_FRONT3, "DMX_SOURCE_FRONT3" }, + + { DMX_SOURCE_DVR0, "DMX_SOURCE_DVR0" }, + { DMX_SOURCE_DVR1, "DMX_SOURCE_DVR1" }, + { DMX_SOURCE_DVR2, "DMX_SOURCE_DVR2" }, + { DMX_SOURCE_DVR3, "DMX_SOURCE_DVR3" }, + { 0, NULL } +}; + +static const struct xlat fetypes[] = { + { FE_QPSK, "FE_QPSK" }, + { FE_QAM, "FE_QAM" }, + { FE_OFDM, "FE_OFDM" }, + { FE_ATSC, "FE_ATSC" }, + { 0, NULL } +}; + +static const struct xlat festatus[] = { + { FE_HAS_SIGNAL, "FE_HAS_SIGNAL" }, + { FE_HAS_CARRIER, "FE_HAS_CARRIER" }, + { FE_HAS_VITERBI, "FE_HAS_VITERBI" }, + { FE_HAS_SYNC, "FE_HAS_SYNC" }, + { FE_HAS_LOCK, "FE_HAS_LOCK" }, + { FE_TIMEDOUT, "FE_TIMEDOUT" }, + { FE_REINIT, "FE_REINIT" }, + { 0, NULL } +}; + +static const struct xlat fecaps[] = { + { FE_IS_STUPID, "FE_IS_STUPID" }, + { FE_CAN_INVERSION_AUTO,"FE_CAN_INVERSION_AUTO" }, + { FE_CAN_FEC_1_2, "FE_CAN_FEC_1_2" }, + { FE_CAN_FEC_2_3, "FE_CAN_FEC_2_3" }, + { FE_CAN_FEC_3_4, "FE_CAN_FEC_3_4" }, + { FE_CAN_FEC_4_5, "FE_CAN_FEC_4_5" }, + { FE_CAN_FEC_5_6, "FE_CAN_FEC_5_6" }, + { FE_CAN_FEC_6_7, "FE_CAN_FEC_6_7" }, + { FE_CAN_FEC_7_8, "FE_CAN_FEC_7_8" }, + { FE_CAN_FEC_8_9, "FE_CAN_FEC_8_9" }, + { FE_CAN_FEC_AUTO, "FE_CAN_FEC_AUTO" }, + { FE_CAN_QPSK, "FE_CAN_QPSK" }, + { FE_CAN_QAM_16, "FE_CAN_QAM_16" }, + { FE_CAN_QAM_32, "FE_CAN_QAM_32" }, + { FE_CAN_QAM_64, "FE_CAN_QAM_64" }, + { FE_CAN_QAM_128, "FE_CAN_QAM_128" }, + { FE_CAN_QAM_256, "FE_CAN_QAM_256" }, + { FE_CAN_QAM_AUTO, "FE_CAN_QAM_AUTO" }, + { FE_CAN_TRANSMISSION_MODE_AUTO, + "FE_CAN_TRANSMISSION_MODE_AUTO" }, + { FE_CAN_BANDWIDTH_AUTO,"FE_CAN_BANDWIDTH_AUTO" }, + { FE_CAN_GUARD_INTERVAL_AUTO, + "FE_CAN_GUARD_INTERVAL_AUTO" }, + { FE_CAN_HIERARCHY_AUTO,"FE_CAN_HIERARCHY_AUTO" }, + { FE_CAN_8VSB, "FE_CAN_8VSB" }, + { FE_CAN_16VSB, "FE_CAN_16VSB" }, + { FE_NEEDS_BENDING, "FE_NEEDS_BENDING" }, + { FE_CAN_RECOVER, "FE_CAN_RECOVER" }, + { FE_CAN_MUTE_TS, "FE_CAN_MUTE_TS" }, + { 0, NULL } +}; + +int +dvb_ioctl(tcp, code, arg) +struct tcb *tcp; +long code, arg; +{ + const char *str = NULL; + unsigned char *bytes; + + if (entering(tcp)) { + return 0; + } + + switch (code) { + case DMX_START: + return 0; + + case DMX_STOP: + return 0; + + case DMX_SET_FILTER: { + struct dmx_sct_filter_params fp; + int i; + umove(tcp, arg, &fp); + tprintf("{ pid=%04x, filter={ filter={", fp.pid); + for(i=0; i<DMX_FILTER_SIZE; i++) { + tprintf("%u", fp.filter.filter[i]); + if(i<DMX_FILTER_SIZE-1) + tprintf(", "); + } + tprintf("}, mask={"); + for(i=0; i<DMX_FILTER_SIZE; i++) { + tprintf("%u", fp.filter.mask[i]); + if(i<DMX_FILTER_SIZE-1) + tprintf(", "); + } + tprintf("}, mode={"); + for(i=0; i<DMX_FILTER_SIZE; i++) { + tprintf("%u", fp.filter.mode[i]); + if(i<DMX_FILTER_SIZE-1) + tprintf(", "); + } + tprintf("} }, timeout=%d, flags=%d }", fp.timeout, fp.flags); + return 1; + } + + case FE_GET_INFO: { + struct dvb_frontend_info fi; + umove(tcp, arg, &fi); + tprintf(", { name=\"%s\", type=", fi.name); + printxval(fetypes, fi.type, "FE_???"); + tprintf(", frequency_min=%u, frequency_max=%u, frequency_stepsize=%u, frequency_tolerance=%u, symbol_rate_min=%u, symbol_rate_max=%u, symbol_rate_tolerance=%u, caps=", fi.frequency_min, fi.frequency_max, fi.frequency_stepsize, fi.frequency_tolerance, fi.symbol_rate_min, fi.symbol_rate_max, fi.symbol_rate_tolerance); + printflags(fecaps, fi.caps, "FE_CAN_???"); + tprintf(" }"); + return 1; + } + + case FE_SET_FRONTEND: { + struct dvb_frontend_parameters fp; + umove(tcp, arg, &fp); + tprintf(", { frequency=%d, inversion=%x", fp.frequency, fp.inversion); + // FIXME figure out if this is qpsk, qam, ofdm or vsb... + // for now we hardcode qpsk + tprintf(", symbol rate=%d, fec_inner: %x", fp.u.qpsk.symbol_rate, fp.u.qpsk.fec_inner); + tprintf("}"); + return 1; + } + + case FE_READ_STATUS: { + fe_status_t fs; + umove(tcp, arg, &fs); + tprintf(", "); + printflags(festatus, fs, "FE_STATUS???"); + return 1; + } + + default: + return 0; + } +} +#endif --- strace-4.5.20/ioctl.c.dvb~ 2007-06-30 13:36:46.000000000 +0200 +++ strace-4.5.20/ioctl.c 2010-05-04 11:03:29.735795276 +0200 @@ -155,6 +155,10 @@ long code, arg; case 0x22: return scsi_ioctl(tcp, code, arg); #endif +#ifdef LINUX + case 'o': + return dvb_ioctl(tcp, code, arg); +#endif default: break; } --- strace-4.5.20/linux/ioctlent.sh.dvb~ 2010-04-07 13:34:06.000000000 +0200 +++ strace-4.5.20/linux/ioctlent.sh 2010-05-04 11:04:33.991830275 +0200 @@ -81,7 +81,7 @@ if [ -e $dir/Kbuild ]; then ) else # older kernel so just assume some headers - files="linux/* $asm/* asm-generic/* scsi/* sound/*" + files="linux/* linux/*/* $asm/* asm-generic/* mtd/* rdma/* scsi/* sound/* video/*" fi # Build the list of all ioctls --- strace-4.5.20/Makefile.am.dvb~ 2010-04-07 12:17:27.000000000 +0200 +++ strace-4.5.20/Makefile.am 2010-05-04 11:03:29.735795276 +0200 @@ -15,7 +15,7 @@ INCLUDES = -I$(srcdir)/$(OS)/$(ARCH) -I$ strace_SOURCES = strace.c syscall.c count.c util.c desc.c file.c ipc.c \ io.c ioctl.c mem.c net.c process.c bjm.c quota.c \ resource.c signal.c sock.c system.c term.c time.c \ - proc.c scsi.c stream.c + proc.c scsi.c stream.c dvb.c noinst_HEADERS = defs.h EXTRA_DIST = $(man_MANS) errnoent.sh signalent.sh syscallent.sh ioctlsort.c \