]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
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 |