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