cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

amigahw.h (10737B)


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