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/mutex.h> 25 #include <linux/workqueue.h> 26 27 #include "mantis_uart.h" 28 29 #include "mantis_link.h" 30 31 #define MANTIS_ERROR 0 32 #define MANTIS_NOTICE 1 33 #define MANTIS_INFO 2 34 #define MANTIS_DEBUG 3 35 #define MANTIS_TMG 9 36 37 #define dprintk(y, z, format, arg...) do { \ 38 if (z) { \ 39 if ((mantis->verbose > MANTIS_ERROR) && (mantis->verbose > y)) \ 40 printk(KERN_ERR "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \ 41 else if ((mantis->verbose > MANTIS_NOTICE) && (mantis->verbose > y)) \ 42 printk(KERN_NOTICE "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \ 43 else if ((mantis->verbose > MANTIS_INFO) && (mantis->verbose > y)) \ 44 printk(KERN_INFO "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \ 45 else if ((mantis->verbose > MANTIS_DEBUG) && (mantis->verbose > y)) \ 46 printk(KERN_DEBUG "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \ 47 else if ((mantis->verbose > MANTIS_TMG) && (mantis->verbose > y)) \ 48 printk(KERN_DEBUG "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \ 49 } else { \ 50 if (mantis->verbose > y) \ 51 printk(format , ##arg); \ 52 } \ 53 } while(0) 54 55 #define mwrite(dat, addr) writel((dat), addr) 56 #define mread(addr) readl(addr) 57 58 #define mmwrite(dat, addr) mwrite((dat), (mantis->mmio + (addr))) 59 #define mmread(addr) mread(mantis->mmio + (addr)) 60 61 #define MANTIS_TS_188 0 62 #define MANTIS_TS_204 1 63 64 #define TWINHAN_TECHNOLOGIES 0x1822 65 #define MANTIS 0x4e35 66 67 #define TECHNISAT 0x1ae4 68 #define TERRATEC 0x153b 69 70 #define MAKE_ENTRY(__subven, __subdev, __configptr) { \ 71 .vendor = TWINHAN_TECHNOLOGIES, \ 72 .device = MANTIS, \ 73 .subvendor = (__subven), \ 74 .subdevice = (__subdev), \ 75 .driver_data = (unsigned long) (__configptr) \ 76 } 77 78 enum mantis_i2c_mode { 79 MANTIS_PAGE_MODE = 0, 80 MANTIS_BYTE_MODE, 81 }; 82 83 struct mantis_pci; 84 85 struct mantis_hwconfig { 86 char *model_name; 87 char *dev_type; 88 u32 ts_size; 89 90 enum mantis_baud baud_rate; 91 enum mantis_parity parity; 92 u32 bytes; 93 94 irqreturn_t (*irq_handler)(int irq, void *dev_id); 95 int (*frontend_init)(struct mantis_pci *mantis, struct dvb_frontend *fe); 96 97 u8 power; 98 u8 reset; 99 100 enum mantis_i2c_mode i2c_mode; 101 }; 102 103 struct mantis_pci { 104 unsigned int verbose; 105 106 /* PCI stuff */ 107 u16 vendor_id; 108 u16 device_id; 109 u16 subsystem_vendor; 110 u16 subsystem_device; 111 112 u8 latency; 113 114 struct pci_dev *pdev; 115 116 unsigned long mantis_addr; 117 void __iomem *mmio; 118 119 u8 irq; 120 u8 revision; 121 122 unsigned int num; 123 124 /* RISC Core */ 125 u32 finished_block; 126 u32 last_block; 127 u32 line_bytes; 128 u32 line_count; 129 u32 risc_pos; 130 u8 *buf_cpu; 131 dma_addr_t buf_dma; 132 u32 *risc_cpu; 133 dma_addr_t risc_dma; 134 135 struct tasklet_struct tasklet; 136 137 struct i2c_adapter adapter; 138 int i2c_rc; 139 wait_queue_head_t i2c_wq; 140 struct mutex i2c_lock; 141 142 /* DVB stuff */ 143 struct dvb_adapter dvb_adapter; 144 struct dvb_frontend *fe; 145 struct dvb_demux demux; 146 struct dmxdev dmxdev; 147 struct dmx_frontend fe_hw; 148 struct dmx_frontend fe_mem; 149 struct dvb_net dvbnet; 150 151 u8 feeds; 152 153 struct mantis_hwconfig *hwconfig; 154 155 u32 mantis_int_stat; 156 u32 mantis_int_mask; 157 158 /* board specific */ 159 u8 mac_address[8]; 160 u32 sub_vendor_id; 161 u32 sub_device_id; 162 163 /* A12 A13 A14 */ 164 u32 gpio_status; 165 166 u32 gpif_status; 167 168 struct mantis_ca *mantis_ca; 169 170 wait_queue_head_t uart_wq; 171 struct work_struct uart_work; 172 spinlock_t uart_lock; 173 174 struct rc_dev *rc; 175 char input_name[80]; 176 char input_phys[80]; 177 }; 178 179 #define MANTIS_HIF_STATUS (mantis->gpio_status) 180 181 #endif /* __MANTIS_COMMON_H */ 182