Blame view

include/media/dmxdev.h 5.89 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  /*
   * dmxdev.h
   *
   * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
   *                    for convergence integrated media GmbH
   *
   * This program is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public License
   * as published by the Free Software Foundation; either version 2.1
   * of the License, or (at your option) any later version.
   *
   * 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.
   *
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
17
18
19
20
21
22
23
24
   */
  
  #ifndef _DMXDEV_H_
  #define _DMXDEV_H_
  
  #include <linux/types.h>
  #include <linux/spinlock.h>
  #include <linux/kernel.h>
b2409b65d   Mauro Carvalho Chehab   [media] remove in...
25
  #include <linux/time.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
26
27
28
29
  #include <linux/timer.h>
  #include <linux/wait.h>
  #include <linux/fs.h>
  #include <linux/string.h>
3593cab5d   Ingo Molnar   V4L/DVB (3318b): ...
30
  #include <linux/mutex.h>
5a0e3ad6a   Tejun Heo   include cleanup: ...
31
  #include <linux/slab.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
32
33
  
  #include <linux/dvb/dmx.h>
fada19355   Mauro Carvalho Chehab   media: move dvb k...
34
35
36
37
  #include <media/dvbdev.h>
  #include <media/demux.h>
  #include <media/dvb_ringbuffer.h>
  #include <media/dvb_vb2.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
38

e7446385f   Mauro Carvalho Chehab   media: dmxdev.h: ...
39
40
41
42
43
44
45
  /**
   * enum dmxdev_type - type of demux filter type.
   *
   * @DMXDEV_TYPE_NONE:	no filter set.
   * @DMXDEV_TYPE_SEC:	section filter.
   * @DMXDEV_TYPE_PES:	Program Elementary Stream (PES) filter.
   */
bbad7dc54   Andreas Oberritter   V4L/DVB (3437): F...
46
  enum dmxdev_type {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
47
48
49
50
  	DMXDEV_TYPE_NONE,
  	DMXDEV_TYPE_SEC,
  	DMXDEV_TYPE_PES,
  };
e7446385f   Mauro Carvalho Chehab   media: dmxdev.h: ...
51
52
53
54
55
56
57
58
59
60
61
62
63
64
  /**
   * enum dmxdev_state - state machine for the dmxdev.
   *
   * @DMXDEV_STATE_FREE:		indicates that the filter is freed.
   * @DMXDEV_STATE_ALLOCATED:	indicates that the filter was allocated
   *				to be used.
   * @DMXDEV_STATE_SET:		indicates that the filter parameters are set.
   * @DMXDEV_STATE_GO:		indicates that the filter is running.
   * @DMXDEV_STATE_DONE:		indicates that a packet was already filtered
   *				and the filter is now disabled.
   *				Set only if %DMX_ONESHOT. See
   *				&dmx_sct_filter_params.
   * @DMXDEV_STATE_TIMEDOUT:	Indicates a timeout condition.
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
65
66
67
68
69
70
71
72
  enum dmxdev_state {
  	DMXDEV_STATE_FREE,
  	DMXDEV_STATE_ALLOCATED,
  	DMXDEV_STATE_SET,
  	DMXDEV_STATE_GO,
  	DMXDEV_STATE_DONE,
  	DMXDEV_STATE_TIMEDOUT
  };
e7446385f   Mauro Carvalho Chehab   media: dmxdev.h: ...
73
74
75
76
77
78
79
  /**
   * struct dmxdev_feed - digital TV dmxdev feed
   *
   * @pid:	Program ID to be filtered
   * @ts:		pointer to &struct dmx_ts_feed
   * @next:	&struct list_head pointing to the next feed.
   */
1cb662a31   Andreas Oberritter   V4L/DVB (12275): ...
80
81
82
83
84
  struct dmxdev_feed {
  	u16 pid;
  	struct dmx_ts_feed *ts;
  	struct list_head next;
  };
