18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Abilis Systems Single DVB-T Receiver
48c2ecf20Sopenharmony_ci * Copyright (C) 2008 Pierrick Hascoet <pierrick.hascoet@abilis.com>
58c2ecf20Sopenharmony_ci */
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ci#ifndef _AS102_DRV_H
88c2ecf20Sopenharmony_ci#define _AS102_DRV_H
98c2ecf20Sopenharmony_ci#include <linux/usb.h>
108c2ecf20Sopenharmony_ci#include <media/dvb_demux.h>
118c2ecf20Sopenharmony_ci#include <media/dvb_frontend.h>
128c2ecf20Sopenharmony_ci#include <media/dmxdev.h>
138c2ecf20Sopenharmony_ci#include "as10x_handle.h"
148c2ecf20Sopenharmony_ci#include "as10x_cmd.h"
158c2ecf20Sopenharmony_ci#include "as102_usb_drv.h"
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci#define DRIVER_FULL_NAME "Abilis Systems as10x usb driver"
188c2ecf20Sopenharmony_ci#define DRIVER_NAME "as10x_usb"
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci#define debug	as102_debug
218c2ecf20Sopenharmony_ciextern struct usb_driver as102_usb_driver;
228c2ecf20Sopenharmony_ciextern int elna_enable;
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci#define AS102_DEVICE_MAJOR	192
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_ci#define AS102_USB_BUF_SIZE	512
278c2ecf20Sopenharmony_ci#define MAX_STREAM_URB		32
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_cistruct as10x_bus_adapter_t {
308c2ecf20Sopenharmony_ci	struct usb_device *usb_dev;
318c2ecf20Sopenharmony_ci	/* bus token lock */
328c2ecf20Sopenharmony_ci	struct mutex lock;
338c2ecf20Sopenharmony_ci	/* low level interface for bus adapter */
348c2ecf20Sopenharmony_ci	union as10x_bus_token_t {
358c2ecf20Sopenharmony_ci		/* usb token */
368c2ecf20Sopenharmony_ci		struct as10x_usb_token_cmd_t usb;
378c2ecf20Sopenharmony_ci	} token;
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci	/* token cmd xfer id */
408c2ecf20Sopenharmony_ci	uint16_t cmd_xid;
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci	/* as10x command and response for dvb interface*/
438c2ecf20Sopenharmony_ci	struct as10x_cmd_t *cmd, *rsp;
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ci	/* bus adapter private ops callback */
468c2ecf20Sopenharmony_ci	const struct as102_priv_ops_t *ops;
478c2ecf20Sopenharmony_ci};
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_cistruct as102_dev_t {
508c2ecf20Sopenharmony_ci	const char *name;
518c2ecf20Sopenharmony_ci	struct as10x_bus_adapter_t bus_adap;
528c2ecf20Sopenharmony_ci	struct list_head device_entry;
538c2ecf20Sopenharmony_ci	struct kref kref;
548c2ecf20Sopenharmony_ci	uint8_t elna_cfg;
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_ci	struct dvb_adapter dvb_adap;
578c2ecf20Sopenharmony_ci	struct dvb_frontend *dvb_fe;
588c2ecf20Sopenharmony_ci	struct dvb_demux dvb_dmx;
598c2ecf20Sopenharmony_ci	struct dmxdev dvb_dmxdev;
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ci	/* timer handle to trig ts stream download */
628c2ecf20Sopenharmony_ci	struct timer_list timer_handle;
638c2ecf20Sopenharmony_ci
648c2ecf20Sopenharmony_ci	struct mutex sem;
658c2ecf20Sopenharmony_ci	dma_addr_t dma_addr;
668c2ecf20Sopenharmony_ci	void *stream;
678c2ecf20Sopenharmony_ci	int streaming;
688c2ecf20Sopenharmony_ci	struct urb *stream_urb[MAX_STREAM_URB];
698c2ecf20Sopenharmony_ci};
708c2ecf20Sopenharmony_ci
718c2ecf20Sopenharmony_ciint as102_dvb_register(struct as102_dev_t *dev);
728c2ecf20Sopenharmony_civoid as102_dvb_unregister(struct as102_dev_t *dev);
738c2ecf20Sopenharmony_ci
748c2ecf20Sopenharmony_ci#endif
75