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