linux/arch/m68k/include/asm/amigahw.h
<<
>>
Prefs
   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
  28extern unsigned long amiga_chipset;
  29
  30
  31    /*
  32     *  Miscellaneous
  33     */
  34
  35extern unsigned long amiga_eclock;      /* 700 kHz E Peripheral Clock */
  36extern unsigned long amiga_colorclock;  /* 3.5 MHz Color Clock */
  37extern unsigned long amiga_chip_size;   /* Chip RAM Size (bytes) */
  38extern 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
  45struct 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
  85extern struct amiga_hw_present amiga_hw_present;
  86
  87struct 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
 225struct 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
 257void amiga_chip_init (void);
 258void *amiga_chip_alloc(unsigned long size, const char *name);
 259void *amiga_chip_alloc_res(unsigned long size, struct resource *res);
 260void amiga_chip_free(void *ptr);
 261unsigned long amiga_chip_avail( void ); /*MILAN*/
 262extern volatile unsigned short amiga_audio_min_period;
 263
 264static 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
 278struct 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
 300struct 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