162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Abilis Systems Single DVB-T Receiver 462306a36Sopenharmony_ci * Copyright (C) 2008 Pierrick Hascoet <pierrick.hascoet@abilis.com> 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#ifndef _AS102_DRV_H 862306a36Sopenharmony_ci#define _AS102_DRV_H 962306a36Sopenharmony_ci#include <linux/usb.h> 1062306a36Sopenharmony_ci#include <media/dvb_demux.h> 1162306a36Sopenharmony_ci#include <media/dvb_frontend.h> 1262306a36Sopenharmony_ci#include <media/dmxdev.h> 1362306a36Sopenharmony_ci#include "as10x_handle.h" 1462306a36Sopenharmony_ci#include "as10x_cmd.h" 1562306a36Sopenharmony_ci#include "as102_usb_drv.h" 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#define DRIVER_FULL_NAME "Abilis Systems as10x usb driver" 1862306a36Sopenharmony_ci#define DRIVER_NAME "as10x_usb" 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#define debug as102_debug 2162306a36Sopenharmony_ciextern struct usb_driver as102_usb_driver; 2262306a36Sopenharmony_ciextern int elna_enable; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci#define AS102_DEVICE_MAJOR 192 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci#define AS102_USB_BUF_SIZE 512 2762306a36Sopenharmony_ci#define MAX_STREAM_URB 32 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_cistruct as10x_bus_adapter_t { 3062306a36Sopenharmony_ci struct usb_device *usb_dev; 3162306a36Sopenharmony_ci /* bus token lock */ 3262306a36Sopenharmony_ci struct mutex lock; 3362306a36Sopenharmony_ci /* low level interface for bus adapter */ 3462306a36Sopenharmony_ci union as10x_bus_token_t { 3562306a36Sopenharmony_ci /* usb token */ 3662306a36Sopenharmony_ci struct as10x_usb_token_cmd_t usb; 3762306a36Sopenharmony_ci } token; 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci /* token cmd xfer id */ 4062306a36Sopenharmony_ci uint16_t cmd_xid; 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci /* as10x command and response for dvb interface*/ 4362306a36Sopenharmony_ci struct as10x_cmd_t *cmd, *rsp; 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci /* bus adapter private ops callback */ 4662306a36Sopenharmony_ci const struct as102_priv_ops_t *ops; 4762306a36Sopenharmony_ci}; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_cistruct as102_dev_t { 5062306a36Sopenharmony_ci const char *name; 5162306a36Sopenharmony_ci struct as10x_bus_adapter_t bus_adap; 5262306a36Sopenharmony_ci struct list_head device_entry; 5362306a36Sopenharmony_ci struct kref kref; 5462306a36Sopenharmony_ci uint8_t elna_cfg; 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci struct dvb_adapter dvb_adap; 5762306a36Sopenharmony_ci struct dvb_frontend *dvb_fe; 5862306a36Sopenharmony_ci struct dvb_demux dvb_dmx; 5962306a36Sopenharmony_ci struct dmxdev dvb_dmxdev; 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci /* timer handle to trig ts stream download */ 6262306a36Sopenharmony_ci struct timer_list timer_handle; 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci struct mutex sem; 6562306a36Sopenharmony_ci dma_addr_t dma_addr; 6662306a36Sopenharmony_ci void *stream; 6762306a36Sopenharmony_ci int streaming; 6862306a36Sopenharmony_ci struct urb *stream_urb[MAX_STREAM_URB]; 6962306a36Sopenharmony_ci}; 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ciint as102_dvb_register(struct as102_dev_t *dev); 7262306a36Sopenharmony_civoid as102_dvb_unregister(struct as102_dev_t *dev); 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci#endif 75