2005-05-16 21:54:10 -07:00
/*
2009-05-20 05:08:26 -03:00
* Linux driver for digital TV devices equipped with B2C2 FlexcopII ( b ) / III
* flexcop - common . h - common header file for device - specific source files
* see flexcop . c for copyright information
2005-05-16 21:54:10 -07:00
*/
# ifndef __FLEXCOP_COMMON_H__
# define __FLEXCOP_COMMON_H__
2011-06-06 10:43:46 +00:00
# include <linux/interrupt.h>
2005-05-16 21:54:10 -07:00
# include <linux/pci.h>
2006-02-07 06:49:14 -02:00
# include <linux/mutex.h>
2005-05-16 21:54:10 -07:00
# include "flexcop-reg.h"
# include "dmxdev.h"
# include "dvb_demux.h"
# include "dvb_net.h"
# include "dvb_frontend.h"
# define FC_MAX_FEED 256
# ifndef FC_LOG_PREFIX
# warning please define a log prefix for your file, using a default one
# define FC_LOG_PREFIX "b2c2-undef"
# endif
/* Steal from usb.h */
# undef err
2009-03-29 07:46:58 -03:00
# define err(format, arg...) \
printk ( KERN_ERR FC_LOG_PREFIX " : " format " \n " , # # arg )
2005-05-16 21:54:10 -07:00
# undef info
2009-03-29 07:46:58 -03:00
# define info(format, arg...) \
printk ( KERN_INFO FC_LOG_PREFIX " : " format " \n " , # # arg )
2005-05-16 21:54:10 -07:00
# undef warn
2009-03-29 07:46:58 -03:00
# define warn(format, arg...) \
printk ( KERN_WARNING FC_LOG_PREFIX " : " format " \n " , # # arg )
2005-05-16 21:54:10 -07:00
struct flexcop_dma {
struct pci_dev * pdev ;
u8 * cpu_addr0 ;
dma_addr_t dma_addr0 ;
u8 * cpu_addr1 ;
dma_addr_t dma_addr1 ;
u32 size ; /* size of each address in bytes */
} ;
2008-03-29 20:49:57 -03:00
struct flexcop_i2c_adapter {
struct flexcop_device * fc ;
struct i2c_adapter i2c_adap ;
u8 no_base_addr ;
flexcop_i2c_port_t port ;
} ;
2005-05-16 21:54:10 -07:00
/* Control structure for data definitions that are common to
* the B2C2 - based PCI and USB devices .
*/
struct flexcop_device {
/* general */
struct device * dev ; /* for firmware_class */
# define FC_STATE_DVB_INIT 0x01
# define FC_STATE_I2C_INIT 0x02
# define FC_STATE_FE_INIT 0x04
int init_state ;
/* device information */
int has_32_hw_pid_filter ;
flexcop_revision_t rev ;
flexcop_device_type_t dev_type ;
flexcop_bus_t bus_type ;
/* dvb stuff */
struct dvb_adapter dvb_adapter ;
struct dvb_frontend * fe ;
struct dvb_net dvbnet ;
struct dvb_demux demux ;
struct dmxdev dmxdev ;
struct dmx_frontend hw_frontend ;
struct dmx_frontend mem_frontend ;
int ( * fe_sleep ) ( struct dvb_frontend * ) ;
2008-03-29 20:49:57 -03:00
struct flexcop_i2c_adapter fc_i2c_adap [ 3 ] ;
2006-02-07 06:49:14 -02:00
struct mutex i2c_mutex ;
2005-05-16 21:54:16 -07:00
struct module * owner ;
2005-05-16 21:54:10 -07:00
/* options and status */
2005-05-16 21:54:15 -07:00
int extra_feedcount ;
2005-05-16 21:54:10 -07:00
int feedcount ;
int pid_filtering ;
2005-05-16 21:54:15 -07:00
int fullts_streaming_state ;
2015-05-30 15:10:06 -03:00
int skip_6_hw_pid_filter ;
2005-05-16 21:54:10 -07:00
/* bus specific callbacks */
2009-03-29 07:46:58 -03:00
flexcop_ibi_value ( * read_ibi_reg ) ( struct flexcop_device * ,
flexcop_ibi_register ) ;
int ( * write_ibi_reg ) ( struct flexcop_device * ,
flexcop_ibi_register , flexcop_ibi_value ) ;
int ( * i2c_request ) ( struct flexcop_i2c_adapter * ,
2008-03-29 20:49:57 -03:00
flexcop_access_op_t , u8 chipaddr , u8 addr , u8 * buf , u16 len ) ;
2009-03-29 07:46:58 -03:00
int ( * stream_control ) ( struct flexcop_device * , int ) ;
2005-05-16 21:54:10 -07:00
int ( * get_mac_addr ) ( struct flexcop_device * fc , int extended ) ;
void * bus_specific ;
} ;
/* exported prototypes */
/* from flexcop.c */
void flexcop_pass_dmx_data ( struct flexcop_device * fc , u8 * buf , u32 len ) ;
void flexcop_pass_dmx_packets ( struct flexcop_device * fc , u8 * buf , u32 no ) ;
struct flexcop_device * flexcop_device_kmalloc ( size_t bus_specific_len ) ;
2009-03-29 07:46:58 -03:00
void flexcop_device_kfree ( struct flexcop_device * ) ;
2005-05-16 21:54:10 -07:00
2009-03-29 07:46:58 -03:00
int flexcop_device_initialize ( struct flexcop_device * ) ;
2005-05-16 21:54:10 -07:00
void flexcop_device_exit ( struct flexcop_device * fc ) ;
2005-07-07 17:57:49 -07:00
void flexcop_reset_block_300 ( struct flexcop_device * fc ) ;
2005-05-16 21:54:10 -07:00
/* from flexcop-dma.c */
2009-03-29 07:46:58 -03:00
int flexcop_dma_allocate ( struct pci_dev * pdev ,
struct flexcop_dma * dma , u32 size ) ;
2005-05-16 21:54:10 -07:00
void flexcop_dma_free ( struct flexcop_dma * dma ) ;
2009-03-29 07:46:58 -03:00
int flexcop_dma_control_timer_irq ( struct flexcop_device * fc ,
flexcop_dma_index_t no , int onoff ) ;
int flexcop_dma_control_size_irq ( struct flexcop_device * fc ,
flexcop_dma_index_t no , int onoff ) ;
int flexcop_dma_config ( struct flexcop_device * fc , struct flexcop_dma * dma ,
flexcop_dma_index_t dma_idx ) ;
int flexcop_dma_xfer_control ( struct flexcop_device * fc ,
flexcop_dma_index_t dma_idx , flexcop_dma_addr_index_t index ,
int onoff ) ;
int flexcop_dma_config_timer ( struct flexcop_device * fc ,
flexcop_dma_index_t dma_idx , u8 cycles ) ;
2005-05-16 21:54:10 -07:00
/* from flexcop-eeprom.c */
/* the PCI part uses this call to get the MAC address, the USB part has its own */
int flexcop_eeprom_check_mac_addr ( struct flexcop_device * fc , int extended ) ;
/* from flexcop-i2c.c */
/* the PCI part uses this a i2c_request callback, whereas the usb part has its own
* one . We have it in flexcop - i2c . c , because it is going via the actual
* I2C - channel of the flexcop .
*/
2008-03-29 20:49:57 -03:00
int flexcop_i2c_request ( struct flexcop_i2c_adapter * , flexcop_access_op_t ,
u8 chipaddr , u8 addr , u8 * buf , u16 len ) ;
2005-05-16 21:54:10 -07:00
/* from flexcop-sram.c */
2009-03-29 07:46:58 -03:00
int flexcop_sram_set_dest ( struct flexcop_device * fc , flexcop_sram_dest_t dest ,
flexcop_sram_dest_target_t target ) ;
2005-05-16 21:54:10 -07:00
void flexcop_wan_set_speed ( struct flexcop_device * fc , flexcop_wan_speed_t s ) ;
2009-03-29 07:46:58 -03:00
void flexcop_sram_ctrl ( struct flexcop_device * fc ,
int usb_wan , int sramdma , int maximumfill ) ;
2005-05-16 21:54:10 -07:00
/* global prototypes for the flexcop-chip */
/* from flexcop-fe-tuner.c */
2009-03-29 07:46:58 -03:00
int flexcop_frontend_init ( struct flexcop_device * fc ) ;
2005-05-16 21:54:10 -07:00
void flexcop_frontend_exit ( struct flexcop_device * fc ) ;
/* from flexcop-i2c.c */
int flexcop_i2c_init ( struct flexcop_device * fc ) ;
void flexcop_i2c_exit ( struct flexcop_device * fc ) ;
/* from flexcop-sram.c */
int flexcop_sram_init ( struct flexcop_device * fc ) ;
/* from flexcop-misc.c */
void flexcop_determine_revision ( struct flexcop_device * fc ) ;
2009-03-29 07:46:58 -03:00
void flexcop_device_name ( struct flexcop_device * fc ,
const char * prefix , const char * suffix ) ;
void flexcop_dump_reg ( struct flexcop_device * fc ,
flexcop_ibi_register reg , int num ) ;
2005-05-16 21:54:10 -07:00
/* from flexcop-hw-filter.c */
2009-03-29 07:46:58 -03:00
int flexcop_pid_feed_control ( struct flexcop_device * fc ,
struct dvb_demux_feed * dvbdmxfeed , int onoff ) ;
2005-05-16 21:54:10 -07:00
void flexcop_hw_filter_init ( struct flexcop_device * fc ) ;
void flexcop_smc_ctrl ( struct flexcop_device * fc , int onoff ) ;
void flexcop_set_mac_filter ( struct flexcop_device * fc , u8 mac [ 6 ] ) ;
void flexcop_mac_filter_ctrl ( struct flexcop_device * fc , int onoff ) ;
# endif