Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/m68k/include/asm/amigahw.h
26481 views
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
327