1/* 2 saa7146.h - definitions philips saa7146 based cards 3 Copyright (C) 1999 Nathan Laredo (laredo@gnu.org) 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 2 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program; if not, write to the Free Software 17 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 18*/ 19 20#ifndef __SAA7146__ 21#define __SAA7146__ 22 23#define SAA7146_VERSION_CODE 0x000101 24 25#include <linux/types.h> 26#include <linux/wait.h> 27 28#include <linux/i2c.h> 29#include <linux/videodev.h> 30 31#ifndef O_NONCAP 32#define O_NONCAP O_TRUNC 33#endif 34 35#define MAX_GBUFFERS 2 36#define FBUF_SIZE 0x190000 37 38#ifdef __KERNEL__ 39 40struct saa7146_window 41{ 42 int x, y; 43 ushort width, height; 44 ushort bpp, bpl; 45 ushort swidth, sheight; 46 short cropx, cropy; 47 ushort cropwidth, cropheight; 48 unsigned long vidadr; 49 int color_fmt; 50 ushort depth; 51}; 52 53/* Per-open data for handling multiple opens on one device */ 54struct device_open 55{ 56 int isopen; 57 int noncapturing; 58 struct saa7146 *dev; 59}; 60#define MAX_OPENS 3 61 62struct saa7146 63{ 64 struct video_device video_dev; 65 struct video_picture picture; 66 struct video_audio audio_dev; 67 struct video_info vidinfo; 68 int user; 69 int cap; 70 int capuser; 71 int irqstate; /* irq routine is state driven */ 72 int writemode; 73 int playmode; 74 unsigned int nr; 75 unsigned long irq; /* IRQ used by SAA7146 card */ 76 unsigned short id; 77 struct i2c_bus i2c; 78 struct pci_dev *dev; 79 unsigned char revision; 80 unsigned char boardcfg[64]; /* 64 bytes of config from eeprom */ 81 unsigned long saa7146_adr; /* bus address of IO mem from PCI BIOS */ 82 struct saa7146_window win; 83 unsigned char *saa7146_mem; /* pointer to mapped IO memory */ 84 struct device_open open_data[MAX_OPENS]; 85#define MAX_MARKS 16 86 /* for a/v sync */ 87 int endmark[MAX_MARKS], endmarkhead, endmarktail; 88 u32 *dmaRPS1, *pageRPS1, *dmaRPS2, *pageRPS2, *dmavid1, *dmavid2, 89 *dmavid3, *dmaa1in, *dmaa1out, *dmaa2in, *dmaa2out, 90 *pagedebi, *pagevid1, *pagevid2, *pagevid3, *pagea1in, 91 *pagea1out, *pagea2in, *pagea2out; 92 wait_queue_head_t i2cq, debiq, audq, vidq; 93 u8 *vidbuf, *audbuf, *osdbuf, *dmadebi; 94 int audhead, vidhead, osdhead, audtail, vidtail, osdtail; 95 spinlock_t lock; /* the device lock */ 96}; 97#endif 98 99#ifdef _ALPHA_SAA7146 100#define saawrite(dat,adr) writel((dat),(char *) (saa->saa7146_adr+(adr))) 101#define saaread(adr) readl(saa->saa7146_adr+(adr)) 102#else 103#define saawrite(dat,adr) writel((dat), (char *) (saa->saa7146_mem+(adr))) 104#define saaread(adr) readl(saa->saa7146_mem+(adr)) 105#endif 106 107#define saaand(dat,adr) saawrite((dat) & saaread(adr), adr) 108#define saaor(dat,adr) saawrite((dat) | saaread(adr), adr) 109#define saaaor(dat,mask,adr) saawrite((dat) | ((mask) & saaread(adr)), adr) 110 111/* bitmask of attached hardware found */ 112#define SAA7146_UNKNOWN 0x00000000 113#define SAA7146_SAA7111 0x00000001 114#define SAA7146_SAA7121 0x00000002 115#define SAA7146_IBMMPEG 0x00000004 116 117#endif 118