Contents of /alx-src/tags/kernel26-2.6.12-alx-r9/include/asm-m68k/amigahw.h
Parent Directory
|
Revision Log
Revision 630 -
(show annotations)
(download)
Wed Mar 4 11:03:09 2009 UTC (15 years, 3 months ago) by niro
File MIME type: text/plain
File size: 11349 byte(s)
Wed Mar 4 11:03:09 2009 UTC (15 years, 3 months ago) by niro
File MIME type: text/plain
File size: 11349 byte(s)
Tag kernel26-2.6.12-alx-r9
1 | /* |
2 | ** asm-m68k/amigahw.h -- This header defines some macros and pointers for |
3 | ** the various Amiga custom hardware registers. |
4 | ** The naming conventions used here conform to those |
5 | ** used in the Amiga Hardware Reference Manual, 3rd Edition |
6 | ** |
7 | ** Copyright 1992 by Greg Harp |
8 | ** |
9 | ** This file is subject to the terms and conditions of the GNU General Public |
10 | ** License. See the file COPYING in the main directory of this archive |
11 | ** for more details. |
12 | ** |
13 | ** Created: 9/24/92 by Greg Harp |
14 | */ |
15 | |
16 | #ifndef _M68K_AMIGAHW_H |
17 | #define _M68K_AMIGAHW_H |
18 | |
19 | #include <linux/ioport.h> |
20 | |
21 | /* |
22 | * Different Amiga models |
23 | */ |
24 | |
25 | extern unsigned long amiga_model; |
26 | |
27 | #define AMI_UNKNOWN (0) |
28 | #define AMI_500 (1) |
29 | #define AMI_500PLUS (2) |
30 | #define AMI_600 (3) |
31 | #define AMI_1000 (4) |
32 | #define AMI_1200 (5) |
33 | #define AMI_2000 (6) |
34 | #define AMI_2500 (7) |
35 | #define AMI_3000 (8) |
36 | #define AMI_3000T (9) |
37 | #define AMI_3000PLUS (10) |
38 | #define AMI_4000 (11) |
39 | #define AMI_4000T (12) |
40 | #define AMI_CDTV (13) |
41 | #define AMI_CD32 (14) |
42 | #define AMI_DRACO (15) |
43 | |
44 | |
45 | /* |
46 | * Chipsets |
47 | */ |
48 | |
49 | extern unsigned long amiga_chipset; |
50 | |
51 | #define CS_STONEAGE (0) |
52 | #define CS_OCS (1) |
53 | #define CS_ECS (2) |
54 | #define CS_AGA (3) |
55 | |
56 | |
57 | /* |
58 | * Miscellaneous |
59 | */ |
60 | |
61 | extern unsigned long amiga_eclock; /* 700 kHz E Peripheral Clock */ |
62 | extern unsigned long amiga_masterclock; /* 28 MHz Master Clock */ |
63 | extern unsigned long amiga_colorclock; /* 3.5 MHz Color Clock */ |
64 | extern unsigned long amiga_chip_size; /* Chip RAM Size (bytes) */ |
65 | extern unsigned char amiga_vblank; /* VBLANK Frequency */ |
66 | extern unsigned char amiga_psfreq; /* Power Supply Frequency */ |
67 | |
68 | |
69 | #define AMIGAHW_DECLARE(name) unsigned name : 1 |
70 | #define AMIGAHW_SET(name) (amiga_hw_present.name = 1) |
71 | #define AMIGAHW_PRESENT(name) (amiga_hw_present.name) |
72 | |
73 | struct amiga_hw_present { |
74 | /* video hardware */ |
75 | AMIGAHW_DECLARE(AMI_VIDEO); /* Amiga Video */ |
76 | AMIGAHW_DECLARE(AMI_BLITTER); /* Amiga Blitter */ |
77 | AMIGAHW_DECLARE(AMBER_FF); /* Amber Flicker Fixer */ |
78 | /* sound hardware */ |
79 | AMIGAHW_DECLARE(AMI_AUDIO); /* Amiga Audio */ |
80 | /* disk storage interfaces */ |
81 | AMIGAHW_DECLARE(AMI_FLOPPY); /* Amiga Floppy */ |
82 | AMIGAHW_DECLARE(A3000_SCSI); /* SCSI (wd33c93, A3000 alike) */ |
83 | AMIGAHW_DECLARE(A4000_SCSI); /* SCSI (ncr53c710, A4000T alike) */ |
84 | AMIGAHW_DECLARE(A1200_IDE); /* IDE (A1200 alike) */ |
85 | AMIGAHW_DECLARE(A4000_IDE); /* IDE (A4000 alike) */ |
86 | AMIGAHW_DECLARE(CD_ROM); /* CD ROM drive */ |
87 | /* other I/O hardware */ |
88 | AMIGAHW_DECLARE(AMI_KEYBOARD); /* Amiga Keyboard */ |
89 | AMIGAHW_DECLARE(AMI_MOUSE); /* Amiga Mouse */ |
90 | AMIGAHW_DECLARE(AMI_SERIAL); /* Amiga Serial */ |
91 | AMIGAHW_DECLARE(AMI_PARALLEL); /* Amiga Parallel */ |
92 | /* real time clocks */ |
93 | AMIGAHW_DECLARE(A2000_CLK); /* Hardware Clock (A2000 alike) */ |
94 | AMIGAHW_DECLARE(A3000_CLK); /* Hardware Clock (A3000 alike) */ |
95 | /* supporting hardware */ |
96 | AMIGAHW_DECLARE(CHIP_RAM); /* Chip RAM */ |
97 | AMIGAHW_DECLARE(PAULA); /* Paula (8364) */ |
98 | AMIGAHW_DECLARE(DENISE); /* Denise (8362) */ |
99 | AMIGAHW_DECLARE(DENISE_HR); /* Denise (8373) */ |
100 | AMIGAHW_DECLARE(LISA); /* Lisa (8375) */ |
101 | AMIGAHW_DECLARE(AGNUS_PAL); /* Normal/Fat PAL Agnus (8367/8371) */ |
102 | AMIGAHW_DECLARE(AGNUS_NTSC); /* Normal/Fat NTSC Agnus (8361/8370) */ |
103 | AMIGAHW_DECLARE(AGNUS_HR_PAL); /* Fat Hires PAL Agnus (8372) */ |
104 | AMIGAHW_DECLARE(AGNUS_HR_NTSC); /* Fat Hires NTSC Agnus (8372) */ |
105 | AMIGAHW_DECLARE(ALICE_PAL); /* PAL Alice (8374) */ |
106 | AMIGAHW_DECLARE(ALICE_NTSC); /* NTSC Alice (8374) */ |
107 | AMIGAHW_DECLARE(MAGIC_REKICK); /* A3000 Magic Hard Rekick */ |
108 | AMIGAHW_DECLARE(PCMCIA); /* PCMCIA Slot */ |
109 | AMIGAHW_DECLARE(GG2_ISA); /* GG2 Zorro2ISA Bridge */ |
110 | AMIGAHW_DECLARE(ZORRO); /* Zorro AutoConfig */ |
111 | AMIGAHW_DECLARE(ZORRO3); /* Zorro III */ |
112 | }; |
113 | |
114 | extern struct amiga_hw_present amiga_hw_present; |
115 | |
116 | struct CUSTOM { |
117 | unsigned short bltddat; |
118 | unsigned short dmaconr; |
119 | unsigned short vposr; |
120 | unsigned short vhposr; |
121 | unsigned short dskdatr; |
122 | unsigned short joy0dat; |
123 | unsigned short joy1dat; |
124 | unsigned short clxdat; |
125 | unsigned short adkconr; |
126 | unsigned short pot0dat; |
127 | unsigned short pot1dat; |
128 | unsigned short potgor; |
129 | unsigned short serdatr; |
130 | unsigned short dskbytr; |
131 | unsigned short intenar; |
132 | unsigned short intreqr; |
133 | unsigned char *dskptr; |
134 | unsigned short dsklen; |
135 | unsigned short dskdat; |
136 | unsigned short refptr; |
137 | unsigned short vposw; |
138 | unsigned short vhposw; |
139 | unsigned short copcon; |
140 | unsigned short serdat; |
141 | unsigned short serper; |
142 | unsigned short potgo; |
143 | unsigned short joytest; |
144 | unsigned short strequ; |
145 | unsigned short strvbl; |
146 | unsigned short strhor; |
147 | unsigned short strlong; |
148 | unsigned short bltcon0; |
149 | unsigned short bltcon1; |
150 | unsigned short bltafwm; |
151 | unsigned short bltalwm; |
152 | unsigned char *bltcpt; |
153 | unsigned char *bltbpt; |
154 | unsigned char *bltapt; |
155 | unsigned char *bltdpt; |
156 | unsigned short bltsize; |
157 | unsigned char pad2d; |
158 | unsigned char bltcon0l; |
159 | unsigned short bltsizv; |
160 | unsigned short bltsizh; |
161 | unsigned short bltcmod; |
162 | unsigned short bltbmod; |
163 | unsigned short bltamod; |
164 | unsigned short bltdmod; |
165 | unsigned short spare2[4]; |
166 | unsigned short bltcdat; |
167 | unsigned short bltbdat; |
168 | unsigned short bltadat; |
169 | unsigned short spare3[3]; |
170 | unsigned short deniseid; |
171 | unsigned short dsksync; |
172 | unsigned short *cop1lc; |
173 | unsigned short *cop2lc; |
174 | unsigned short copjmp1; |
175 | unsigned short copjmp2; |
176 | unsigned short copins; |
177 | unsigned short diwstrt; |
178 | unsigned short diwstop; |
179 | unsigned short ddfstrt; |
180 | unsigned short ddfstop; |
181 | unsigned short dmacon; |
182 | unsigned short clxcon; |
183 | unsigned short intena; |
184 | unsigned short intreq; |
185 | unsigned short adkcon; |
186 | struct { |
187 | unsigned short *audlc; |
188 | unsigned short audlen; |
189 | unsigned short audper; |
190 | unsigned short audvol; |
191 | unsigned short auddat; |
192 | unsigned short audspare[2]; |
193 | } aud[4]; |
194 | unsigned char *bplpt[8]; |
195 | unsigned short bplcon0; |
196 | unsigned short bplcon1; |
197 | unsigned short bplcon2; |
198 | unsigned short bplcon3; |
199 | unsigned short bpl1mod; |
200 | unsigned short bpl2mod; |
201 | unsigned short bplcon4; |
202 | unsigned short clxcon2; |
203 | unsigned short bpldat[8]; |
204 | unsigned char *sprpt[8]; |
205 | struct { |
206 | unsigned short pos; |
207 | unsigned short ctl; |
208 | unsigned short dataa; |
209 | unsigned short datab; |
210 | } spr[8]; |
211 | unsigned short color[32]; |
212 | unsigned short htotal; |
213 | unsigned short hsstop; |
214 | unsigned short hbstrt; |
215 | unsigned short hbstop; |
216 | unsigned short vtotal; |
217 | unsigned short vsstop; |
218 | unsigned short vbstrt; |
219 | unsigned short vbstop; |
220 | unsigned short sprhstrt; |
221 | unsigned short sprhstop; |
222 | unsigned short bplhstrt; |
223 | unsigned short bplhstop; |
224 | unsigned short hhposw; |
225 | unsigned short hhposr; |
226 | unsigned short beamcon0; |
227 | unsigned short hsstrt; |
228 | unsigned short vsstrt; |
229 | unsigned short hcenter; |
230 | unsigned short diwhigh; |
231 | unsigned short spare4[11]; |
232 | unsigned short fmode; |
233 | }; |
234 | |
235 | /* |
236 | * DMA register bits |
237 | */ |
238 | #define DMAF_SETCLR (0x8000) |
239 | #define DMAF_AUD0 (0x0001) |
240 | #define DMAF_AUD1 (0x0002) |
241 | #define DMAF_AUD2 (0x0004) |
242 | #define DMAF_AUD3 (0x0008) |
243 | #define DMAF_DISK (0x0010) |
244 | #define DMAF_SPRITE (0x0020) |
245 | #define DMAF_BLITTER (0x0040) |
246 | #define DMAF_COPPER (0x0080) |
247 | #define DMAF_RASTER (0x0100) |
248 | #define DMAF_MASTER (0x0200) |
249 | #define DMAF_BLITHOG (0x0400) |
250 | #define DMAF_BLTNZERO (0x2000) |
251 | #define DMAF_BLTDONE (0x4000) |
252 | #define DMAF_ALL (0x01FF) |
253 | |
254 | struct CIA { |
255 | unsigned char pra; char pad0[0xff]; |
256 | unsigned char prb; char pad1[0xff]; |
257 | unsigned char ddra; char pad2[0xff]; |
258 | unsigned char ddrb; char pad3[0xff]; |
259 | unsigned char talo; char pad4[0xff]; |
260 | unsigned char tahi; char pad5[0xff]; |
261 | unsigned char tblo; char pad6[0xff]; |
262 | unsigned char tbhi; char pad7[0xff]; |
263 | unsigned char todlo; char pad8[0xff]; |
264 | unsigned char todmid; char pad9[0xff]; |
265 | unsigned char todhi; char pada[0x1ff]; |
266 | unsigned char sdr; char padb[0xff]; |
267 | unsigned char icr; char padc[0xff]; |
268 | unsigned char cra; char padd[0xff]; |
269 | unsigned char crb; char pade[0xff]; |
270 | }; |
271 | |
272 | #define zTwoBase (0x80000000) |
273 | #define ZTWO_PADDR(x) (((unsigned long)(x))-zTwoBase) |
274 | #define ZTWO_VADDR(x) (((unsigned long)(x))+zTwoBase) |
275 | |
276 | #define CUSTOM_PHYSADDR (0xdff000) |
277 | #define custom ((*(volatile struct CUSTOM *)(zTwoBase+CUSTOM_PHYSADDR))) |
278 | |
279 | #define CIAA_PHYSADDR (0xbfe001) |
280 | #define CIAB_PHYSADDR (0xbfd000) |
281 | #define ciaa ((*(volatile struct CIA *)(zTwoBase + CIAA_PHYSADDR))) |
282 | #define ciab ((*(volatile struct CIA *)(zTwoBase + CIAB_PHYSADDR))) |
283 | |
284 | #define CHIP_PHYSADDR (0x000000) |
285 | |
286 | void amiga_chip_init (void); |
287 | void *amiga_chip_alloc(unsigned long size, const char *name); |
288 | void *amiga_chip_alloc_res(unsigned long size, struct resource *res); |
289 | void amiga_chip_free(void *ptr); |
290 | unsigned long amiga_chip_avail( void ); /*MILAN*/ |
291 | extern volatile unsigned short amiga_audio_min_period; |
292 | |
293 | static inline void amifb_video_off(void) |
294 | { |
295 | if (amiga_chipset == CS_ECS || amiga_chipset == CS_AGA) { |
296 | /* program Denise/Lisa for a higher maximum play rate */ |
297 | custom.htotal = 113; /* 31 kHz */ |
298 | custom.vtotal = 223; /* 70 Hz */ |
299 | custom.beamcon0 = 0x4390; /* HARDDIS, VAR{BEAM,VSY,HSY,CSY}EN */ |
300 | /* suspend the monitor */ |
301 | custom.hsstrt = custom.hsstop = 116; |
302 | custom.vsstrt = custom.vsstop = 226; |
303 | amiga_audio_min_period = 57; |
304 | } |
305 | } |
306 | |
307 | struct tod3000 { |
308 | unsigned int :28, second2:4; /* lower digit */ |
309 | unsigned int :28, second1:4; /* upper digit */ |
310 | unsigned int :28, minute2:4; /* lower digit */ |
311 | unsigned int :28, minute1:4; /* upper digit */ |
312 | unsigned int :28, hour2:4; /* lower digit */ |
313 | unsigned int :28, hour1:4; /* upper digit */ |
314 | unsigned int :28, weekday:4; |
315 | unsigned int :28, day2:4; /* lower digit */ |
316 | unsigned int :28, day1:4; /* upper digit */ |
317 | unsigned int :28, month2:4; /* lower digit */ |
318 | unsigned int :28, month1:4; /* upper digit */ |
319 | unsigned int :28, year2:4; /* lower digit */ |
320 | unsigned int :28, year1:4; /* upper digit */ |
321 | unsigned int :28, cntrl1:4; /* control-byte 1 */ |
322 | unsigned int :28, cntrl2:4; /* control-byte 2 */ |
323 | unsigned int :28, cntrl3:4; /* control-byte 3 */ |
324 | }; |
325 | #define TOD3000_CNTRL1_HOLD 0 |
326 | #define TOD3000_CNTRL1_FREE 9 |
327 | #define tod_3000 ((*(volatile struct tod3000 *)(zTwoBase+0xDC0000))) |
328 | |
329 | struct tod2000 { |
330 | unsigned int :28, second2:4; /* lower digit */ |
331 | unsigned int :28, second1:4; /* upper digit */ |
332 | unsigned int :28, minute2:4; /* lower digit */ |
333 | unsigned int :28, minute1:4; /* upper digit */ |
334 | unsigned int :28, hour2:4; /* lower digit */ |
335 | unsigned int :28, hour1:4; /* upper digit */ |
336 | unsigned int :28, day2:4; /* lower digit */ |
337 | unsigned int :28, day1:4; /* upper digit */ |
338 | unsigned int :28, month2:4; /* lower digit */ |
339 | unsigned int :28, month1:4; /* upper digit */ |
340 | unsigned int :28, year2:4; /* lower digit */ |
341 | unsigned int :28, year1:4; /* upper digit */ |
342 | unsigned int :28, weekday:4; |
343 | unsigned int :28, cntrl1:4; /* control-byte 1 */ |
344 | unsigned int :28, cntrl2:4; /* control-byte 2 */ |
345 | unsigned int :28, cntrl3:4; /* control-byte 3 */ |
346 | }; |
347 | |
348 | #define TOD2000_CNTRL1_HOLD (1<<0) |
349 | #define TOD2000_CNTRL1_BUSY (1<<1) |
350 | #define TOD2000_CNTRL3_24HMODE (1<<2) |
351 | #define TOD2000_HOUR1_PM (1<<2) |
352 | #define tod_2000 ((*(volatile struct tod2000 *)(zTwoBase+0xDC0000))) |
353 | |
354 | #endif /* _M68K_AMIGAHW_H */ |