PM / sleep: Asynchronous threads for suspend_noirq
[linux/fpc-iii.git] / drivers / media / pci / ddbridge / ddbridge.h
blob8b1b41d2a52d4d465b233d57755fc724d5f9ab56
1 /*
2 * ddbridge.h: Digital Devices PCIe bridge driver
4 * Copyright (C) 2010-2011 Digital Devices GmbH
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * version 2 only, as published by the Free Software Foundation.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20 * 02110-1301, USA
21 * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
24 #ifndef _DDBRIDGE_H_
25 #define _DDBRIDGE_H_
27 #include <linux/types.h>
28 #include <linux/sched.h>
29 #include <linux/interrupt.h>
30 #include <linux/i2c.h>
31 #include <linux/mutex.h>
32 #include <asm/dma.h>
33 #include <linux/dvb/frontend.h>
34 #include <linux/dvb/ca.h>
35 #include <linux/socket.h>
37 #include "dmxdev.h"
38 #include "dvbdev.h"
39 #include "dvb_demux.h"
40 #include "dvb_frontend.h"
41 #include "dvb_ringbuffer.h"
42 #include "dvb_ca_en50221.h"
43 #include "dvb_net.h"
44 #include "cxd2099.h"
46 #define DDB_MAX_I2C 4
47 #define DDB_MAX_PORT 4
48 #define DDB_MAX_INPUT 8
49 #define DDB_MAX_OUTPUT 4
51 struct ddb_info {
52 int type;
53 #define DDB_NONE 0
54 #define DDB_OCTOPUS 1
55 char *name;
56 int port_num;
57 u32 port_type[DDB_MAX_PORT];
60 /* DMA_SIZE MUST be divisible by 188 and 128 !!! */
62 #define INPUT_DMA_MAX_BUFS 32 /* hardware table limit */
63 #define INPUT_DMA_BUFS 8
64 #define INPUT_DMA_SIZE (128*47*21)
66 #define OUTPUT_DMA_MAX_BUFS 32
67 #define OUTPUT_DMA_BUFS 8
68 #define OUTPUT_DMA_SIZE (128*47*21)
70 struct ddb;
71 struct ddb_port;
73 struct ddb_input {
74 struct ddb_port *port;
75 u32 nr;
76 int attached;
78 dma_addr_t pbuf[INPUT_DMA_MAX_BUFS];
79 u8 *vbuf[INPUT_DMA_MAX_BUFS];
80 u32 dma_buf_num;
81 u32 dma_buf_size;
83 struct tasklet_struct tasklet;
84 spinlock_t lock;
85 wait_queue_head_t wq;
86 int running;
87 u32 stat;
88 u32 cbuf;
89 u32 coff;
91 struct dvb_adapter adap;
92 struct dvb_device *dev;
93 struct dvb_frontend *fe;
94 struct dvb_frontend *fe2;
95 struct dmxdev dmxdev;
96 struct dvb_demux demux;
97 struct dvb_net dvbnet;
98 struct dmx_frontend hw_frontend;
99 struct dmx_frontend mem_frontend;
100 int users;
101 int (*gate_ctrl)(struct dvb_frontend *, int);
104 struct ddb_output {
105 struct ddb_port *port;
106 u32 nr;
107 dma_addr_t pbuf[OUTPUT_DMA_MAX_BUFS];
108 u8 *vbuf[OUTPUT_DMA_MAX_BUFS];
109 u32 dma_buf_num;
110 u32 dma_buf_size;
111 struct tasklet_struct tasklet;
112 spinlock_t lock;
113 wait_queue_head_t wq;
114 int running;
115 u32 stat;
116 u32 cbuf;
117 u32 coff;
119 struct dvb_adapter adap;
120 struct dvb_device *dev;
123 struct ddb_i2c {
124 struct ddb *dev;
125 u32 nr;
126 struct i2c_adapter adap;
127 struct i2c_adapter adap2;
128 u32 regs;
129 u32 rbuf;
130 u32 wbuf;
131 int done;
132 wait_queue_head_t wq;
135 struct ddb_port {
136 struct ddb *dev;
137 u32 nr;
138 struct ddb_i2c *i2c;
139 struct mutex i2c_gate_lock;
140 u32 class;
141 #define DDB_PORT_NONE 0
142 #define DDB_PORT_CI 1
143 #define DDB_PORT_TUNER 2
144 u32 type;
145 #define DDB_TUNER_NONE 0
146 #define DDB_TUNER_DVBS_ST 1
147 #define DDB_TUNER_DVBS_ST_AA 2
148 #define DDB_TUNER_DVBCT_TR 16
149 #define DDB_TUNER_DVBCT_ST 17
150 u32 adr;
152 struct ddb_input *input[2];
153 struct ddb_output *output;
154 struct dvb_ca_en50221 *en;
157 struct ddb {
158 struct pci_dev *pdev;
159 unsigned char *regs;
160 struct ddb_port port[DDB_MAX_PORT];
161 struct ddb_i2c i2c[DDB_MAX_I2C];
162 struct ddb_input input[DDB_MAX_INPUT];
163 struct ddb_output output[DDB_MAX_OUTPUT];
165 struct device *ddb_dev;
166 int nr;
167 u8 iobuf[1028];
169 struct ddb_info *info;
170 int msi;
173 /****************************************************************************/
175 #define ddbwritel(_val, _adr) writel((_val), \
176 (char *) (dev->regs+(_adr)))
177 #define ddbreadl(_adr) readl((char *) (dev->regs+(_adr)))
178 #define ddbcpyto(_adr, _src, _count) memcpy_toio((char *) \
179 (dev->regs+(_adr)), (_src), (_count))
180 #define ddbcpyfrom(_dst, _adr, _count) memcpy_fromio((_dst), (char *) \
181 (dev->regs+(_adr)), (_count))
183 /****************************************************************************/
185 #endif