18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#ifndef _VIDEOBUF2_DVB_H_
38c2ecf20Sopenharmony_ci#define	_VIDEOBUF2_DVB_H_
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#include <media/dvbdev.h>
68c2ecf20Sopenharmony_ci#include <media/dmxdev.h>
78c2ecf20Sopenharmony_ci#include <media/dvb_demux.h>
88c2ecf20Sopenharmony_ci#include <media/dvb_net.h>
98c2ecf20Sopenharmony_ci#include <media/dvb_frontend.h>
108c2ecf20Sopenharmony_ci#include <media/videobuf2-v4l2.h>
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci/* We don't actually need to include media-device.h here */
138c2ecf20Sopenharmony_cistruct media_device;
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci/*
168c2ecf20Sopenharmony_ci * TODO: This header file should be replaced with videobuf2-core.h
178c2ecf20Sopenharmony_ci * Currently, vb2_thread is not a stuff of videobuf2-core,
188c2ecf20Sopenharmony_ci * since vb2_thread has many dependencies on videobuf2-v4l2.
198c2ecf20Sopenharmony_ci */
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_cistruct vb2_dvb {
228c2ecf20Sopenharmony_ci	/* filling that the job of the driver */
238c2ecf20Sopenharmony_ci	char			*name;
248c2ecf20Sopenharmony_ci	struct dvb_frontend	*frontend;
258c2ecf20Sopenharmony_ci	struct vb2_queue	dvbq;
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ci	/* video-buf-dvb state info */
288c2ecf20Sopenharmony_ci	struct mutex		lock;
298c2ecf20Sopenharmony_ci	int			nfeeds;
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ci	/* vb2_dvb_(un)register manages this */
328c2ecf20Sopenharmony_ci	struct dvb_demux	demux;
338c2ecf20Sopenharmony_ci	struct dmxdev		dmxdev;
348c2ecf20Sopenharmony_ci	struct dmx_frontend	fe_hw;
358c2ecf20Sopenharmony_ci	struct dmx_frontend	fe_mem;
368c2ecf20Sopenharmony_ci	struct dvb_net		net;
378c2ecf20Sopenharmony_ci};
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_cistruct vb2_dvb_frontend {
408c2ecf20Sopenharmony_ci	struct list_head felist;
418c2ecf20Sopenharmony_ci	int id;
428c2ecf20Sopenharmony_ci	struct vb2_dvb dvb;
438c2ecf20Sopenharmony_ci};
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_cistruct vb2_dvb_frontends {
468c2ecf20Sopenharmony_ci	struct list_head felist;
478c2ecf20Sopenharmony_ci	struct mutex lock;
488c2ecf20Sopenharmony_ci	struct dvb_adapter adapter;
498c2ecf20Sopenharmony_ci	int active_fe_id; /* Indicates which frontend in the felist is in use */
508c2ecf20Sopenharmony_ci	int gate; /* Frontend with gate control 0=!MFE,1=fe0,2=fe1 etc */
518c2ecf20Sopenharmony_ci};
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ciint vb2_dvb_register_bus(struct vb2_dvb_frontends *f,
548c2ecf20Sopenharmony_ci			 struct module *module,
558c2ecf20Sopenharmony_ci			 void *adapter_priv,
568c2ecf20Sopenharmony_ci			 struct device *device,
578c2ecf20Sopenharmony_ci			 struct media_device *mdev,
588c2ecf20Sopenharmony_ci			 short *adapter_nr,
598c2ecf20Sopenharmony_ci			 int mfe_shared);
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_civoid vb2_dvb_unregister_bus(struct vb2_dvb_frontends *f);
628c2ecf20Sopenharmony_ci
638c2ecf20Sopenharmony_cistruct vb2_dvb_frontend *vb2_dvb_alloc_frontend(struct vb2_dvb_frontends *f, int id);
648c2ecf20Sopenharmony_civoid vb2_dvb_dealloc_frontends(struct vb2_dvb_frontends *f);
658c2ecf20Sopenharmony_ci
668c2ecf20Sopenharmony_cistruct vb2_dvb_frontend *vb2_dvb_get_frontend(struct vb2_dvb_frontends *f, int id);
678c2ecf20Sopenharmony_ciint vb2_dvb_find_frontend(struct vb2_dvb_frontends *f, struct dvb_frontend *p);
688c2ecf20Sopenharmony_ci
698c2ecf20Sopenharmony_ci#endif			/* _VIDEOBUF2_DVB_H_ */
70