e7446385f   Mauro Carvalho Chehab   media: dmxdev.h: ...
85
86
87
  /**
   * struct dmxdev_filter - digital TV dmxdev filter
   *
3483d3aeb   Mauro Carvalho Chehab   media: dmxdev: de...
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
   * @filter:	a union describing a dmxdev filter.
   *		Currently used only for section filters.
   * @filter.sec: a &struct dmx_section_filter pointer.
   *		For section filter only.
   * @feed:	a union describing a dmxdev feed.
   *		Depending on the filter type, it can be either
   *		@feed.ts or @feed.sec.
   * @feed.ts:	a &struct list_head list.
   *		For TS and PES feeds.
   * @feed.sec:	a &struct dmx_section_feed pointer.
   *		For section feed only.
   * @params:	a union describing dmxdev filter parameters.
   *		Depending on the filter type, it can be either
   *		@params.sec or @params.pes.
   * @params.sec:	a &struct dmx_sct_filter_params embedded struct.
   *		For section filter only.
   * @params.pes:	a &struct dmx_pes_filter_params embedded struct.
   *		For PES filter only.
e7446385f   Mauro Carvalho Chehab   media: dmxdev.h: ...
106
107
108
109
   * @type:	type of the dmxdev filter, as defined by &enum dmxdev_type.
   * @state:	state of the dmxdev filter, as defined by &enum dmxdev_state.
   * @dev:	pointer to &struct dmxdev.
   * @buffer:	an embedded &struct dvb_ringbuffer buffer.
9f577d6db   Mauro Carvalho Chehab   media: dvb kAPI d...
110
   * @vb2_ctx:	control struct for VB2 handler
e7446385f   Mauro Carvalho Chehab   media: dmxdev.h: ...
111
112
113
114
115
116
117
118
119
   * @mutex:	protects the access to &struct dmxdev_filter.
   * @timer:	&struct timer_list embedded timer, used to check for
   *		feed timeouts.
   *		Only for section filter.
   * @todo:	index for the @secheader.
   *		Only for section filter.
   * @secheader:	buffer cache to parse the section header.
   *		Only for section filter.
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
120
  struct dmxdev_filter {
afd1a0c9a   Mauro Carvalho Chehab   [PATCH] V4L/DVB: ...
121
122
  	union {
  		struct dmx_section_filter *sec;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
123
  	} filter;
afd1a0c9a   Mauro Carvalho Chehab   [PATCH] V4L/DVB: ...
124
  	union {
1cb662a31   Andreas Oberritter   V4L/DVB (12275): ...
125
126
  		/* list of TS and PES feeds (struct dmxdev_feed) */
  		struct list_head ts;
afd1a0c9a   Mauro Carvalho Chehab   [PATCH] V4L/DVB: ...
127
  		struct dmx_section_feed *sec;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
128
  	} feed;
afd1a0c9a   Mauro Carvalho Chehab   [PATCH] V4L/DVB: ...
129
130
131
  	union {
  		struct dmx_sct_filter_params sec;
  		struct dmx_pes_filter_params pes;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
132
  	} params;
bbad7dc54   Andreas Oberritter   V4L/DVB (3437): F...
133
  	enum dmxdev_type type;
afd1a0c9a   Mauro Carvalho Chehab   [PATCH] V4L/DVB: ...
134
135
  	enum dmxdev_state state;
  	struct dmxdev *dev;
34731df28   Andreas Oberritter   V4L/DVB (3501): D...
136
  	struct dvb_ringbuffer buffer;
57868acc3   Satendra Singh Thakur   media: videobuf2:...
137
  	struct dvb_vb2_ctx vb2_ctx;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
138

3593cab5d   Ingo Molnar   V4L/DVB (3318b): ...
139
  	struct mutex mutex;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
140

afd1a0c9a   Mauro Carvalho Chehab   [PATCH] V4L/DVB: ...
141
142
143
144
  	/* only for sections */
  	struct timer_list timer;
  	int todo;
  	u8 secheader[3];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
145
  };
