xref: /openbmc/linux/include/media/dvb_net.h (revision 4172385b)
1fada1935SMauro Carvalho Chehab /*
2fada1935SMauro Carvalho Chehab  * dvb_net.h
3fada1935SMauro Carvalho Chehab  *
4fada1935SMauro Carvalho Chehab  * Copyright (C) 2001 Ralph Metzler for convergence integrated media GmbH
5fada1935SMauro Carvalho Chehab  *
6fada1935SMauro Carvalho Chehab  * This program is free software; you can redistribute it and/or
7fada1935SMauro Carvalho Chehab  * modify it under the terms of the GNU Lesser General Public License
8fada1935SMauro Carvalho Chehab  * as published by the Free Software Foundation; either version 2.1
9fada1935SMauro Carvalho Chehab  * of the License, or (at your option) any later version.
10fada1935SMauro Carvalho Chehab  *
11fada1935SMauro Carvalho Chehab  * This program is distributed in the hope that it will be useful,
12fada1935SMauro Carvalho Chehab  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13fada1935SMauro Carvalho Chehab  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14fada1935SMauro Carvalho Chehab  * GNU General Public License for more details.
15fada1935SMauro Carvalho Chehab  *
16fada1935SMauro Carvalho Chehab  */
17fada1935SMauro Carvalho Chehab 
18fada1935SMauro Carvalho Chehab #ifndef _DVB_NET_H_
19fada1935SMauro Carvalho Chehab #define _DVB_NET_H_
20fada1935SMauro Carvalho Chehab 
21fada1935SMauro Carvalho Chehab #include <linux/module.h>
22fada1935SMauro Carvalho Chehab 
23fada1935SMauro Carvalho Chehab #include <media/dvbdev.h>
24fada1935SMauro Carvalho Chehab 
25de163422SJakub Kicinski struct net_device;
26de163422SJakub Kicinski 
27fada1935SMauro Carvalho Chehab #define DVB_NET_DEVICES_MAX 10
28fada1935SMauro Carvalho Chehab 
29fada1935SMauro Carvalho Chehab #ifdef CONFIG_DVB_NET
30fada1935SMauro Carvalho Chehab 
31fada1935SMauro Carvalho Chehab /**
32fada1935SMauro Carvalho Chehab  * struct dvb_net - describes a DVB network interface
33fada1935SMauro Carvalho Chehab  *
34fada1935SMauro Carvalho Chehab  * @dvbdev:		pointer to &struct dvb_device.
35fada1935SMauro Carvalho Chehab  * @device:		array of pointers to &struct net_device.
36fada1935SMauro Carvalho Chehab  * @state:		array of integers to each net device. A value
37fada1935SMauro Carvalho Chehab  *			different than zero means that the interface is
38fada1935SMauro Carvalho Chehab  *			in usage.
39fada1935SMauro Carvalho Chehab  * @exit:		flag to indicate when the device is being removed.
40fada1935SMauro Carvalho Chehab  * @demux:		pointer to &struct dmx_demux.
41fada1935SMauro Carvalho Chehab  * @ioctl_mutex:	protect access to this struct.
42*4172385bSHyunwoo Kim  * @remove_mutex:	mutex that avoids a race condition between a callback
43*4172385bSHyunwoo Kim  *			called when the hardware is disconnected and the
44*4172385bSHyunwoo Kim  *			file_operations of dvb_net.
45fada1935SMauro Carvalho Chehab  *
46fada1935SMauro Carvalho Chehab  * Currently, the core supports up to %DVB_NET_DEVICES_MAX (10) network
47fada1935SMauro Carvalho Chehab  * devices.
48fada1935SMauro Carvalho Chehab  */
49fada1935SMauro Carvalho Chehab 
50fada1935SMauro Carvalho Chehab struct dvb_net {
51fada1935SMauro Carvalho Chehab 	struct dvb_device *dvbdev;
52fada1935SMauro Carvalho Chehab 	struct net_device *device[DVB_NET_DEVICES_MAX];
53fada1935SMauro Carvalho Chehab 	int state[DVB_NET_DEVICES_MAX];
54fada1935SMauro Carvalho Chehab 	unsigned int exit:1;
55fada1935SMauro Carvalho Chehab 	struct dmx_demux *demux;
56fada1935SMauro Carvalho Chehab 	struct mutex ioctl_mutex;
57*4172385bSHyunwoo Kim 	struct mutex remove_mutex;
58fada1935SMauro Carvalho Chehab };
59fada1935SMauro Carvalho Chehab 
60fada1935SMauro Carvalho Chehab /**
61fada1935SMauro Carvalho Chehab  * dvb_net_init - nitializes a digital TV network device and registers it.
62fada1935SMauro Carvalho Chehab  *
63fada1935SMauro Carvalho Chehab  * @adap:	pointer to &struct dvb_adapter.
64fada1935SMauro Carvalho Chehab  * @dvbnet:	pointer to &struct dvb_net.
65fada1935SMauro Carvalho Chehab  * @dmxdemux:	pointer to &struct dmx_demux.
66fada1935SMauro Carvalho Chehab  */
67fada1935SMauro Carvalho Chehab int dvb_net_init(struct dvb_adapter *adap, struct dvb_net *dvbnet,
68fada1935SMauro Carvalho Chehab 		  struct dmx_demux *dmxdemux);
69fada1935SMauro Carvalho Chehab 
70fada1935SMauro Carvalho Chehab /**
71fada1935SMauro Carvalho Chehab  * dvb_net_release - releases a digital TV network device and unregisters it.
72fada1935SMauro Carvalho Chehab  *
73fada1935SMauro Carvalho Chehab  * @dvbnet:	pointer to &struct dvb_net.
74fada1935SMauro Carvalho Chehab  */
75fada1935SMauro Carvalho Chehab void dvb_net_release(struct dvb_net *dvbnet);
76fada1935SMauro Carvalho Chehab 
77fada1935SMauro Carvalho Chehab #else
78fada1935SMauro Carvalho Chehab 
79fada1935SMauro Carvalho Chehab struct dvb_net {
80fada1935SMauro Carvalho Chehab 	struct dvb_device *dvbdev;
81fada1935SMauro Carvalho Chehab };
82fada1935SMauro Carvalho Chehab 
dvb_net_release(struct dvb_net * dvbnet)83fada1935SMauro Carvalho Chehab static inline void dvb_net_release(struct dvb_net *dvbnet)
84fada1935SMauro Carvalho Chehab {
85fada1935SMauro Carvalho Chehab }
86fada1935SMauro Carvalho Chehab 
dvb_net_init(struct dvb_adapter * adap,struct dvb_net * dvbnet,struct dmx_demux * dmx)87fada1935SMauro Carvalho Chehab static inline int dvb_net_init(struct dvb_adapter *adap,
88fada1935SMauro Carvalho Chehab 			       struct dvb_net *dvbnet, struct dmx_demux *dmx)
89fada1935SMauro Carvalho Chehab {
90fada1935SMauro Carvalho Chehab 	return 0;
91fada1935SMauro Carvalho Chehab }
92fada1935SMauro Carvalho Chehab 
93fada1935SMauro Carvalho Chehab #endif /* ifdef CONFIG_DVB_NET */
94fada1935SMauro Carvalho Chehab 
95fada1935SMauro Carvalho Chehab #endif
96