root/arch/m68k/include/asm/amigahw.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. amifb_video_off

   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 */

/* [<][>][^][v][top][bottom][index][help] */