123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- /*
- * 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;
- unsigned char __iomem *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), \
- 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))
- /****************************************************************************/
- #endif
|