1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Abilis Systems Single DVB-T Receiver 4*4882a593Smuzhiyun * Copyright (C) 2008 Pierrick Hascoet <pierrick.hascoet@abilis.com> 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifndef _AS102_DRV_H 8*4882a593Smuzhiyun #define _AS102_DRV_H 9*4882a593Smuzhiyun #include <linux/usb.h> 10*4882a593Smuzhiyun #include <media/dvb_demux.h> 11*4882a593Smuzhiyun #include <media/dvb_frontend.h> 12*4882a593Smuzhiyun #include <media/dmxdev.h> 13*4882a593Smuzhiyun #include "as10x_handle.h" 14*4882a593Smuzhiyun #include "as10x_cmd.h" 15*4882a593Smuzhiyun #include "as102_usb_drv.h" 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #define DRIVER_FULL_NAME "Abilis Systems as10x usb driver" 18*4882a593Smuzhiyun #define DRIVER_NAME "as10x_usb" 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun #define debug as102_debug 21*4882a593Smuzhiyun extern struct usb_driver as102_usb_driver; 22*4882a593Smuzhiyun extern int elna_enable; 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun #define AS102_DEVICE_MAJOR 192 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #define AS102_USB_BUF_SIZE 512 27*4882a593Smuzhiyun #define MAX_STREAM_URB 32 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun struct as10x_bus_adapter_t { 30*4882a593Smuzhiyun struct usb_device *usb_dev; 31*4882a593Smuzhiyun /* bus token lock */ 32*4882a593Smuzhiyun struct mutex lock; 33*4882a593Smuzhiyun /* low level interface for bus adapter */ 34*4882a593Smuzhiyun union as10x_bus_token_t { 35*4882a593Smuzhiyun /* usb token */ 36*4882a593Smuzhiyun struct as10x_usb_token_cmd_t usb; 37*4882a593Smuzhiyun } token; 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun /* token cmd xfer id */ 40*4882a593Smuzhiyun uint16_t cmd_xid; 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun /* as10x command and response for dvb interface*/ 43*4882a593Smuzhiyun struct as10x_cmd_t *cmd, *rsp; 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun /* bus adapter private ops callback */ 46*4882a593Smuzhiyun const struct as102_priv_ops_t *ops; 47*4882a593Smuzhiyun }; 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun struct as102_dev_t { 50*4882a593Smuzhiyun const char *name; 51*4882a593Smuzhiyun struct as10x_bus_adapter_t bus_adap; 52*4882a593Smuzhiyun struct list_head device_entry; 53*4882a593Smuzhiyun struct kref kref; 54*4882a593Smuzhiyun uint8_t elna_cfg; 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun struct dvb_adapter dvb_adap; 57*4882a593Smuzhiyun struct dvb_frontend *dvb_fe; 58*4882a593Smuzhiyun struct dvb_demux dvb_dmx; 59*4882a593Smuzhiyun struct dmxdev dvb_dmxdev; 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun /* timer handle to trig ts stream download */ 62*4882a593Smuzhiyun struct timer_list timer_handle; 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun struct mutex sem; 65*4882a593Smuzhiyun dma_addr_t dma_addr; 66*4882a593Smuzhiyun void *stream; 67*4882a593Smuzhiyun int streaming; 68*4882a593Smuzhiyun struct urb *stream_urb[MAX_STREAM_URB]; 69*4882a593Smuzhiyun }; 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun int as102_dvb_register(struct as102_dev_t *dev); 72*4882a593Smuzhiyun void as102_dvb_unregister(struct as102_dev_t *dev); 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun #endif 75