1/* 2 Mantis PCI bridge driver 3 4 Copyright (C) Manu Abraham (abraham.manu@gmail.com) 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program; if not, write to the Free Software 18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19*/ 20 21#ifndef __MANTIS_COMMON_H 22#define __MANTIS_COMMON_H 23 24#include <linux/interrupt.h> 25#include <linux/mutex.h> 26#include <linux/workqueue.h> 27 28#include "mantis_uart.h" 29 30#include "mantis_link.h" 31 32#define MANTIS_ERROR 0 33#define MANTIS_NOTICE 1 34#define MANTIS_INFO 2 35#define MANTIS_DEBUG 3 36#define MANTIS_TMG 9 37 38#define dprintk(y, z, format, arg...) do { \ 39 if (z) { \ 40 if ((mantis->verbose > MANTIS_ERROR) && (mantis->verbose > y)) \ 41 printk(KERN_ERR "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \ 42 else if ((mantis->verbose > MANTIS_NOTICE) && (mantis->verbose > y)) \ 43 printk(KERN_NOTICE "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \ 44 else if ((mantis->verbose > MANTIS_INFO) && (mantis->verbose > y)) \ 45 printk(KERN_INFO "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \ 46 else if ((mantis->verbose > MANTIS_DEBUG) && (mantis->verbose > y)) \ 47 printk(KERN_DEBUG "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \ 48 else if ((mantis->verbose > MANTIS_TMG) && (mantis->verbose > y)) \ 49 printk(KERN_DEBUG "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \ 50 } else { \ 51 if (mantis->verbose > y) \ 52 printk(format , ##arg); \ 53 } \ 54} while(0) 55 56#define mwrite(dat, addr) writel((dat), addr) 57#define mread(addr) readl(addr) 58 59#define mmwrite(dat, addr) mwrite((dat), (mantis->mmio + (addr))) 60#define mmread(addr) mread(mantis->mmio + (addr)) 61 62#define MANTIS_TS_188 0 63#define MANTIS_TS_204 1 64 65#define TWINHAN_TECHNOLOGIES 0x1822 66#define MANTIS 0x4e35 67 68#define TECHNISAT 0x1ae4 69#define TERRATEC 0x153b 70 71#define MAKE_ENTRY(__subven, __subdev, __configptr) { \ 72 .vendor = TWINHAN_TECHNOLOGIES, \ 73 .device = MANTIS, \ 74 .subvendor = (__subven), \ 75 .subdevice = (__subdev), \ 76 .driver_data = (unsigned long) (__configptr) \ 77} 78 79enum mantis_i2c_mode { 80 MANTIS_PAGE_MODE = 0, 81 MANTIS_BYTE_MODE, 82}; 83 84struct mantis_pci; 85 86struct mantis_hwconfig { 87 char *model_name; 88 char *dev_type; 89 u32 ts_size; 90 91 enum mantis_baud baud_rate; 92 enum mantis_parity parity; 93 u32 bytes; 94 95 irqreturn_t (*irq_handler)(int irq, void *dev_id); 96 int (*frontend_init)(struct mantis_pci *mantis, struct dvb_frontend *fe); 97 98 u8 power; 99 u8 reset; 100 101 enum mantis_i2c_mode i2c_mode; 102}; 103 104struct mantis_pci { 105 unsigned int verbose; 106 107 /* PCI stuff */ 108 u16 vendor_id; 109 u16 device_id; 110 u16 subsystem_vendor; 111 u16 subsystem_device; 112 113 u8 latency; 114 115 struct pci_dev *pdev; 116 117 unsigned long mantis_addr; 118 void __iomem *mmio; 119 120 u8 irq; 121 u8 revision; 122 123 unsigned int num; 124 125 /* RISC Core */ 126 u32 busy_block; 127 u32 last_block; 128 u8 *buf_cpu; 129 dma_addr_t buf_dma; 130 __le32 *risc_cpu; 131 dma_addr_t risc_dma; 132 133 struct tasklet_struct tasklet; 134 135 struct i2c_adapter adapter; 136 int i2c_rc; 137 wait_queue_head_t i2c_wq; 138 struct mutex i2c_lock; 139 140 /* DVB stuff */ 141 struct dvb_adapter dvb_adapter; 142 struct dvb_frontend *fe; 143 struct dvb_demux demux; 144 struct dmxdev dmxdev; 145 struct dmx_frontend fe_hw; 146 struct dmx_frontend fe_mem; 147 struct dvb_net dvbnet; 148 149 u8 feeds; 150 151 struct mantis_hwconfig *hwconfig; 152 153 u32 mantis_int_stat; 154 u32 mantis_int_mask; 155 156 /* board specific */ 157 u8 mac_address[8]; 158 u32 sub_vendor_id; 159 u32 sub_device_id; 160 161 /* A12 A13 A14 */ 162 u32 gpio_status; 163 164 u32 gpif_status; 165 166 struct mantis_ca *mantis_ca; 167 168 wait_queue_head_t uart_wq; 169 struct work_struct uart_work; 170 spinlock_t uart_lock; 171 172 struct rc_dev *rc; 173 char input_name[80]; 174 char input_phys[80]; 175}; 176 177#define MANTIS_HIF_STATUS (mantis->gpio_status) 178 179#endif /* __MANTIS_COMMON_H */ 180