diff options
Diffstat (limited to 'include/asm-m68k/amigahw.h')
-rw-r--r-- | include/asm-m68k/amigahw.h | 354 |
1 files changed, 354 insertions, 0 deletions
diff --git a/include/asm-m68k/amigahw.h b/include/asm-m68k/amigahw.h new file mode 100644 index 000000000000..3ae5d8d55ba9 --- /dev/null +++ b/include/asm-m68k/amigahw.h | |||
@@ -0,0 +1,354 @@ | |||
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 */ | ||