Hello Johannes, Updated Patch. I hope it addresses a lot of small things here and there .. I will attach the STB0899's interface to the API in another mail. Hope i haven't missed out anything that was mentioned. Thanks, Manu
diff -Naurp multiproto4.orig/linux/drivers/media/dvb/dvb-core/dvb_frontend.c multiproto4/linux/drivers/media/dvb/dvb-core/dvb_frontend.c --- multiproto4.orig/linux/drivers/media/dvb/dvb-core/dvb_frontend.c 2006-04-29 03:22:23.000000000 +0400 +++ multiproto4/linux/drivers/media/dvb/dvb-core/dvb_frontend.c 2006-05-07 22:50:55.000000000 +0400 @@ -93,7 +93,11 @@ struct dvb_frontend_private { /* thread/frontend values */ struct dvb_device *dvbdev; + /* Legacy datatype, superseded by params */ struct dvb_frontend_parameters parameters; + /* params supersedes parameters */ + struct dvb_frontend_params params; + struct dvb_frontend_cap caps; struct dvb_fe_events events; struct semaphore sem; struct list_head list_head; @@ -124,6 +128,61 @@ struct dvb_frontend_private { unsigned int check_wrapped; }; +struct modcod_table { + u32 modcod; + u32 modulation; + u32 fecrate; +}; + +static struct modcod_table dvbs2_modcod_lookup[] = { + { FE_MODCOD_DUMMY_PLFRAME, FE_MOD_NONE, FE_CODERATE_NONE }, + { FE_MODCOD_QPSK_1_4, FE_MOD_QPSK, FE_CODERATE_1_4 }, + { FE_MODCOD_QPSK_1_3, FE_MOD_QPSK, FE_CODERATE_1_3 }, + { FE_MODCOD_QPSK_2_5, FE_MOD_QPSK, FE_CODERATE_2_5 }, + { FE_MODCOD_QPSK_1_2, FE_MOD_QPSK, FE_CODERATE_1_2 }, + { FE_MODCOD_QPSK_3_5, FE_MOD_QPSK, FE_CODERATE_3_5 }, + { FE_MODCOD_QPSK_2_3, FE_MOD_QPSK, FE_CODERATE_2_3 }, + { FE_MODCOD_QPSK_3_4, FE_MOD_QPSK, FE_CODERATE_3_4 }, + { FE_MODCOD_QPSK_4_5, FE_MOD_QPSK, FE_CODERATE_4_5 }, + { FE_MODCOD_QPSK_5_6, FE_MOD_QPSK, FE_CODERATE_5_6 }, + { FE_MODCOD_QPSK_8_9, FE_MOD_QPSK, FE_CODERATE_8_9 }, + { FE_MODCOD_QPSK_9_10, FE_MOD_QPSK, FE_CODERATE_9_10 }, + { FE_MODCOD_8PSK_3_5, FE_MOD_8PSK, FE_CODERATE_3_5 }, + { FE_MODCOD_8PSK_2_3, FE_MOD_8PSK, FE_CODERATE_2_3 }, + { FE_MODCOD_8PSK_3_4, FE_MOD_8PSK, FE_CODERATE_3_4 }, + { FE_MODCOD_8PSK_5_6, FE_MOD_8PSK, FE_CODERATE_5_6 }, + { FE_MODCOD_8PSK_8_9, FE_MOD_8PSK, FE_CODERATE_8_9 }, + { FE_MODCOD_8PSK_9_10, FE_MOD_8PSK, FE_CODERATE_9_10 }, + { FE_MODCOD_16APSK_2_3, FE_MOD_16APSK, FE_CODERATE_2_3 }, + { FE_MODCOD_16APSK_3_4, FE_MOD_16APSK, FE_CODERATE_3_4 }, + { FE_MODCOD_16APSK_4_5, FE_MOD_16APSK, FE_CODERATE_4_5 }, + { FE_MODCOD_16APSK_5_6, FE_MOD_16APSK, FE_CODERATE_5_6 }, + { FE_MODCOD_16APSK_8_9, FE_MOD_16APSK, FE_CODERATE_8_9 }, + { FE_MODCOD_16APSK_9_10, FE_MOD_16APSK, FE_CODERATE_9_10 }, + { FE_MODCOD_32APSK_3_4, FE_MOD_32APSK, FE_CODERATE_3_4 }, + { FE_MODCOD_32APSK_4_5, FE_MOD_32APSK, FE_CODERATE_4_5 }, + { FE_MODCOD_32APSK_5_6, FE_MOD_32APSK, FE_CODERATE_5_6 }, + { FE_MODCOD_32APSK_8_9, FE_MOD_32APSK, FE_CODERATE_8_9 }, + { FE_MODCOD_32APSK_9_10, FE_MOD_32APSK, FE_CODERATE_9_10 }, + { FE_MODCOD_RESERVED_1, FE_MOD_RESERVED, FE_CODERATE_RESERVED }, + { FE_MODCOD_BPSK_1_3, FE_MOD_BPSK, FE_CODERATE_1_3 }, + { FE_MODCOD_BPSK_1_4, FE_MOD_BPSK, FE_CODERATE_1_4 }, + { FE_MODCOD_RESERVED_2, FE_MOD_RESERVED, FE_CODERATE_RESERVED } +}; + +/** + * Decode DVB-S2 MODCOD field as defined in EN 302 307 + * Section 5.5.2 + */ +void decode_dvbs2_modcod(u32 modcod, u32 *modulation, u32 *fec) +{ + BUG_ON(modcod >= ARRAY_SIZE(dvbs2_modcod_lookup)); + *modulation = dvbs2_modcod_lookup[modcod].modulation; + *fec = dvbs2_modcod_lookup[modcod].fecrate; + +} +EXPORT_SYMBOL(decode_dvbs2_modcod); + static void dvb_frontend_wakeup(struct dvb_frontend *fe); static void dvb_frontend_add_event(struct dvb_frontend *fe, fe_status_t status) @@ -508,7 +567,7 @@ static int dvb_frontend_thread(void *dat unsigned long timeout; char name [15]; fe_status_t s; - struct dvb_frontend_parameters *params; + struct dvb_frontend_params *params; dprintk("%s\n", __FUNCTION__); @@ -564,7 +623,7 @@ static int dvb_frontend_thread(void *dat /* have we been asked to retune? */ params = NULL; if (fepriv->state & FESTATE_RETUNE) { - params = &fepriv->parameters; + params = &fepriv->params; fepriv->state = FESTATE_TUNED; } @@ -977,6 +1036,20 @@ static int dvb_frontend_ioctl(struct ino case FE_SET_FRONTEND_TUNE_MODE: fepriv->tune_mode_flags = (unsigned long) parg; break; + + case FE_GET_CAPS: + if (fe->ops->get_caps) + err = fe->ops->get_caps(fe, (struct dvb_frontend_cap*) parg); + break; + + case FE_SET_PARAMS: + if (fe->ops->set_params) + err = fe->ops->set_params(fe, (struct dvb_frontend_params*) parg); + break; + + case FE_GET_PARAMS: + if (fe->ops->get_params) + err = fe->ops->get_params(fe, (struct dvb_frontend_params*) parg); }; up (&fepriv->sem); diff -Naurp multiproto4.orig/linux/drivers/media/dvb/dvb-core/dvb_frontend.h multiproto4/linux/drivers/media/dvb/dvb-core/dvb_frontend.h --- multiproto4.orig/linux/drivers/media/dvb/dvb-core/dvb_frontend.h 2006-04-29 03:22:23.000000000 +0400 +++ multiproto4/linux/drivers/media/dvb/dvb-core/dvb_frontend.h 2006-05-07 22:51:06.000000000 +0400 @@ -98,7 +98,7 @@ struct dvb_frontend_ops { /* if this is set, it overrides the default swzigzag */ int (*tune)(struct dvb_frontend* fe, - struct dvb_frontend_parameters* params, + struct dvb_frontend_params* params, unsigned int mode_flags, int *delay, fe_status_t *status); @@ -125,6 +125,11 @@ struct dvb_frontend_ops { int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd); int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable); + /* These callbacks are based on the superseded IOCTL's */ + int (*get_caps)(struct dvb_frontend* fe, struct dvb_frontend_cap* caps); + int (*set_params)(struct dvb_frontend* fe, struct dvb_frontend_params* params); + int (*get_params)(struct dvb_frontend* fe, struct dvb_frontend_params* params); + struct dvb_tuner_ops tuner_ops; }; @@ -158,4 +163,6 @@ extern void dvb_frontend_reinitialise(st extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec); extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime); +extern void decode_dvbs2_modcod(u32 modcod, u32 *modulation, u32 *fec); + #endif diff -Naurp multiproto4.orig/linux/include/linux/dvb/frontend.h multiproto4/linux/include/linux/dvb/frontend.h --- multiproto4.orig/linux/include/linux/dvb/frontend.h 2006-04-29 03:22:23.000000000 +0400 +++ multiproto4/linux/include/linux/dvb/frontend.h 2006-05-07 22:50:20.000000000 +0400 @@ -249,7 +249,9 @@ struct dvb_frontend_event { */ #define FE_TUNE_MODE_ONESHOT 0x01 - +/** + * FE_GET_INFO, is now Superseded by FE_GET_CAPS + */ #define FE_GET_INFO _IOR('o', 61, struct dvb_frontend_info) #define FE_DISEQC_RESET_OVERLOAD _IO('o', 62) @@ -267,6 +269,9 @@ struct dvb_frontend_event { #define FE_READ_SNR _IOR('o', 72, __u16) #define FE_READ_UNCORRECTED_BLOCKS _IOR('o', 73, __u32) +/** + * Legacy IOCTL's + */ #define FE_SET_FRONTEND _IOW('o', 76, struct dvb_frontend_parameters) #define FE_GET_FRONTEND _IOR('o', 77, struct dvb_frontend_parameters) #define FE_SET_FRONTEND_TUNE_MODE _IO('o', 81) /* unsigned int */ @@ -274,4 +279,501 @@ struct dvb_frontend_event { #define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */ +/** + * New operations for new and multiple delivery systems. + * + * References: + * DVB-S: EN 300 421 + * DVB-S2: EN 301 210, TR 102 376, EN 302 307 + * DVB-C: EN 300 429 + * DVB-T: EN 300 744 + * DVB-H: EN 302 304 + * ATSC: A/53A + */ + +/** + * Delivery systems, some devices + * are capable of supporting multiple delivery systems. + * + * FE_DELSYS_IGNORE, causes the delivery system + * not to be queried. + * + * FE_DELSYS_AUTO, Some devices/drivers, might in + * future be capable of detectinng the delivery system. + */ +enum fe_delsys { + FE_DELSYS_IGNORE = (0 << 0), + FE_DELSYS_DVBS = (1 << 0), + FE_DELSYS_DVBS2 = (1 << 1), + FE_DELSYS_DVBC = (1 << 2), + FE_DELSYS_DVBT = (1 << 3), + FE_DELSYS_DVBH = (1 << 4), + FE_DELSYS_ATSC = (1 << 5), + FE_DELSYS_DSS = (1 << 6), + FE_DELSYS_AUTO = (1 << 31) +}; + +/** + * Nyquist RollOff rates + * NOTE: This is specified by the DVB-S2 specifications + */ +enum fe_rolloff { + FE_ROLLOFF_35 = (0 << 0), + FE_ROLLOFF_25 = (1 << 0), + FE_ROLLOFF_20 = (1 << 1), + FE_ROLLOFF_RESERVED = (3 << 0) +}; + + +/** + * Stream Priorities + * + * Select High or Low Priority stream when + * Hierarchial Modulation is used. + * + * NOTE: The default should be the High priority stream. + */ +enum fe_stream_priority { + FE_STREAM_PRIORITY_HP = (1 << 0), + FE_STREAM_PRIORITY_LP = (1 << 1) +}; + +/** + * Modulations. + * Some devices support multiple modulation types + * + * FE_MOD_IGNORE, causes the modulation type not + * to be queried. + * + * FE_MOD_AUTO, Some devices/drivers, might support + * auto detecting the modulation type, depending on + * some other settings and or hardware features. + */ +enum fe_modulation_type { + FE_MOD_IGNORE = (0 << 0), + FE_MOD_NONE = (1 << 0), + FE_MOD_BPSK = (1 << 1), + FE_MOD_QPSK = (1 << 2), + FE_MOD_OQPSK = (1 << 3), + FE_MOD_8PSK = (1 << 4), + FE_MOD_16APSK = (1 << 5), + FE_MOD_32APSK = (1 << 6), + FE_MOD_QAM16 = (1 << 7), + FE_MOD_QAM32 = (1 << 8), + FE_MOD_QAM64 = (1 << 9), + FE_MOD_QAM128 = (1 << 10), + FE_MOD_QAM256 = (1 << 11), + FE_MOD_QAM512 = (1 << 12), + FE_MOD_QAM1024 = (1 << 13), + FE_MOD_QAMAUTO = (1 << 14), + FE_MOD_OFDM = (1 << 15), + FE_MOD_COFDM = (1 << 16), + FE_MOD_VSB8 = (1 << 17), + FE_MOD_VSB16 = (1 << 18), + FE_MOD_RESERVED = (1 << 19), + FE_MOD_AUTO = (1 << 31) +}; + +/** + * FEC (Forward Error Correction) Code rates + * + * FE_FECRATE_IGNORE, causes the FECRATE type not + * to be queried. + * + * FE_FECRATE_AUTO, Some devices/drivers, might + * support auto detecting the FEC code rate type, depending + * on some other hardware settings and or hardware features. + */ +enum fe_coderate { + FE_CODERATE_IGNORE = (0 << 0), + FE_CODERATE_NONE = (1 << 0), + FE_CODERATE_1_4 = (1 << 1), + FE_CODERATE_1_3 = (1 << 2), + FE_CODERATE_2_5 = (1 << 3), + FE_CODERATE_1_2 = (1 << 4), + FE_CODERATE_3_5 = (1 << 5), + FE_CODERATE_2_3 = (1 << 6), + FE_CODERATE_3_4 = (1 << 7), + FE_CODERATE_4_5 = (1 << 8), + FE_CODERATE_5_6 = (1 << 9), + FE_CODERATE_6_7 = (1 << 10), + FE_CODERATE_7_8 = (1 << 11), + FE_CODERATE_8_9 = (1 << 12), + FE_CODERATE_9_10 = (1 << 13), + FE_CODERATE_RESERVED = (1 << 14), + FE_CODERATE_AUTO = (1 << 31) +}; + +/** + * MODCOD types + * + * The MODCOD types are specific to the DVB-S2 specification + * Some devices directly take the MODCOD values as an input + * or just output the same. + * + * In any case a single frontend will not be able to do + * multiple modulations/code rates at any given point of time. + */ +enum fe_modcod { + FE_MODCOD_DUMMY_PLFRAME = 0, + FE_MODCOD_QPSK_1_4, + FE_MODCOD_QPSK_1_3, + FE_MODCOD_QPSK_2_5, + FE_MODCOD_QPSK_1_2, + FE_MODCOD_QPSK_3_5, + FE_MODCOD_QPSK_2_3, + FE_MODCOD_QPSK_3_4, + FE_MODCOD_QPSK_4_5, + FE_MODCOD_QPSK_5_6, + FE_MODCOD_QPSK_8_9, + FE_MODCOD_QPSK_9_10, + FE_MODCOD_8PSK_3_5, + FE_MODCOD_8PSK_2_3, + FE_MODCOD_8PSK_3_4, + FE_MODCOD_8PSK_5_6, + FE_MODCOD_8PSK_8_9, + FE_MODCOD_8PSK_9_10, + FE_MODCOD_16APSK_2_3, + FE_MODCOD_16APSK_3_4, + FE_MODCOD_16APSK_4_5, + FE_MODCOD_16APSK_5_6, + FE_MODCOD_16APSK_8_9, + FE_MODCOD_16APSK_9_10, + FE_MODCOD_32APSK_3_4, + FE_MODCOD_32APSK_4_5, + FE_MODCOD_32APSK_5_6, + FE_MODCOD_32APSK_8_9, + FE_MODCOD_32APSK_9_10, + FE_MODCOD_RESERVED_1, + FE_MODCOD_BPSK_1_3, + FE_MODCOD_BPSK_1_4, + FE_MODCOD_RESERVED_2 +}; + +/** + * Bandwidth types + * + * FE_BANDWIDTH_IGNORE, causes the bandwidth not + * to be queried. + * + * FE_BANDWIDTH_AUTO, Some devices/drivers, might + * support auto detecting the Bandwidth, depending + * on some other hardware settings and or hardware features. + */ +enum fe_bandwidths { + FE_BANDWIDTH_IGNORE = (0 << 0), + FE_BANDWIDTH_8_MHZ = (1 << 1), + FE_BANDWIDTH_7_MHZ = (1 << 2), + FE_BANDWIDTH_6_MHZ = (1 << 3), + FE_BANDWIDTH_5_MHZ = (1 << 4), + FE_BANDWIDTH_RESERVED = (1 << 5), + FE_BANDWIDTH_AUTO = (1 << 31) +}; + +/** + * Inversion modes + * + * FE_INVERSION_IGNORE, causes the inversion not + * to be queried. + * + * FE_INVERSION_AUTO, Some devices/drivers, might + * support auto detecting the Inversion, depending + * on some other hardware settings and or hardware features. + * + * NOTE: All current delivery systems need inversion in some + * way or the other, due to hardware implementation specifics. + * and/or others. + */ +enum fe_inversion { + FE_INVERSION_IGNORE = (0 << 0), + FE_INVERSION_OFF = (1 << 0), + FE_INVERSION_ON = (1 << 1), + FE_INVERSION_AUTO = (1 << 31) +}; + +/** + * Transmission modes + * + * FE_TRANSMISSION_MODE_IGNORE, causes the transmission mode + * not to be queried. + * + * FE_TRANSMISSION_MODE_AUTO, Some devices/drivers, might + * support auto detecting the Transmission Mode, depending + * on some other hardware settings and or hardware features. + * + * NOTE: Currently applies to DVB-T and DVB-H only. + */ +enum fe_transmit_modes { + FE_TRANSMISSION_MODE_IGNORE = (0 << 0), + FE_TRANSMISSION_MODE_2K = (1 << 1), + FE_TRANSMISSION_MODE_4K = (1 << 2), + FE_TRANSMISSION_MODE_8K = (1 << 3), + FE_TRANSMISSION_MODE_RESERVED = (1 << 4), + FE_TRANSMISSION_MODE_AUTO = (1 << 31) +}; + +/** + * Guard Intervals + * + * FE_GUARD_INTERVAL_IGNORE, causes the guard interval + * not to be queried. + * + * FE_GUARD_INTERVAL_AUTO, Some devices/drivers, might + * support auto detecting the Transmission Mode, depending + * on some other hardware settings and or hardware features. + * + * NOTE: Currently applies to DVB-T and DVB-H only. + */ +enum fe_guard_intervals { + FE_GUARD_INTERVAL_IGNORE = (0 << 0), + FE_GUARD_INTERVAL_1_32 = (1 << 1), + FE_GUARD_INTERVAL_1_16 = (1 << 2), + FE_GUARD_INTERVAL_1_8 = (1 << 3), + FE_GUARD_INTERVAL_1_4 = (1 << 4), + FE_GUARD_INTERVAL_AUTO = (1 << 31) +}; + +/** + * Hierarchial Modulations + * + * FE_HIERARCHY_IGNORE, causes the hierarchy + * not to be queried. + * + * FE_HIERARCHY_AUTO, Some devices/drivers, might + * support auto detecting the hierarchial modulation, depending + * on some other hardware settings and or hardware features. + * + * NOTE: Currently applies to DVB-T and DVB-H only. + */ +enum fe_hierarchy_info { + FE_HIERARCHY_IGNORE = (0 << 0), + FE_HIERARCHY_OFF = (1 << 1), + FE_HIERARCHY_ON = (1 << 2), + FE_HIERARCHY_AUTO = (1 << 31) +}; + +/** + * Interleaver types + * + * FE_INTERLEAVER_IGNORE, causes the hierarchy + * not to be queried. + * + * FE_INTERLEAVER_AUTO, Some devices/drivers, might + * support auto detecting the hierarchial modulation, depending + * on some other hardware settings and or hardware features. + * + * NOTE: Currently applies only to DVB-H. + */ +enum fe_interleaver { + FE_INTERLEAVER_IGNORE = (0 << 0), + FE_INTERLEAVER_NATIVE = (1 << 1), + FE_INTERLEAVER_INDEPTH = (1 << 2), + FE_INTERLEAVER_AUTO = (1 << 31) +}; + + +/** + * MPE-FEC modes + * + * FE_MPEFEC_IGNORE, causes the mpefec indicator + * not to be queried. + * + * NOTE: MPE-FEC is an indicator according to EN 300 468 + * Currently applies only to DVB-H. + */ +enum fe_mpefec { + FE_MPEFEC_IGNORE = (0 << 0), + FE_MPEFEC_ON = (1 << 1), + FE_MPEFEC_OFF = (1 << 2) +}; + +/** + * Timeslicing mode + * + * FE_TIMESLICING_IGNORE, causes the timeslicing indicator + * not to be queried. + * + * NOTE: Timeslicing is an indicator according to EN 300 468 + * Currently applies only to DVB-H. + */ +enum fe_timeslicing { + FE_TIMESLICING_IGNORE = (0 << 0), + FE_TIMESLICING_ON = (1 << 1), + FE_TIMESLICING_OFF = (1 << 2) +}; + +/** + * DVB-S parameters + */ +struct dvbs_params { + __u32 symbol_rate; + + enum fe_modulation_type modulation; + enum fe_coderate coderate; +}; + +/** + * DVB-S2 parameters + */ +struct dvbs2_params { + __u32 symbol_rate; + + enum fe_modulation_type modulation; + enum fe_stream_priority priority; + enum fe_coderate coderate_HP; + enum fe_coderate coderate_LP; + enum fe_rolloff rolloff; + enum fe_modcod modcod; +}; + +/** + * DSS parameters + */ +struct dss_params { + __u32 symbol_rate; + + enum fe_modulation_type modulation; + enum fe_coderate coderate; +}; + +/** + * DVB-C parameters + */ +struct dvbc_params { + __u32 symbol_rate; + + enum fe_modulation_type modulation; + enum fe_coderate coderate; +}; + +/** + * DVB-T parameters + */ +struct dvbt_params { + enum fe_modulation_type constellation; + enum fe_bandwidths bandwidth; + enum fe_coderate code_rate_HP; + enum fe_coderate code_rate_LP; + enum fe_transmit_modes transmission_mode; + enum fe_guard_intervals guard_interval; + enum fe_hierarchy_info hierarchy; + enum fe_rolloff alpha; + enum fe_stream_priority priority; +}; + +/** + * DVB-H parameters + */ +struct dvbh_params { + enum fe_modulation_type constellation; + enum fe_coderate code_rate_HP; + enum fe_coderate code_rate_LP; + enum fe_transmit_modes transmission_mode; + enum fe_guard_intervals guard_interval; + enum fe_hierarchy_info hierarchy; + enum fe_rolloff alpha; + enum fe_interleaver interleaver; + enum fe_mpefec mpefec; + enum fe_timeslicing timeslicing; + enum fe_stream_priority priority; + __u32 bandwidth; +}; + +/** + * ATSC parameters + */ +struct atsc_params { + enum fe_modulation_type modulation; +}; + +/** + * Padding to handle future binary compatibility issues. + * + * NOTE: The padding is a dummy parameter ! + */ +struct pad128_params { + __u8 pad[128]; +}; + +/** + * Frontend capability information + */ +struct dvb_frontend_cap { + char name[128]; + + __u32 frequency_min; + __u32 frequency_max; + __u32 frequency_stepsize; + __u32 frequency_tolerance; + __u32 symbol_rate_min; + __u32 symbol_rate_max; + __u32 symbol_rate_tolerance; + + __u8 pad[32]; + + enum fe_delsys delivery; + enum fe_inversion inversion; + + union { + struct dvbs_params dvbs; + struct dvbs2_params dvbs2; + struct dss_params dss; + struct dvbc_params dvbc; + struct dvbt_params dvbt; + struct dvbh_params dvbh; + struct atsc_params atsc; + struct pad128_params pad; + } delsys; +}; + +/** + * We have the NEW IOCTL's defined now. This IOCTL + * is supposed to handle all the new delivery systems + * FE_GET_CAPS, gets all the capabilities in one go. + * + * For the GET IOCTL's ie FE_GET_PARAMS and FE_GET_CAPS + * some of the parameters maybe selectively queried by + * setting that relevant parameter to IGNORE. + */ +#define FE_GET_CAPS _IOR('o', 84, struct dvb_frontend_cap) + +/** + * Frontend parameters + */ +struct dvb_frontend_params { + __u32 frequency; + + enum fe_delsys delivery; + enum fe_inversion inversion; + __u8 pad[32]; + union { + struct dvbs_params dvbs; + struct dvbs2_params dvbs2; + struct dss_params dss; + struct dvbc_params dvbc; + struct dvbt_params dvbt; + struct dvbh_params dvbh; + struct atsc_params atsc; + struct pad128_params pad; + } delsys; +}; + +/** + * We have the NEW IOCTL's defined now. These IOCTL's + * are supposed to handle all the new delivery systems. + * + * FE_SET_PARAMS, sets all the parameters in one go. + * FE_GET_PARAMS, gets all the parameters in one go. + * FE_GET_DELSYS, gets the supported Delivery Systems from + * a multistandard device + * + * For the GET IOCTL's ie FE_GET_PARAMS and FE_GET_CAPS + * some of the parameters maybe selectively queried by + * setting that relevant parameter to IGNORE. + * + */ +#define FE_SET_PARAMS _IOW('o', 82, struct dvb_frontend_params) +#define FE_GET_PARAMS _IOR('o', 83, struct dvb_frontend_params) +#define FE_GET_DELSYS _IOR('o', 85, enum fe_delsys) + #endif /*_DVBFRONTEND_H_*/ diff -Naurp multiproto4.orig/linux/include/linux/dvb/version.h multiproto4/linux/include/linux/dvb/version.h --- multiproto4.orig/linux/include/linux/dvb/version.h 2006-04-29 03:22:23.000000000 +0400 +++ multiproto4/linux/include/linux/dvb/version.h 2006-05-07 19:16:46.000000000 +0400 @@ -24,6 +24,6 @@ #define _DVBVERSION_H_ #define DVB_API_VERSION 3 -#define DVB_API_VERSION_MINOR 1 +#define DVB_API_VERSION_MINOR 2 #endif /*_DVBVERSION_H_*/
_______________________________________________ linux-dvb@xxxxxxxxxxx http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb