⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 saa7146.h

📁 linux环境下的dvb驱动程序
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef __SAA7146__#define __SAA7146__#include <linux/version.h>	/* for version macros */#include <linux/module.h>	/* for module-version */#include <linux/delay.h>	/* for delay-stuff */#include <linux/slab.h>		/* for kmalloc/kfree */#include <linux/pci.h>		/* for pci-config-stuff, vendor ids etc. */#include <linux/init.h>		/* for "__init" */#include <linux/interrupt.h>	/* for IMMEDIATE_BH */#include <linux/kmod.h>		/* for kernel module loader */#include <linux/i2c.h>		/* for i2c subsystem */#include <asm/io.h>		/* for accessing devices */#include <linux/stringify.h>#include <linux/vmalloc.h>	/* for vmalloc() */#include <linux/mm.h>		/* for vmalloc_to_page() *//* ugly, but necessary to build the dvb stuff under 2.4. */#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51)	#include "dvb_functions.h"#endif#define SAA7146_VERSION_CODE KERNEL_VERSION(0,5,0)#define saa7146_write(sxy,adr,dat)    writel((dat),(sxy->mem+(adr)))#define saa7146_read(sxy,adr)         readl(sxy->mem+(adr))extern unsigned int saa7146_debug;//#define DEBUG_PROLOG printk("(0x%08x)(0x%08x) %s: %s(): ",(dev==0?-1:(dev->mem==0?-1:saa7146_read(dev,RPS_ADDR0))),(dev==0?-1:(dev->mem==0?-1:saa7146_read(dev,IER))),__stringify(KBUILD_MODNAME),__FUNCTION__)#ifndef DEBUG_VARIABLE	#define DEBUG_VARIABLE saa7146_debug#endif#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51)#define DEBUG_PROLOG printk("%s: %s(): ",__stringify(KBUILD_BASENAME),__FUNCTION__)#define INFO(x) { printk("%s: ",__stringify(KBUILD_BASENAME)); printk x; }#else#define DEBUG_PROLOG printk("%s: %s(): ",__stringify(KBUILD_MODNAME),__FUNCTION__)#define INFO(x) { printk("%s: ",__stringify(KBUILD_MODNAME)); printk x; }#endif#define ERR(x) { DEBUG_PROLOG; printk x; }#define DEB_S(x)    if (0!=(DEBUG_VARIABLE&0x01)) { DEBUG_PROLOG; printk x; } /* simple debug messages */#define DEB_D(x)    if (0!=(DEBUG_VARIABLE&0x02)) { DEBUG_PROLOG; printk x; } /* more detailed debug messages */#define DEB_EE(x)   if (0!=(DEBUG_VARIABLE&0x04)) { DEBUG_PROLOG; printk x; } /* print enter and exit of functions */#define DEB_I2C(x)  if (0!=(DEBUG_VARIABLE&0x08)) { DEBUG_PROLOG; printk x; } /* i2c debug messages */#define DEB_VBI(x)  if (0!=(DEBUG_VARIABLE&0x10)) { DEBUG_PROLOG; printk x; } /* vbi debug messages */#define DEB_INT(x)  if (0!=(DEBUG_VARIABLE&0x20)) { DEBUG_PROLOG; printk x; } /* interrupt debug messages */#define DEB_CAP(x)  if (0!=(DEBUG_VARIABLE&0x40)) { DEBUG_PROLOG; printk x; } /* capture debug messages */#define IER_DISABLE(x,y) \	saa7146_write(x, IER, saa7146_read(x, IER) & ~(y));#define IER_ENABLE(x,y) \	saa7146_write(x, IER, saa7146_read(x, IER) | (y));struct saa7146_dev;struct saa7146_extension;struct saa7146_vv;/* saa7146 page table */struct saa7146_pgtable {	unsigned int	size;	u32 		*cpu;	dma_addr_t	dma;	/* used for offsets for u,v planes for planar capture modes */	unsigned long	offset;	/* used for custom pagetables (used for example by budget dvb cards) */	struct scatterlist *slist;};struct saa7146_pci_extension_data {	struct saa7146_extension *ext;	void *ext_priv;			/* most likely a name string */};#define MAKE_EXTENSION_PCI(x_var, x_vendor, x_device)		\	{							\		.vendor    = PCI_VENDOR_ID_PHILIPS,		\		.device	   = PCI_DEVICE_ID_PHILIPS_SAA7146,	\		.subvendor = x_vendor,				\		.subdevice = x_device,				\		.driver_data = (unsigned long)& x_var,		\	}struct saa7146_extension{	char	name[32];		/* name of the device */#define SAA7146_USE_I2C_IRQ	0x1#define SAA7146_I2C_SHORT_DELAY	0x2	int	flags;			/* pairs of subvendor and subdevice ids for	   supported devices, last entry 0xffff, 0xfff */	struct module *module;	struct pci_driver driver;	struct pci_device_id *pci_tbl;		/* extension functions */	int (*probe)(struct saa7146_dev *);	int (*attach)(struct saa7146_dev *, struct saa7146_pci_extension_data *);	int (*detach)(struct saa7146_dev*);	u32	irq_mask;	/* mask to indicate, which irq-events are handled by the extension */	void 	(*irq_func)(struct saa7146_dev*, u32* irq_mask);};struct saa7146_dma{	dma_addr_t	dma_handle;	u32		*cpu_addr;};struct saa7146_dev{	struct module			*module;	struct list_head		item;	/* different device locks */       	spinlock_t                 	slock;        struct semaphore           	lock;	unsigned char			*mem;		/* pointer to mapped IO memory */	int				revision;	/* chip revision; needed for bug-workarounds*/	/* pci-device & irq stuff*/	char				name[32];	struct pci_dev			*pci;	u32				int_todo;       	spinlock_t			int_slock;		/* extension handling */	struct saa7146_extension	*ext;		/* indicates if handled by extension */	void				*ext_priv;	/* pointer for extension private use (most likely some private data) */	struct saa7146_ext_vv		*ext_vv_data;	/* per device video/vbi informations (if available) */	struct saa7146_vv	*vv_data;	void (*vv_callback)(struct saa7146_dev *dev, unsigned long status);	/* i2c-stuff */        struct semaphore	i2c_lock;	u32			i2c_bitrate;	struct saa7146_dma	d_i2c;	/* pointer to i2c memory */	wait_queue_head_t	i2c_wq;	int			i2c_op;		/* memories */	struct saa7146_dma	d_rps0;	struct saa7146_dma	d_rps1;};/* from saa7146_i2c.c */int saa7146_i2c_adapter_prepare(struct saa7146_dev *dev, struct i2c_adapter *i2c_adapter, u32 bitrate);int saa7146_i2c_transfer(struct saa7146_dev *saa, const struct i2c_msg msgs[], int num,  int retries);/* from saa7146_core.c */extern struct list_head saa7146_devices;extern struct semaphore saa7146_devices_lock;int saa7146_register_extension(struct saa7146_extension*);int saa7146_unregister_extension(struct saa7146_extension*);struct saa7146_format* format_by_fourcc(struct saa7146_dev *dev, int fourcc);int saa7146_pgtable_alloc(struct pci_dev *pci, struct saa7146_pgtable *pt);void saa7146_pgtable_free(struct pci_dev *pci, struct saa7146_pgtable *pt);int saa7146_pgtable_build_single(struct pci_dev *pci, struct saa7146_pgtable *pt, struct scatterlist *list, int length );char *saa7146_vmalloc_build_pgtable(struct pci_dev *pci, long length, struct saa7146_pgtable *pt);void saa7146_setgpio(struct saa7146_dev *dev, int port, u32 data);int saa7146_wait_for_debi_done(struct saa7146_dev *dev);/* some memory sizes */#define SAA7146_I2C_MEM		( 1*PAGE_SIZE)#define SAA7146_RPS_MEM		( 1*PAGE_SIZE)/* some i2c constants */#define SAA7146_I2C_TIMEOUT	100	/* i2c-timeout-value in ms */#define SAA7146_I2C_RETRIES 	3	/* how many times shall we retry an i2c-operation? */#define SAA7146_I2C_DELAY 	5	/* time we wait after certain i2c-operations *//* unsorted defines */#define ME1    0x0000000800#define PV1    0x0000000008/* gpio defines */#define SAA7146_GPIO_INPUT 0x00#define SAA7146_GPIO_IRQHI 0x10#define SAA7146_GPIO_IRQLO 0x20#define SAA7146_GPIO_IRQHL 0x30#define SAA7146_GPIO_OUTLO 0x40#define SAA7146_GPIO_OUTHI 0x50/* debi defines */#define DEBINOSWAP 0x000e0000/* define for the register programming sequencer (rps) */#define CMD_NOP		0x00000000  /* No operation */#define CMD_CLR_EVENT	0x00000000  /* Clear event */#define CMD_SET_EVENT	0x10000000  /* Set signal event */#define CMD_PAUSE	0x20000000  /* Pause */#define CMD_CHECK_LATE	0x30000000  /* Check late */#define CMD_UPLOAD	0x40000000  /* Upload */#define CMD_STOP	0x50000000  /* Stop */#define CMD_INTERRUPT	0x60000000  /* Interrupt */#define CMD_JUMP	0x80000000  /* Jump */#define CMD_WR_REG	0x90000000  /* Write (load) register */#define CMD_RD_REG	0xa0000000  /* Read (store) register */#define CMD_WR_REG_MASK	0xc0000000  /* Write register with mask */#define CMD_OAN		MASK_27#define CMD_INV		MASK_26#define CMD_SIG4	MASK_25#define CMD_SIG3	MASK_24#define CMD_SIG2	MASK_23#define CMD_SIG1	MASK_22#define CMD_SIG0	MASK_21#define CMD_O_FID_B	MASK_14#define CMD_E_FID_B	MASK_13#define CMD_O_FID_A	MASK_12#define CMD_E_FID_A	MASK_11/* some events and command modifiers for rps1 squarewave generator */#define EVT_HS          (1<<15)     // Source Line Threshold reached#define EVT_VBI_B       (1<<9)      // VSYNC Event#define RPS_OAN         (1<<27)     // 1: OR events, 0: AND events

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -