149148020SSam Ravnborg /* 249148020SSam Ravnborg ** asm-m68k/amigahw.h -- This header defines some macros and pointers for 349148020SSam Ravnborg ** the various Amiga custom hardware registers. 449148020SSam Ravnborg ** The naming conventions used here conform to those 549148020SSam Ravnborg ** used in the Amiga Hardware Reference Manual, 3rd Edition 649148020SSam Ravnborg ** 749148020SSam Ravnborg ** Copyright 1992 by Greg Harp 849148020SSam Ravnborg ** 949148020SSam Ravnborg ** This file is subject to the terms and conditions of the GNU General Public 1049148020SSam Ravnborg ** License. See the file COPYING in the main directory of this archive 1149148020SSam Ravnborg ** for more details. 1249148020SSam Ravnborg ** 1349148020SSam Ravnborg ** Created: 9/24/92 by Greg Harp 1449148020SSam Ravnborg */ 1549148020SSam Ravnborg 1649148020SSam Ravnborg #ifndef _M68K_AMIGAHW_H 1749148020SSam Ravnborg #define _M68K_AMIGAHW_H 1849148020SSam Ravnborg 1949148020SSam Ravnborg #include <linux/ioport.h> 2049148020SSam Ravnborg 21*7bc44968SGeert Uytterhoeven #include <asm/bootinfo-amiga.h> 2249148020SSam Ravnborg 2349148020SSam Ravnborg 2449148020SSam Ravnborg /* 2549148020SSam Ravnborg * Chipsets 2649148020SSam Ravnborg */ 2749148020SSam Ravnborg 2849148020SSam Ravnborg extern unsigned long amiga_chipset; 2949148020SSam Ravnborg 3049148020SSam Ravnborg 3149148020SSam Ravnborg /* 3249148020SSam Ravnborg * Miscellaneous 3349148020SSam Ravnborg */ 3449148020SSam Ravnborg 3549148020SSam Ravnborg extern unsigned long amiga_eclock; /* 700 kHz E Peripheral Clock */ 3649148020SSam Ravnborg extern unsigned long amiga_colorclock; /* 3.5 MHz Color Clock */ 3749148020SSam Ravnborg extern unsigned long amiga_chip_size; /* Chip RAM Size (bytes) */ 3849148020SSam Ravnborg extern unsigned char amiga_vblank; /* VBLANK Frequency */ 3949148020SSam Ravnborg 4049148020SSam Ravnborg 4149148020SSam Ravnborg #define AMIGAHW_DECLARE(name) unsigned name : 1 4249148020SSam Ravnborg #define AMIGAHW_SET(name) (amiga_hw_present.name = 1) 4349148020SSam Ravnborg #define AMIGAHW_PRESENT(name) (amiga_hw_present.name) 4449148020SSam Ravnborg 4549148020SSam Ravnborg struct amiga_hw_present { 4649148020SSam Ravnborg /* video hardware */ 4749148020SSam Ravnborg AMIGAHW_DECLARE(AMI_VIDEO); /* Amiga Video */ 4849148020SSam Ravnborg AMIGAHW_DECLARE(AMI_BLITTER); /* Amiga Blitter */ 4949148020SSam Ravnborg AMIGAHW_DECLARE(AMBER_FF); /* Amber Flicker Fixer */ 5049148020SSam Ravnborg /* sound hardware */ 5149148020SSam Ravnborg AMIGAHW_DECLARE(AMI_AUDIO); /* Amiga Audio */ 5249148020SSam Ravnborg /* disk storage interfaces */ 5349148020SSam Ravnborg AMIGAHW_DECLARE(AMI_FLOPPY); /* Amiga Floppy */ 5449148020SSam Ravnborg AMIGAHW_DECLARE(A3000_SCSI); /* SCSI (wd33c93, A3000 alike) */ 5549148020SSam Ravnborg AMIGAHW_DECLARE(A4000_SCSI); /* SCSI (ncr53c710, A4000T alike) */ 5649148020SSam Ravnborg AMIGAHW_DECLARE(A1200_IDE); /* IDE (A1200 alike) */ 5749148020SSam Ravnborg AMIGAHW_DECLARE(A4000_IDE); /* IDE (A4000 alike) */ 5849148020SSam Ravnborg AMIGAHW_DECLARE(CD_ROM); /* CD ROM drive */ 5949148020SSam Ravnborg /* other I/O hardware */ 6049148020SSam Ravnborg AMIGAHW_DECLARE(AMI_KEYBOARD); /* Amiga Keyboard */ 6149148020SSam Ravnborg AMIGAHW_DECLARE(AMI_MOUSE); /* Amiga Mouse */ 6249148020SSam Ravnborg AMIGAHW_DECLARE(AMI_SERIAL); /* Amiga Serial */ 6349148020SSam Ravnborg AMIGAHW_DECLARE(AMI_PARALLEL); /* Amiga Parallel */ 6449148020SSam Ravnborg /* real time clocks */ 6549148020SSam Ravnborg AMIGAHW_DECLARE(A2000_CLK); /* Hardware Clock (A2000 alike) */ 6649148020SSam Ravnborg AMIGAHW_DECLARE(A3000_CLK); /* Hardware Clock (A3000 alike) */ 6749148020SSam Ravnborg /* supporting hardware */ 6849148020SSam Ravnborg AMIGAHW_DECLARE(CHIP_RAM); /* Chip RAM */ 6949148020SSam Ravnborg AMIGAHW_DECLARE(PAULA); /* Paula (8364) */ 7049148020SSam Ravnborg AMIGAHW_DECLARE(DENISE); /* Denise (8362) */ 7149148020SSam Ravnborg AMIGAHW_DECLARE(DENISE_HR); /* Denise (8373) */ 7249148020SSam Ravnborg AMIGAHW_DECLARE(LISA); /* Lisa (8375) */ 7349148020SSam Ravnborg AMIGAHW_DECLARE(AGNUS_PAL); /* Normal/Fat PAL Agnus (8367/8371) */ 7449148020SSam Ravnborg AMIGAHW_DECLARE(AGNUS_NTSC); /* Normal/Fat NTSC Agnus (8361/8370) */ 7549148020SSam Ravnborg AMIGAHW_DECLARE(AGNUS_HR_PAL); /* Fat Hires PAL Agnus (8372) */ 7649148020SSam Ravnborg AMIGAHW_DECLARE(AGNUS_HR_NTSC); /* Fat Hires NTSC Agnus (8372) */ 7749148020SSam Ravnborg AMIGAHW_DECLARE(ALICE_PAL); /* PAL Alice (8374) */ 7849148020SSam Ravnborg AMIGAHW_DECLARE(ALICE_NTSC); /* NTSC Alice (8374) */ 7949148020SSam Ravnborg AMIGAHW_DECLARE(MAGIC_REKICK); /* A3000 Magic Hard Rekick */ 8049148020SSam Ravnborg AMIGAHW_DECLARE(PCMCIA); /* PCMCIA Slot */ 8149148020SSam Ravnborg AMIGAHW_DECLARE(ZORRO); /* Zorro AutoConfig */ 8249148020SSam Ravnborg AMIGAHW_DECLARE(ZORRO3); /* Zorro III */ 8349148020SSam Ravnborg }; 8449148020SSam Ravnborg 8549148020SSam Ravnborg extern struct amiga_hw_present amiga_hw_present; 8649148020SSam Ravnborg 8749148020SSam Ravnborg struct CUSTOM { 8849148020SSam Ravnborg unsigned short bltddat; 8949148020SSam Ravnborg unsigned short dmaconr; 9049148020SSam Ravnborg unsigned short vposr; 9149148020SSam Ravnborg unsigned short vhposr; 9249148020SSam Ravnborg unsigned short dskdatr; 9349148020SSam Ravnborg unsigned short joy0dat; 9449148020SSam Ravnborg unsigned short joy1dat; 9549148020SSam Ravnborg unsigned short clxdat; 9649148020SSam Ravnborg unsigned short adkconr; 9749148020SSam Ravnborg unsigned short pot0dat; 9849148020SSam Ravnborg unsigned short pot1dat; 9949148020SSam Ravnborg unsigned short potgor; 10049148020SSam Ravnborg unsigned short serdatr; 10149148020SSam Ravnborg unsigned short dskbytr; 10249148020SSam Ravnborg unsigned short intenar; 10349148020SSam Ravnborg unsigned short intreqr; 10449148020SSam Ravnborg unsigned char *dskptr; 10549148020SSam Ravnborg unsigned short dsklen; 10649148020SSam Ravnborg unsigned short dskdat; 10749148020SSam Ravnborg unsigned short refptr; 10849148020SSam Ravnborg unsigned short vposw; 10949148020SSam Ravnborg unsigned short vhposw; 11049148020SSam Ravnborg unsigned short copcon; 11149148020SSam Ravnborg unsigned short serdat; 11249148020SSam Ravnborg unsigned short serper; 11349148020SSam Ravnborg unsigned short potgo; 11449148020SSam Ravnborg unsigned short joytest; 11549148020SSam Ravnborg unsigned short strequ; 11649148020SSam Ravnborg unsigned short strvbl; 11749148020SSam Ravnborg unsigned short strhor; 11849148020SSam Ravnborg unsigned short strlong; 11949148020SSam Ravnborg unsigned short bltcon0; 12049148020SSam Ravnborg unsigned short bltcon1; 12149148020SSam Ravnborg unsigned short bltafwm; 12249148020SSam Ravnborg unsigned short bltalwm; 12349148020SSam Ravnborg unsigned char *bltcpt; 12449148020SSam Ravnborg unsigned char *bltbpt; 12549148020SSam Ravnborg unsigned char *bltapt; 12649148020SSam Ravnborg unsigned char *bltdpt; 12749148020SSam Ravnborg unsigned short bltsize; 12849148020SSam Ravnborg unsigned char pad2d; 12949148020SSam Ravnborg unsigned char bltcon0l; 13049148020SSam Ravnborg unsigned short bltsizv; 13149148020SSam Ravnborg unsigned short bltsizh; 13249148020SSam Ravnborg unsigned short bltcmod; 13349148020SSam Ravnborg unsigned short bltbmod; 13449148020SSam Ravnborg unsigned short bltamod; 13549148020SSam Ravnborg unsigned short bltdmod; 13649148020SSam Ravnborg unsigned short spare2[4]; 13749148020SSam Ravnborg unsigned short bltcdat; 13849148020SSam Ravnborg unsigned short bltbdat; 13949148020SSam Ravnborg unsigned short bltadat; 14049148020SSam Ravnborg unsigned short spare3[3]; 14149148020SSam Ravnborg unsigned short deniseid; 14249148020SSam Ravnborg unsigned short dsksync; 14349148020SSam Ravnborg unsigned short *cop1lc; 14449148020SSam Ravnborg unsigned short *cop2lc; 14549148020SSam Ravnborg unsigned short copjmp1; 14649148020SSam Ravnborg unsigned short copjmp2; 14749148020SSam Ravnborg unsigned short copins; 14849148020SSam Ravnborg unsigned short diwstrt; 14949148020SSam Ravnborg unsigned short diwstop; 15049148020SSam Ravnborg unsigned short ddfstrt; 15149148020SSam Ravnborg unsigned short ddfstop; 15249148020SSam Ravnborg unsigned short dmacon; 15349148020SSam Ravnborg unsigned short clxcon; 15449148020SSam Ravnborg unsigned short intena; 15549148020SSam Ravnborg unsigned short intreq; 15649148020SSam Ravnborg unsigned short adkcon; 15749148020SSam Ravnborg struct { 15849148020SSam Ravnborg unsigned short *audlc; 15949148020SSam Ravnborg unsigned short audlen; 16049148020SSam Ravnborg unsigned short audper; 16149148020SSam Ravnborg unsigned short audvol; 16249148020SSam Ravnborg unsigned short auddat; 16349148020SSam Ravnborg unsigned short audspare[2]; 16449148020SSam Ravnborg } aud[4]; 16549148020SSam Ravnborg unsigned char *bplpt[8]; 16649148020SSam Ravnborg unsigned short bplcon0; 16749148020SSam Ravnborg unsigned short bplcon1; 16849148020SSam Ravnborg unsigned short bplcon2; 16949148020SSam Ravnborg unsigned short bplcon3; 17049148020SSam Ravnborg unsigned short bpl1mod; 17149148020SSam Ravnborg unsigned short bpl2mod; 17249148020SSam Ravnborg unsigned short bplcon4; 17349148020SSam Ravnborg unsigned short clxcon2; 17449148020SSam Ravnborg unsigned short bpldat[8]; 17549148020SSam Ravnborg unsigned char *sprpt[8]; 17649148020SSam Ravnborg struct { 17749148020SSam Ravnborg unsigned short pos; 17849148020SSam Ravnborg unsigned short ctl; 17949148020SSam Ravnborg unsigned short dataa; 18049148020SSam Ravnborg unsigned short datab; 18149148020SSam Ravnborg } spr[8]; 18249148020SSam Ravnborg unsigned short color[32]; 18349148020SSam Ravnborg unsigned short htotal; 18449148020SSam Ravnborg unsigned short hsstop; 18549148020SSam Ravnborg unsigned short hbstrt; 18649148020SSam Ravnborg unsigned short hbstop; 18749148020SSam Ravnborg unsigned short vtotal; 18849148020SSam Ravnborg unsigned short vsstop; 18949148020SSam Ravnborg unsigned short vbstrt; 19049148020SSam Ravnborg unsigned short vbstop; 19149148020SSam Ravnborg unsigned short sprhstrt; 19249148020SSam Ravnborg unsigned short sprhstop; 19349148020SSam Ravnborg unsigned short bplhstrt; 19449148020SSam Ravnborg unsigned short bplhstop; 19549148020SSam Ravnborg unsigned short hhposw; 19649148020SSam Ravnborg unsigned short hhposr; 19749148020SSam Ravnborg unsigned short beamcon0; 19849148020SSam Ravnborg unsigned short hsstrt; 19949148020SSam Ravnborg unsigned short vsstrt; 20049148020SSam Ravnborg unsigned short hcenter; 20149148020SSam Ravnborg unsigned short diwhigh; 20249148020SSam Ravnborg unsigned short spare4[11]; 20349148020SSam Ravnborg unsigned short fmode; 20449148020SSam Ravnborg }; 20549148020SSam Ravnborg 20649148020SSam Ravnborg /* 20749148020SSam Ravnborg * DMA register bits 20849148020SSam Ravnborg */ 20949148020SSam Ravnborg #define DMAF_SETCLR (0x8000) 21049148020SSam Ravnborg #define DMAF_AUD0 (0x0001) 21149148020SSam Ravnborg #define DMAF_AUD1 (0x0002) 21249148020SSam Ravnborg #define DMAF_AUD2 (0x0004) 21349148020SSam Ravnborg #define DMAF_AUD3 (0x0008) 21449148020SSam Ravnborg #define DMAF_DISK (0x0010) 21549148020SSam Ravnborg #define DMAF_SPRITE (0x0020) 21649148020SSam Ravnborg #define DMAF_BLITTER (0x0040) 21749148020SSam Ravnborg #define DMAF_COPPER (0x0080) 21849148020SSam Ravnborg #define DMAF_RASTER (0x0100) 21949148020SSam Ravnborg #define DMAF_MASTER (0x0200) 22049148020SSam Ravnborg #define DMAF_BLITHOG (0x0400) 22149148020SSam Ravnborg #define DMAF_BLTNZERO (0x2000) 22249148020SSam Ravnborg #define DMAF_BLTDONE (0x4000) 22349148020SSam Ravnborg #define DMAF_ALL (0x01FF) 22449148020SSam Ravnborg 22549148020SSam Ravnborg struct CIA { 22649148020SSam Ravnborg unsigned char pra; char pad0[0xff]; 22749148020SSam Ravnborg unsigned char prb; char pad1[0xff]; 22849148020SSam Ravnborg unsigned char ddra; char pad2[0xff]; 22949148020SSam Ravnborg unsigned char ddrb; char pad3[0xff]; 23049148020SSam Ravnborg unsigned char talo; char pad4[0xff]; 23149148020SSam Ravnborg unsigned char tahi; char pad5[0xff]; 23249148020SSam Ravnborg unsigned char tblo; char pad6[0xff]; 23349148020SSam Ravnborg unsigned char tbhi; char pad7[0xff]; 23449148020SSam Ravnborg unsigned char todlo; char pad8[0xff]; 23549148020SSam Ravnborg unsigned char todmid; char pad9[0xff]; 23649148020SSam Ravnborg unsigned char todhi; char pada[0x1ff]; 23749148020SSam Ravnborg unsigned char sdr; char padb[0xff]; 23849148020SSam Ravnborg unsigned char icr; char padc[0xff]; 23949148020SSam Ravnborg unsigned char cra; char padd[0xff]; 24049148020SSam Ravnborg unsigned char crb; char pade[0xff]; 24149148020SSam Ravnborg }; 24249148020SSam Ravnborg 24349148020SSam Ravnborg #define zTwoBase (0x80000000) 24449148020SSam Ravnborg #define ZTWO_PADDR(x) (((unsigned long)(x))-zTwoBase) 2456112ea08SGeert Uytterhoeven #define ZTWO_VADDR(x) ((void __iomem *)(((unsigned long)(x))+zTwoBase)) 24649148020SSam Ravnborg 24749148020SSam Ravnborg #define CUSTOM_PHYSADDR (0xdff000) 24849148020SSam Ravnborg #define amiga_custom ((*(volatile struct CUSTOM *)(zTwoBase+CUSTOM_PHYSADDR))) 24949148020SSam Ravnborg 25049148020SSam Ravnborg #define CIAA_PHYSADDR (0xbfe001) 25149148020SSam Ravnborg #define CIAB_PHYSADDR (0xbfd000) 25249148020SSam Ravnborg #define ciaa ((*(volatile struct CIA *)(zTwoBase + CIAA_PHYSADDR))) 25349148020SSam Ravnborg #define ciab ((*(volatile struct CIA *)(zTwoBase + CIAB_PHYSADDR))) 25449148020SSam Ravnborg 25549148020SSam Ravnborg #define CHIP_PHYSADDR (0x000000) 25649148020SSam Ravnborg 25749148020SSam Ravnborg void amiga_chip_init (void); 25849148020SSam Ravnborg void *amiga_chip_alloc(unsigned long size, const char *name); 25949148020SSam Ravnborg void *amiga_chip_alloc_res(unsigned long size, struct resource *res); 26049148020SSam Ravnborg void amiga_chip_free(void *ptr); 26149148020SSam Ravnborg unsigned long amiga_chip_avail( void ); /*MILAN*/ 26249148020SSam Ravnborg extern volatile unsigned short amiga_audio_min_period; 26349148020SSam Ravnborg 26449148020SSam Ravnborg static inline void amifb_video_off(void) 26549148020SSam Ravnborg { 26649148020SSam Ravnborg if (amiga_chipset == CS_ECS || amiga_chipset == CS_AGA) { 26749148020SSam Ravnborg /* program Denise/Lisa for a higher maximum play rate */ 26849148020SSam Ravnborg amiga_custom.htotal = 113; /* 31 kHz */ 26949148020SSam Ravnborg amiga_custom.vtotal = 223; /* 70 Hz */ 27049148020SSam Ravnborg amiga_custom.beamcon0 = 0x4390; /* HARDDIS, VAR{BEAM,VSY,HSY,CSY}EN */ 27149148020SSam Ravnborg /* suspend the monitor */ 27249148020SSam Ravnborg amiga_custom.hsstrt = amiga_custom.hsstop = 116; 27349148020SSam Ravnborg amiga_custom.vsstrt = amiga_custom.vsstop = 226; 27449148020SSam Ravnborg amiga_audio_min_period = 57; 27549148020SSam Ravnborg } 27649148020SSam Ravnborg } 27749148020SSam Ravnborg 27849148020SSam Ravnborg struct tod3000 { 27949148020SSam Ravnborg unsigned int :28, second2:4; /* lower digit */ 28049148020SSam Ravnborg unsigned int :28, second1:4; /* upper digit */ 28149148020SSam Ravnborg unsigned int :28, minute2:4; /* lower digit */ 28249148020SSam Ravnborg unsigned int :28, minute1:4; /* upper digit */ 28349148020SSam Ravnborg unsigned int :28, hour2:4; /* lower digit */ 28449148020SSam Ravnborg unsigned int :28, hour1:4; /* upper digit */ 28549148020SSam Ravnborg unsigned int :28, weekday:4; 28649148020SSam Ravnborg unsigned int :28, day2:4; /* lower digit */ 28749148020SSam Ravnborg unsigned int :28, day1:4; /* upper digit */ 28849148020SSam Ravnborg unsigned int :28, month2:4; /* lower digit */ 28949148020SSam Ravnborg unsigned int :28, month1:4; /* upper digit */ 29049148020SSam Ravnborg unsigned int :28, year2:4; /* lower digit */ 29149148020SSam Ravnborg unsigned int :28, year1:4; /* upper digit */ 29249148020SSam Ravnborg unsigned int :28, cntrl1:4; /* control-byte 1 */ 29349148020SSam Ravnborg unsigned int :28, cntrl2:4; /* control-byte 2 */ 29449148020SSam Ravnborg unsigned int :28, cntrl3:4; /* control-byte 3 */ 29549148020SSam Ravnborg }; 29649148020SSam Ravnborg #define TOD3000_CNTRL1_HOLD 0 29749148020SSam Ravnborg #define TOD3000_CNTRL1_FREE 9 29849148020SSam Ravnborg #define tod_3000 ((*(volatile struct tod3000 *)(zTwoBase+0xDC0000))) 29949148020SSam Ravnborg 30049148020SSam Ravnborg struct tod2000 { 30149148020SSam Ravnborg unsigned int :28, second2:4; /* lower digit */ 30249148020SSam Ravnborg unsigned int :28, second1:4; /* upper digit */ 30349148020SSam Ravnborg unsigned int :28, minute2:4; /* lower digit */ 30449148020SSam Ravnborg unsigned int :28, minute1:4; /* upper digit */ 30549148020SSam Ravnborg unsigned int :28, hour2:4; /* lower digit */ 30649148020SSam Ravnborg unsigned int :28, hour1:4; /* upper digit */ 30749148020SSam Ravnborg unsigned int :28, day2:4; /* lower digit */ 30849148020SSam Ravnborg unsigned int :28, day1:4; /* upper digit */ 30949148020SSam Ravnborg unsigned int :28, month2:4; /* lower digit */ 31049148020SSam Ravnborg unsigned int :28, month1:4; /* upper digit */ 31149148020SSam Ravnborg unsigned int :28, year2:4; /* lower digit */ 31249148020SSam Ravnborg unsigned int :28, year1:4; /* upper digit */ 31349148020SSam Ravnborg unsigned int :28, weekday:4; 31449148020SSam Ravnborg unsigned int :28, cntrl1:4; /* control-byte 1 */ 31549148020SSam Ravnborg unsigned int :28, cntrl2:4; /* control-byte 2 */ 31649148020SSam Ravnborg unsigned int :28, cntrl3:4; /* control-byte 3 */ 31749148020SSam Ravnborg }; 31849148020SSam Ravnborg 31949148020SSam Ravnborg #define TOD2000_CNTRL1_HOLD (1<<0) 32049148020SSam Ravnborg #define TOD2000_CNTRL1_BUSY (1<<1) 32149148020SSam Ravnborg #define TOD2000_CNTRL3_24HMODE (1<<2) 32249148020SSam Ravnborg #define TOD2000_HOUR1_PM (1<<2) 32349148020SSam Ravnborg #define tod_2000 ((*(volatile struct tod2000 *)(zTwoBase+0xDC0000))) 32449148020SSam Ravnborg 32549148020SSam Ravnborg #endif /* _M68K_AMIGAHW_H */ 326