162306a36Sopenharmony_ci/*
262306a36Sopenharmony_ci * dvb_net.h
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Copyright (C) 2001 Ralph Metzler for convergence integrated media GmbH
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * This program is free software; you can redistribute it and/or
762306a36Sopenharmony_ci * modify it under the terms of the GNU Lesser General Public License
862306a36Sopenharmony_ci * as published by the Free Software Foundation; either version 2.1
962306a36Sopenharmony_ci * of the License, or (at your option) any later version.
1062306a36Sopenharmony_ci *
1162306a36Sopenharmony_ci * This program is distributed in the hope that it will be useful,
1262306a36Sopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
1362306a36Sopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1462306a36Sopenharmony_ci * GNU General Public License for more details.
1562306a36Sopenharmony_ci *
1662306a36Sopenharmony_ci */
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci#ifndef _DVB_NET_H_
1962306a36Sopenharmony_ci#define _DVB_NET_H_
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci#include <linux/module.h>
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci#include <media/dvbdev.h>
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_cistruct net_device;
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci#define DVB_NET_DEVICES_MAX 10
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci#ifdef CONFIG_DVB_NET
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci/**
3262306a36Sopenharmony_ci * struct dvb_net - describes a DVB network interface
3362306a36Sopenharmony_ci *
3462306a36Sopenharmony_ci * @dvbdev:		pointer to &struct dvb_device.
3562306a36Sopenharmony_ci * @device:		array of pointers to &struct net_device.
3662306a36Sopenharmony_ci * @state:		array of integers to each net device. A value
3762306a36Sopenharmony_ci *			different than zero means that the interface is
3862306a36Sopenharmony_ci *			in usage.
3962306a36Sopenharmony_ci * @exit:		flag to indicate when the device is being removed.
4062306a36Sopenharmony_ci * @demux:		pointer to &struct dmx_demux.
4162306a36Sopenharmony_ci * @ioctl_mutex:	protect access to this struct.
4262306a36Sopenharmony_ci * @remove_mutex:	mutex that avoids a race condition between a callback
4362306a36Sopenharmony_ci *			called when the hardware is disconnected and the
4462306a36Sopenharmony_ci *			file_operations of dvb_net.
4562306a36Sopenharmony_ci *
4662306a36Sopenharmony_ci * Currently, the core supports up to %DVB_NET_DEVICES_MAX (10) network
4762306a36Sopenharmony_ci * devices.
4862306a36Sopenharmony_ci */
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_cistruct dvb_net {
5162306a36Sopenharmony_ci	struct dvb_device *dvbdev;
5262306a36Sopenharmony_ci	struct net_device *device[DVB_NET_DEVICES_MAX];
5362306a36Sopenharmony_ci	int state[DVB_NET_DEVICES_MAX];
5462306a36Sopenharmony_ci	unsigned int exit:1;
5562306a36Sopenharmony_ci	struct dmx_demux *demux;
5662306a36Sopenharmony_ci	struct mutex ioctl_mutex;
5762306a36Sopenharmony_ci	struct mutex remove_mutex;
5862306a36Sopenharmony_ci};
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci/**
6162306a36Sopenharmony_ci * dvb_net_init - nitializes a digital TV network device and registers it.
6262306a36Sopenharmony_ci *
6362306a36Sopenharmony_ci * @adap:	pointer to &struct dvb_adapter.
6462306a36Sopenharmony_ci * @dvbnet:	pointer to &struct dvb_net.
6562306a36Sopenharmony_ci * @dmxdemux:	pointer to &struct dmx_demux.
6662306a36Sopenharmony_ci */
6762306a36Sopenharmony_ciint dvb_net_init(struct dvb_adapter *adap, struct dvb_net *dvbnet,
6862306a36Sopenharmony_ci		  struct dmx_demux *dmxdemux);
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci/**
7162306a36Sopenharmony_ci * dvb_net_release - releases a digital TV network device and unregisters it.
7262306a36Sopenharmony_ci *
7362306a36Sopenharmony_ci * @dvbnet:	pointer to &struct dvb_net.
7462306a36Sopenharmony_ci */
7562306a36Sopenharmony_civoid dvb_net_release(struct dvb_net *dvbnet);
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci#else
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_cistruct dvb_net {
8062306a36Sopenharmony_ci	struct dvb_device *dvbdev;
8162306a36Sopenharmony_ci};
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_cistatic inline void dvb_net_release(struct dvb_net *dvbnet)
8462306a36Sopenharmony_ci{
8562306a36Sopenharmony_ci}
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_cistatic inline int dvb_net_init(struct dvb_adapter *adap,
8862306a36Sopenharmony_ci			       struct dvb_net *dvbnet, struct dmx_demux *dmx)
8962306a36Sopenharmony_ci{
9062306a36Sopenharmony_ci	return 0;
9162306a36Sopenharmony_ci}
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ci#endif /* ifdef CONFIG_DVB_NET */
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci#endif
96