diff options
Diffstat (limited to 'drivers/media/dvb/ddbridge/ddbridge.h')
| -rw-r--r-- | drivers/media/dvb/ddbridge/ddbridge.h | 187 | 
1 files changed, 187 insertions, 0 deletions
| diff --git a/drivers/media/dvb/ddbridge/ddbridge.h b/drivers/media/dvb/ddbridge/ddbridge.h new file mode 100644 index 000000000000..6d14893218f4 --- /dev/null +++ b/drivers/media/dvb/ddbridge/ddbridge.h @@ -0,0 +1,187 @@ +/* + * 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/dvb/video.h> +#include <linux/dvb/audio.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; +	unsigned char         *regs; +	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), \ +				     (char *) (dev->regs+(_adr))) +#define ddbreadl(_adr)               readl((char *) (dev->regs+(_adr))) +#define ddbcpyto(_adr, _src, _count) memcpy_toio((char *)	\ +				     (dev->regs+(_adr)), (_src), (_count)) +#define ddbcpyfrom(_dst, _adr, _count) memcpy_fromio((_dst), (char *) \ +				       (dev->regs+(_adr)), (_count)) + +/****************************************************************************/ + +#endif | 
