2011-07-04 01:23:11 +04:00
/*
* ddbridge . h : Digital Devices PCIe bridge driver
*
* Copyright ( C ) 2010 - 2011 Digital Devices GmbH
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* version 2 only , as published by the Free Software Foundation .
*
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA
* 02110 - 1301 , USA
* Or , point your browser to http : //www.gnu.org/copyleft/gpl.html
*/
# ifndef _DDBRIDGE_H_
# define _DDBRIDGE_H_
# include <linux/types.h>
# include <linux/sched.h>
# include <linux/interrupt.h>
# include <linux/i2c.h>
# include <linux/mutex.h>
# include <asm/dma.h>
# include <linux/dvb/frontend.h>
# include <linux/dvb/ca.h>
# include <linux/socket.h>
# include "dmxdev.h"
# include "dvbdev.h"
# include "dvb_demux.h"
# include "dvb_frontend.h"
# include "dvb_ringbuffer.h"
# include "dvb_ca_en50221.h"
# include "dvb_net.h"
# include "cxd2099.h"
# define DDB_MAX_I2C 4
# define DDB_MAX_PORT 4
# define DDB_MAX_INPUT 8
# define DDB_MAX_OUTPUT 4
struct ddb_info {
int type ;
# define DDB_NONE 0
# define DDB_OCTOPUS 1
char * name ;
int port_num ;
u32 port_type [ DDB_MAX_PORT ] ;
} ;
/* DMA_SIZE MUST be divisible by 188 and 128 !!! */
# define INPUT_DMA_MAX_BUFS 32 /* hardware table limit */
# define INPUT_DMA_BUFS 8
# define INPUT_DMA_SIZE (128*47*21)
# define OUTPUT_DMA_MAX_BUFS 32
# define OUTPUT_DMA_BUFS 8
# define OUTPUT_DMA_SIZE (128*47*21)
struct ddb ;
struct ddb_port ;
struct ddb_input {
struct ddb_port * port ;
u32 nr ;
int attached ;
dma_addr_t pbuf [ INPUT_DMA_MAX_BUFS ] ;
u8 * vbuf [ INPUT_DMA_MAX_BUFS ] ;
u32 dma_buf_num ;
u32 dma_buf_size ;
struct tasklet_struct tasklet ;
spinlock_t lock ;
wait_queue_head_t wq ;
int running ;
u32 stat ;
u32 cbuf ;
u32 coff ;
struct dvb_adapter adap ;
struct dvb_device * dev ;
struct dvb_frontend * fe ;
struct dvb_frontend * fe2 ;
struct dmxdev dmxdev ;
struct dvb_demux demux ;
struct dvb_net dvbnet ;
struct dmx_frontend hw_frontend ;
struct dmx_frontend mem_frontend ;
int users ;
int ( * gate_ctrl ) ( struct dvb_frontend * , int ) ;
} ;
struct ddb_output {
struct ddb_port * port ;
u32 nr ;
dma_addr_t pbuf [ OUTPUT_DMA_MAX_BUFS ] ;
u8 * vbuf [ OUTPUT_DMA_MAX_BUFS ] ;
u32 dma_buf_num ;
u32 dma_buf_size ;
struct tasklet_struct tasklet ;
spinlock_t lock ;
wait_queue_head_t wq ;
int running ;
u32 stat ;
u32 cbuf ;
u32 coff ;
struct dvb_adapter adap ;
struct dvb_device * dev ;
} ;
struct ddb_i2c {
struct ddb * dev ;
u32 nr ;
struct i2c_adapter adap ;
struct i2c_adapter adap2 ;
u32 regs ;
u32 rbuf ;
u32 wbuf ;
int done ;
wait_queue_head_t wq ;
} ;
struct ddb_port {
struct ddb * dev ;
u32 nr ;
struct ddb_i2c * i2c ;
struct mutex i2c_gate_lock ;
u32 class ;
# define DDB_PORT_NONE 0
# define DDB_PORT_CI 1
# define DDB_PORT_TUNER 2
u32 type ;
# define DDB_TUNER_NONE 0
# define DDB_TUNER_DVBS_ST 1
# define DDB_TUNER_DVBS_ST_AA 2
# define DDB_TUNER_DVBCT_TR 16
# define DDB_TUNER_DVBCT_ST 17
u32 adr ;
struct ddb_input * input [ 2 ] ;
struct ddb_output * output ;
struct dvb_ca_en50221 * en ;
} ;
struct ddb {
struct pci_dev * pdev ;
2014-08-21 00:25:00 +04:00
unsigned char __iomem * regs ;
2011-07-04 01:23:11 +04:00
struct ddb_port port [ DDB_MAX_PORT ] ;
struct ddb_i2c i2c [ DDB_MAX_I2C ] ;
struct ddb_input input [ DDB_MAX_INPUT ] ;
struct ddb_output output [ DDB_MAX_OUTPUT ] ;
struct device * ddb_dev ;
int nr ;
u8 iobuf [ 1028 ] ;
struct ddb_info * info ;
int msi ;
} ;
/****************************************************************************/
# define ddbwritel(_val, _adr) writel((_val), \
2014-08-21 00:25:00 +04:00
dev - > regs + ( _adr ) )
# define ddbreadl(_adr) readl(dev->regs+(_adr))
# define ddbcpyto(_adr, _src, _count) memcpy_toio(dev->regs+(_adr), (_src), (_count))
# define ddbcpyfrom(_dst, _adr, _count) memcpy_fromio((_dst), dev->regs+(_adr), (_count))
2011-07-04 01:23:11 +04:00
/****************************************************************************/
# endif