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 25extern 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 49extern 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 61extern unsigned long amiga_eclock; /* 700 kHz E Peripheral Clock */ 62extern unsigned long amiga_masterclock; /* 28 MHz Master Clock */ 63extern unsigned long amiga_colorclock; /* 3.5 MHz Color Clock */ 64extern unsigned long amiga_chip_size; /* Chip RAM Size (bytes) */ 65extern unsigned char amiga_vblank; /* VBLANK Frequency */ 66extern 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 73struct 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 114extern struct amiga_hw_present amiga_hw_present; 115 116struct 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 254struct 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 286void amiga_chip_init (void); 287void *amiga_chip_alloc(unsigned long size, const char *name); 288void *amiga_chip_alloc_res(unsigned long size, struct resource *res); 289void amiga_chip_free(void *ptr); 290unsigned long amiga_chip_avail( void ); /*MILAN*/ 291extern volatile unsigned short amiga_audio_min_period; 292 293static 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 307struct 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 ((struct tod3000 *)(zTwoBase+0xDC0000)) 328 329struct 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 ((struct tod2000 *)(zTwoBase+0xDC0000)) 353 354#endif /* _M68K_AMIGAHW_H */ 355