xref: /linux/arch/m68k/include/asm/amigahw.h (revision 7bc449688bf73891625616f3f2e93e359603016b)
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