]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - drivers/media/pci/ddbridge/ddbridge.h
Merge branches 'for-4.11/upstream-fixes', 'for-4.12/accutouch', 'for-4.12/cp2112...
[mirror_ubuntu-artful-kernel.git] / drivers / media / pci / ddbridge / ddbridge.h
CommitLineData
ccad0457
RM
1/*
2 * ddbridge.h: Digital Devices PCIe bridge driver
3 *
4 * Copyright (C) 2010-2011 Digital Devices GmbH
5 *
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.
9 *
10 *
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.
15 *
bcb63314
SA
16 * To obtain the license, point your browser to
17 * http://www.gnu.org/copyleft/gpl.html
ccad0457
RM
18 */
19
20#ifndef _DDBRIDGE_H_
21#define _DDBRIDGE_H_
22
23#include <linux/types.h>
24#include <linux/sched.h>
25#include <linux/interrupt.h>
26#include <linux/i2c.h>
27#include <linux/mutex.h>
28#include <asm/dma.h>
29#include <linux/dvb/frontend.h>
30#include <linux/dvb/ca.h>
ccad0457
RM
31#include <linux/socket.h>
32
33#include "dmxdev.h"
34#include "dvbdev.h"
35#include "dvb_demux.h"
36#include "dvb_frontend.h"
37#include "dvb_ringbuffer.h"
38#include "dvb_ca_en50221.h"
39#include "dvb_net.h"
40#include "cxd2099.h"
41
42#define DDB_MAX_I2C 4
43#define DDB_MAX_PORT 4
44#define DDB_MAX_INPUT 8
45#define DDB_MAX_OUTPUT 4
46
47struct ddb_info {
48 int type;
49#define DDB_NONE 0
50#define DDB_OCTOPUS 1
51 char *name;
52 int port_num;
53 u32 port_type[DDB_MAX_PORT];
54};
55
56/* DMA_SIZE MUST be divisible by 188 and 128 !!! */
57
58#define INPUT_DMA_MAX_BUFS 32 /* hardware table limit */
59#define INPUT_DMA_BUFS 8
60#define INPUT_DMA_SIZE (128*47*21)
61
62#define OUTPUT_DMA_MAX_BUFS 32
63#define OUTPUT_DMA_BUFS 8
64#define OUTPUT_DMA_SIZE (128*47*21)
65
66struct ddb;
67struct ddb_port;
68
69struct ddb_input {
70 struct ddb_port *port;
71 u32 nr;
72 int attached;
73
74 dma_addr_t pbuf[INPUT_DMA_MAX_BUFS];
75 u8 *vbuf[INPUT_DMA_MAX_BUFS];
76 u32 dma_buf_num;
77 u32 dma_buf_size;
78
79 struct tasklet_struct tasklet;
80 spinlock_t lock;
81 wait_queue_head_t wq;
82 int running;
83 u32 stat;
84 u32 cbuf;
85 u32 coff;
86
87 struct dvb_adapter adap;
88 struct dvb_device *dev;
89 struct dvb_frontend *fe;
90 struct dvb_frontend *fe2;
91 struct dmxdev dmxdev;
92 struct dvb_demux demux;
93 struct dvb_net dvbnet;
94 struct dmx_frontend hw_frontend;
95 struct dmx_frontend mem_frontend;
96 int users;
97 int (*gate_ctrl)(struct dvb_frontend *, int);
98};
99
100struct ddb_output {
101 struct ddb_port *port;
102 u32 nr;
103 dma_addr_t pbuf[OUTPUT_DMA_MAX_BUFS];
104 u8 *vbuf[OUTPUT_DMA_MAX_BUFS];
105 u32 dma_buf_num;
106 u32 dma_buf_size;
107 struct tasklet_struct tasklet;
108 spinlock_t lock;
109 wait_queue_head_t wq;
110 int running;
111 u32 stat;
112 u32 cbuf;
113 u32 coff;
114
115 struct dvb_adapter adap;
116 struct dvb_device *dev;
117};
118
119struct ddb_i2c {
120 struct ddb *dev;
121 u32 nr;
122 struct i2c_adapter adap;
123 struct i2c_adapter adap2;
124 u32 regs;
125 u32 rbuf;
126 u32 wbuf;
127 int done;
128 wait_queue_head_t wq;
129};
130
131struct ddb_port {
132 struct ddb *dev;
133 u32 nr;
134 struct ddb_i2c *i2c;
135 struct mutex i2c_gate_lock;
136 u32 class;
137#define DDB_PORT_NONE 0
138#define DDB_PORT_CI 1
139#define DDB_PORT_TUNER 2
140 u32 type;
141#define DDB_TUNER_NONE 0
142#define DDB_TUNER_DVBS_ST 1
143#define DDB_TUNER_DVBS_ST_AA 2
144#define DDB_TUNER_DVBCT_TR 16
145#define DDB_TUNER_DVBCT_ST 17
146 u32 adr;
147
148 struct ddb_input *input[2];
149 struct ddb_output *output;
150 struct dvb_ca_en50221 *en;
151};
152
153struct ddb {
154 struct pci_dev *pdev;
b5c00cc5 155 unsigned char __iomem *regs;
ccad0457
RM
156 struct ddb_port port[DDB_MAX_PORT];
157 struct ddb_i2c i2c[DDB_MAX_I2C];
158 struct ddb_input input[DDB_MAX_INPUT];
159 struct ddb_output output[DDB_MAX_OUTPUT];
160
161 struct device *ddb_dev;
162 int nr;
163 u8 iobuf[1028];
164
165 struct ddb_info *info;
166 int msi;
167};
168
169/****************************************************************************/
170
171#define ddbwritel(_val, _adr) writel((_val), \
b5c00cc5
HV
172 dev->regs+(_adr))
173#define ddbreadl(_adr) readl(dev->regs+(_adr))
174#define ddbcpyto(_adr, _src, _count) memcpy_toio(dev->regs+(_adr), (_src), (_count))
175#define ddbcpyfrom(_dst, _adr, _count) memcpy_fromio((_dst), dev->regs+(_adr), (_count))
ccad0457
RM
176
177/****************************************************************************/
178
179#endif