| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | #ifndef _AD1889_H_ | 
|  | 2 | #define _AD1889_H_ | 
|  | 3 |  | 
|  | 4 | #define AD_DSWSMC	0x00	/* DMA input wave/syn mixer control */ | 
|  | 5 | #define AD_DSRAMC	0x02	/* DMA output resamp/ADC mixer control */ | 
|  | 6 | #define AD_DSWADA	0x04	/* DMA input wave attenuation */ | 
|  | 7 | #define AD_DSSYDA	0x06	/* DMA input syn attentuation */ | 
|  | 8 | #define AD_DSWAS	0x08	/* wave input sample rate */ | 
|  | 9 | #define AD_DSRES	0x0a	/* resampler output sample rate */ | 
|  | 10 | #define AD_DSCCS	0x0c	/* chip control/status */ | 
|  | 11 |  | 
|  | 12 | #define AD_DMARESBA	0x40	/* RES base addr */ | 
|  | 13 | #define AD_DMARESCA	0x44	/* RES current addr */ | 
|  | 14 | #define AD_DMARESBC	0x48	/* RES base cnt */ | 
|  | 15 | #define AD_DMARESCC	0x4c	/* RES current count */ | 
|  | 16 | #define AD_DMAADCBA	0x50	/* ADC */ | 
|  | 17 | #define AD_DMAADCCA	0x54 | 
|  | 18 | #define AD_DMAADCBC	0x58 | 
|  | 19 | #define AD_DMAADCCC	0x5c | 
|  | 20 | #define AD_DMASYNBA	0x60	/* SYN */ | 
|  | 21 | #define AD_DMASYNCA	0x64 | 
|  | 22 | #define AD_DMASYNBC	0x68 | 
|  | 23 | #define AD_DMASYNCC	0x6c | 
|  | 24 | #define AD_DMAWAVBA	0x70	/* WAV */ | 
|  | 25 | #define AD_DMAWAVCA	0x74 | 
|  | 26 | #define AD_DMAWAVBC	0x78 | 
|  | 27 | #define AD_DMAWAVCC	0x7c | 
|  | 28 | #define AD_DMARESICC	0x80	/* RES interrupt current count */ | 
|  | 29 | #define AD_DMARESIBC	0x84	/* RES interrupt base count */ | 
|  | 30 | #define AD_DMAADCICC	0x88	/* ADC interrupt current count */ | 
|  | 31 | #define AD_DMAADCIBC	0x8c	/* ADC interrupt base count */ | 
|  | 32 | #define AD_DMASYNICC	0x90	/* SYN interrupt current count */ | 
|  | 33 | #define AD_DMASYNIBC	0x94	/* SYN interrupt base count */ | 
|  | 34 | #define AD_DMAWAVICC	0x98	/* WAV interrupt current count */ | 
|  | 35 | #define AD_DMAWAVIBC	0x9c	/* WAV interrupt base count */ | 
|  | 36 | #define AD_DMARESCTRL	0xa0	/* RES PCI control/status */ | 
|  | 37 | #define AD_DMAADCCTRL	0xa8	/* ADC PCI control/status */ | 
|  | 38 | #define AD_DMASYNCTRL	0xb0	/* SYN PCI control/status */ | 
|  | 39 | #define AD_DMAWAVCTRL	0xb8	/* WAV PCI control/status */ | 
|  | 40 | #define AD_DMADISR	0xc0	/* PCI DMA intr status */ | 
|  | 41 | #define AD_DMACHSS	0xc4	/* PCI DMA channel stop status */ | 
|  | 42 |  | 
|  | 43 | #define AD_GPIOIPC	0xc8	/* IO port ctrl */ | 
|  | 44 | #define AD_GPIOOP	0xca	/* IO output status */ | 
|  | 45 | #define AD_GPIOIP	0xcc	/* IO input status */ | 
|  | 46 |  | 
|  | 47 | /* AC97 registers, 0x100 - 0x17f; see ac97.h */ | 
|  | 48 | #define AD_ACIC		0x180	/* AC Link interface ctrl */ | 
|  | 49 |  | 
|  | 50 | /* OPL3; BAR1 */ | 
|  | 51 | #define AD_OPLM0AS	0x00	/* Music0 address/status */ | 
|  | 52 | #define AD_OPLM0DATA	0x01	/* Music0 data */ | 
|  | 53 | #define AD_OPLM1A	0x02	/* Music1 address */ | 
|  | 54 | #define AD_OPLM1DATA	0x03	/* Music1 data */ | 
|  | 55 | /* 0x04-0x0f reserved */ | 
|  | 56 |  | 
|  | 57 | /* MIDI; BAR2 */ | 
|  | 58 | #define AD_MIDA		0x00	/* MIDI data */ | 
|  | 59 | #define AD_MISC		0x01	/* MIDI status/cmd */ | 
|  | 60 | /* 0x02-0xff reserved */ | 
|  | 61 |  | 
|  | 62 | #define AD_DSIOMEMSIZE	512 | 
|  | 63 | #define AD_OPLMEMSIZE	16 | 
|  | 64 | #define AD_MIDIMEMSIZE	16 | 
|  | 65 |  | 
|  | 66 | #define AD_WAV_STATE	0 | 
|  | 67 | #define AD_ADC_STATE	1 | 
|  | 68 | #define AD_MAX_STATES	2 | 
|  | 69 |  | 
|  | 70 | #define DMA_SIZE	(128*1024) | 
|  | 71 |  | 
|  | 72 | #define DMA_FLAG_MAPPED	1 | 
|  | 73 |  | 
|  | 74 | struct ad1889_dev; | 
|  | 75 |  | 
|  | 76 | typedef struct ad1889_state { | 
|  | 77 | struct ad1889_dev *card; | 
|  | 78 |  | 
|  | 79 | mode_t open_mode; | 
|  | 80 | struct dmabuf { | 
|  | 81 | unsigned int rate; | 
|  | 82 | unsigned char fmt, enable; | 
|  | 83 |  | 
|  | 84 | /* buf management */ | 
|  | 85 | size_t rawbuf_size; | 
|  | 86 | void *rawbuf; | 
|  | 87 | dma_addr_t dma_handle;	/* mapped address */ | 
|  | 88 | unsigned long dma_len;	/* number of bytes mapped */ | 
|  | 89 |  | 
|  | 90 | /* indexes into rawbuf for setting up DMA engine */ | 
|  | 91 | volatile unsigned long rd_ptr, wr_ptr; | 
|  | 92 |  | 
|  | 93 | wait_queue_head_t wait; /* to wait for buf servicing */ | 
|  | 94 |  | 
|  | 95 | /* OSS bits */ | 
|  | 96 | unsigned int mapped:1; | 
|  | 97 | unsigned int ready:1; | 
|  | 98 | unsigned int ossfragshift; | 
|  | 99 | int ossmaxfrags; | 
|  | 100 | unsigned int subdivision; | 
|  | 101 | } dmabuf; | 
|  | 102 |  | 
|  | 103 | struct semaphore sem; | 
|  | 104 | } ad1889_state_t; | 
|  | 105 |  | 
|  | 106 | typedef struct ad1889_dev { | 
|  | 107 | void __iomem *regbase; | 
|  | 108 | struct pci_dev *pci; | 
|  | 109 |  | 
|  | 110 | spinlock_t lock; | 
|  | 111 |  | 
|  | 112 | int dev_audio; | 
|  | 113 |  | 
|  | 114 | /* states; one per channel; right now only WAV and ADC */ | 
|  | 115 | struct ad1889_state state[AD_MAX_STATES]; | 
|  | 116 |  | 
|  | 117 | /* AC97 codec */ | 
|  | 118 | struct ac97_codec *ac97_codec; | 
|  | 119 | u16 ac97_features; | 
|  | 120 |  | 
|  | 121 | /* debugging stuff */ | 
|  | 122 | struct stats { | 
|  | 123 | unsigned int wav_intrs, adc_intrs; | 
|  | 124 | unsigned int blocks, underrun, error; | 
|  | 125 | } stats; | 
|  | 126 | } ad1889_dev_t; | 
|  | 127 |  | 
|  | 128 | typedef struct ad1889_reg { | 
|  | 129 | const char *name; | 
|  | 130 | int offset; | 
|  | 131 | int width; | 
|  | 132 | } ad1889_reg_t; | 
|  | 133 |  | 
|  | 134 | #endif |