e7446385f   Mauro Carvalho Chehab   media: dmxdev.h: ...
146
147
148
149
150
151
152
153
154
155
156
  /**
   * struct dmxdev - Describes a digital TV demux device.
   *
   * @dvbdev:		pointer to &struct dvb_device associated with
   *			the demux device node.
   * @dvr_dvbdev:		pointer to &struct dvb_device associated with
   *			the dvr device node.
   * @filter:		pointer to &struct dmxdev_filter.
   * @demux:		pointer to &struct dmx_demux.
   * @filternum:		number of filters.
   * @capabilities:	demux capabilities as defined by &enum dmx_demux_caps.
0b23498aa   Mauro Carvalho Chehab   media: dmxdev: Fi...
157
   * @may_do_mmap:	flag used to indicate if the device may do mmap.
e7446385f   Mauro Carvalho Chehab   media: dmxdev.h: ...
158
159
160
   * @exit:		flag to indicate that the demux is being released.
   * @dvr_orig_fe:	pointer to &struct dmx_frontend.
   * @dvr_buffer:		embedded &struct dvb_ringbuffer for DVB output.
9f577d6db   Mauro Carvalho Chehab   media: dvb kAPI d...
161
   * @dvr_vb2_ctx:	control struct for VB2 handler
e7446385f   Mauro Carvalho Chehab   media: dmxdev.h: ...
162
163
164
   * @mutex:		protects the usage of this structure.
   * @lock:		protects access to &dmxdev->filter->data.
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
165
166
167
  struct dmxdev {
  	struct dvb_device *dvbdev;
  	struct dvb_device *dvr_dvbdev;
afd1a0c9a   Mauro Carvalho Chehab   [PATCH] V4L/DVB: ...
168
  	struct dmxdev_filter *filter;
afd1a0c9a   Mauro Carvalho Chehab   [PATCH] V4L/DVB: ...
169
  	struct dmx_demux *demux;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
170

afd1a0c9a   Mauro Carvalho Chehab   [PATCH] V4L/DVB: ...
171
172
  	int filternum;
  	int capabilities;
57861b432   Markus Rechberger   V4L/DVB (5511): F...
173

0b23498aa   Mauro Carvalho Chehab   media: dmxdev: Fi...
174
  	unsigned int may_do_mmap:1;
57861b432   Markus Rechberger   V4L/DVB (5511): F...
175
  	unsigned int exit:1;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
176
  #define DMXDEV_CAP_DUPLEX 1
afd1a0c9a   Mauro Carvalho Chehab   [PATCH] V4L/DVB: ...
177
  	struct dmx_frontend *dvr_orig_fe;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
178

34731df28   Andreas Oberritter   V4L/DVB (3501): D...
179
  	struct dvb_ringbuffer dvr_buffer;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
180
  #define DVR_BUFFER_SIZE (10*188*1024)
57868acc3   Satendra Singh Thakur   media: videobuf2:...
181
  	struct dvb_vb2_ctx dvr_vb2_ctx;
3593cab5d   Ingo Molnar   V4L/DVB (3318b): ...
182
  	struct mutex mutex;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
183
184
  	spinlock_t lock;
  };
e7446385f   Mauro Carvalho Chehab   media: dmxdev.h: ...
185
186
187
188
189
190
191
192
  /**
   * dvb_dmxdev_init - initializes a digital TV demux and registers both demux
   *	and DVR devices.
   *
   * @dmxdev: pointer to &struct dmxdev.
   * @adap: pointer to &struct dvb_adapter.
   */
  int dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *adap);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
193

e7446385f   Mauro Carvalho Chehab   media: dmxdev.h: ...
194
195
196
197
198
  /**
   * dvb_dmxdev_release - releases a digital TV demux and unregisters it.
   *
   * @dmxdev: pointer to &struct dmxdev.
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
199
200
201
  void dvb_dmxdev_release(struct dmxdev *dmxdev);
  
  #endif /* _DMXDEV_H_ */