Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
flexcop-common.h
Go to the documentation of this file.
1 /*
2  * Linux driver for digital TV devices equipped with B2C2 FlexcopII(b)/III
3  * flexcop-common.h - common header file for device-specific source files
4  * see flexcop.c for copyright information
5  */
6 #ifndef __FLEXCOP_COMMON_H__
7 #define __FLEXCOP_COMMON_H__
8 
9 #include <linux/interrupt.h>
10 #include <linux/pci.h>
11 #include <linux/mutex.h>
12 
13 #include "flexcop-reg.h"
14 
15 #include "dmxdev.h"
16 #include "dvb_demux.h"
17 #include "dvb_filter.h"
18 #include "dvb_net.h"
19 #include "dvb_frontend.h"
20 
21 #define FC_MAX_FEED 256
22 
23 #ifndef FC_LOG_PREFIX
24 #warning please define a log prefix for your file, using a default one
25 #define FC_LOG_PREFIX "b2c2-undef"
26 #endif
27 
28 /* Steal from usb.h */
29 #undef err
30 #define err(format, arg...) \
31  printk(KERN_ERR FC_LOG_PREFIX ": " format "\n" , ## arg)
32 #undef info
33 #define info(format, arg...) \
34  printk(KERN_INFO FC_LOG_PREFIX ": " format "\n" , ## arg)
35 #undef warn
36 #define warn(format, arg...) \
37  printk(KERN_WARNING FC_LOG_PREFIX ": " format "\n" , ## arg)
38 
39 struct flexcop_dma {
40  struct pci_dev *pdev;
41 
46  u32 size; /* size of each address in bytes */
47 };
48 
50  struct flexcop_device *fc;
52 
55 };
56 
57 /* Control structure for data definitions that are common to
58  * the B2C2-based PCI and USB devices.
59  */
61  /* general */
62  struct device *dev; /* for firmware_class */
63 
64 #define FC_STATE_DVB_INIT 0x01
65 #define FC_STATE_I2C_INIT 0x02
66 #define FC_STATE_FE_INIT 0x04
68 
69  /* device information */
74 
75  /* dvb stuff */
77  struct dvb_frontend *fe;
78  struct dvb_net dvbnet;
79  struct dvb_demux demux;
80  struct dmxdev dmxdev;
83  int (*fe_sleep) (struct dvb_frontend *);
84 
86  struct mutex i2c_mutex;
87  struct module *owner;
88 
89  /* options and status */
91  int feedcount;
94 
95  /* bus specific callbacks */
101  flexcop_access_op_t, u8 chipaddr, u8 addr, u8 *buf, u16 len);
103  int (*get_mac_addr) (struct flexcop_device *fc, int extended);
105 };
106 
107 /* exported prototypes */
108 
109 /* from flexcop.c */
110 void flexcop_pass_dmx_data(struct flexcop_device *fc, u8 *buf, u32 len);
112 
113 struct flexcop_device *flexcop_device_kmalloc(size_t bus_specific_len);
114 void flexcop_device_kfree(struct flexcop_device *);
115 
119 
120 /* from flexcop-dma.c */
121 int flexcop_dma_allocate(struct pci_dev *pdev,
122  struct flexcop_dma *dma, u32 size);
123 void flexcop_dma_free(struct flexcop_dma *dma);
124 
129 int flexcop_dma_config(struct flexcop_device *fc, struct flexcop_dma *dma,
130  flexcop_dma_index_t dma_idx);
133  int onoff);
135  flexcop_dma_index_t dma_idx, u8 cycles);
136 
137 /* from flexcop-eeprom.c */
138 /* the PCI part uses this call to get the MAC address, the USB part has its own */
139 int flexcop_eeprom_check_mac_addr(struct flexcop_device *fc, int extended);
140 
141 /* from flexcop-i2c.c */
142 /* the PCI part uses this a i2c_request callback, whereas the usb part has its own
143  * one. We have it in flexcop-i2c.c, because it is going via the actual
144  * I2C-channel of the flexcop.
145  */
147  u8 chipaddr, u8 addr, u8 *buf, u16 len);
148 
149 /* from flexcop-sram.c */
153 void flexcop_sram_ctrl(struct flexcop_device *fc,
154  int usb_wan, int sramdma, int maximumfill);
155 
156 /* global prototypes for the flexcop-chip */
157 /* from flexcop-fe-tuner.c */
160 
161 /* from flexcop-i2c.c */
162 int flexcop_i2c_init(struct flexcop_device *fc);
163 void flexcop_i2c_exit(struct flexcop_device *fc);
164 
165 /* from flexcop-sram.c */
166 int flexcop_sram_init(struct flexcop_device *fc);
167 
168 /* from flexcop-misc.c */
171  const char *prefix, const char *suffix);
172 void flexcop_dump_reg(struct flexcop_device *fc,
173  flexcop_ibi_register reg, int num);
174 
175 /* from flexcop-hw-filter.c */
177  struct dvb_demux_feed *dvbdmxfeed, int onoff);
179 
180 void flexcop_smc_ctrl(struct flexcop_device *fc, int onoff);
181 
182 void flexcop_set_mac_filter(struct flexcop_device *fc, u8 mac[6]);
184 
185 #endif