[funini.com] -> [kei@sodan] -> Kernel Reading

root/include/asm-m68k/amigahw.h

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

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. amifb_video_off

/*
** asm-m68k/amigahw.h -- This header defines some macros and pointers for
**                    the various Amiga custom hardware registers.
**                    The naming conventions used here conform to those
**                    used in the Amiga Hardware Reference Manual, 3rd Edition
**
** Copyright 1992 by Greg Harp
**
** This file is subject to the terms and conditions of the GNU General Public
** License.  See the file COPYING in the main directory of this archive
** for more details.
**
** Created: 9/24/92 by Greg Harp
*/

#ifndef _M68K_AMIGAHW_H
#define _M68K_AMIGAHW_H

#include <linux/ioport.h>

    /*
     *  Different Amiga models
     */

#define AMI_UNKNOWN     (0)
#define AMI_500         (1)
#define AMI_500PLUS     (2)
#define AMI_600         (3)
#define AMI_1000        (4)
#define AMI_1200        (5)
#define AMI_2000        (6)
#define AMI_2500        (7)
#define AMI_3000        (8)
#define AMI_3000T       (9)
#define AMI_3000PLUS    (10)
#define AMI_4000        (11)
#define AMI_4000T       (12)
#define AMI_CDTV        (13)
#define AMI_CD32        (14)
#define AMI_DRACO       (15)


    /*
     *  Chipsets
     */

extern unsigned long amiga_chipset;

#define CS_STONEAGE     (0)
#define CS_OCS          (1)
#define CS_ECS          (2)
#define CS_AGA          (3)


    /*
     *  Miscellaneous
     */

extern unsigned long amiga_eclock;      /* 700 kHz E Peripheral Clock */
extern unsigned long amiga_colorclock;  /* 3.5 MHz Color Clock */
extern unsigned long amiga_chip_size;   /* Chip RAM Size (bytes) */
extern unsigned char amiga_vblank;      /* VBLANK Frequency */


#define AMIGAHW_DECLARE(name)   unsigned name : 1
#define AMIGAHW_SET(name)       (amiga_hw_present.name = 1)
#define AMIGAHW_PRESENT(name)   (amiga_hw_present.name)

struct amiga_hw_present {
    /* video hardware */
    AMIGAHW_DECLARE(AMI_VIDEO);         /* Amiga Video */
    AMIGAHW_DECLARE(AMI_BLITTER);       /* Amiga Blitter */
    AMIGAHW_DECLARE(AMBER_FF);          /* Amber Flicker Fixer */
    /* sound hardware */
    AMIGAHW_DECLARE(AMI_AUDIO);         /* Amiga Audio */
    /* disk storage interfaces */
    AMIGAHW_DECLARE(AMI_FLOPPY);        /* Amiga Floppy */
    AMIGAHW_DECLARE(A3000_SCSI);        /* SCSI (wd33c93, A3000 alike) */
    AMIGAHW_DECLARE(A4000_SCSI);        /* SCSI (ncr53c710, A4000T alike) */
    AMIGAHW_DECLARE(A1200_IDE);         /* IDE (A1200 alike) */
    AMIGAHW_DECLARE(A4000_IDE);         /* IDE (A4000 alike) */
    AMIGAHW_DECLARE(CD_ROM);            /* CD ROM drive */
    /* other I/O hardware */
    AMIGAHW_DECLARE(AMI_KEYBOARD);      /* Amiga Keyboard */
    AMIGAHW_DECLARE(AMI_MOUSE);         /* Amiga Mouse */
    AMIGAHW_DECLARE(AMI_SERIAL);        /* Amiga Serial */
    AMIGAHW_DECLARE(AMI_PARALLEL);      /* Amiga Parallel */
    /* real time clocks */
    AMIGAHW_DECLARE(A2000_CLK);         /* Hardware Clock (A2000 alike) */
    AMIGAHW_DECLARE(A3000_CLK);         /* Hardware Clock (A3000 alike) */
    /* supporting hardware */
    AMIGAHW_DECLARE(CHIP_RAM);          /* Chip RAM */
    AMIGAHW_DECLARE(PAULA);             /* Paula (8364) */
    AMIGAHW_DECLARE(DENISE);            /* Denise (8362) */
    AMIGAHW_DECLARE(DENISE_HR);         /* Denise (8373) */
    AMIGAHW_DECLARE(LISA);              /* Lisa (8375) */
    AMIGAHW_DECLARE(AGNUS_PAL);         /* Normal/Fat PAL Agnus (8367/8371) */
    AMIGAHW_DECLARE(AGNUS_NTSC);        /* Normal/Fat NTSC Agnus (8361/8370) */
    AMIGAHW_DECLARE(AGNUS_HR_PAL);      /* Fat Hires PAL Agnus (8372) */
    AMIGAHW_DECLARE(AGNUS_HR_NTSC);     /* Fat Hires NTSC Agnus (8372) */
    AMIGAHW_DECLARE(ALICE_PAL);         /* PAL Alice (8374) */
    AMIGAHW_DECLARE(ALICE_NTSC);        /* NTSC Alice (8374) */
    AMIGAHW_DECLARE(MAGIC_REKICK);      /* A3000 Magic Hard Rekick */
    AMIGAHW_DECLARE(PCMCIA);            /* PCMCIA Slot */
    AMIGAHW_DECLARE(GG2_ISA);           /* GG2 Zorro2ISA Bridge */
    AMIGAHW_DECLARE(ZORRO);             /* Zorro AutoConfig */
    AMIGAHW_DECLARE(ZORRO3);            /* Zorro III */
};

extern struct amiga_hw_present amiga_hw_present;

struct CUSTOM {
    unsigned short bltddat;
    unsigned short dmaconr;
    unsigned short vposr;
    unsigned short vhposr;
    unsigned short dskdatr;
    unsigned short joy0dat;
    unsigned short joy1dat;
    unsigned short clxdat;
    unsigned short adkconr;
    unsigned short pot0dat;
    unsigned short pot1dat;
    unsigned short potgor;
    unsigned short serdatr;
    unsigned short dskbytr;
    unsigned short intenar;
    unsigned short intreqr;
    unsigned char  *dskptr;
    unsigned short dsklen;
    unsigned short dskdat;
    unsigned short refptr;
    unsigned short vposw;
    unsigned short vhposw;
    unsigned short copcon;
    unsigned short serdat;
    unsigned short serper;
    unsigned short potgo;
    unsigned short joytest;
    unsigned short strequ;
    unsigned short strvbl;
    unsigned short strhor;
    unsigned short strlong;
    unsigned short bltcon0;
    unsigned short bltcon1;
    unsigned short bltafwm;
    unsigned short bltalwm;
    unsigned char  *bltcpt;
    unsigned char  *bltbpt;
    unsigned char  *bltapt;
    unsigned char  *bltdpt;
    unsigned short bltsize;
    unsigned char  pad2d;
    unsigned char  bltcon0l;
    unsigned short bltsizv;
    unsigned short bltsizh;
    unsigned short bltcmod;
    unsigned short bltbmod;
    unsigned short bltamod;
    unsigned short bltdmod;
    unsigned short spare2[4];
    unsigned short bltcdat;
    unsigned short bltbdat;
    unsigned short bltadat;
    unsigned short spare3[3];
    unsigned short deniseid;
    unsigned short dsksync;
    unsigned short *cop1lc;
    unsigned short *cop2lc;
    unsigned short copjmp1;
    unsigned short copjmp2;
    unsigned short copins;
    unsigned short diwstrt;
    unsigned short diwstop;
    unsigned short ddfstrt;
    unsigned short ddfstop;
    unsigned short dmacon;
    unsigned short clxcon;
    unsigned short intena;
    unsigned short intreq;
    unsigned short adkcon;
    struct {
        unsigned short  *audlc;
        unsigned short audlen;
        unsigned short audper;
        unsigned short audvol;
        unsigned short auddat;
        unsigned short audspare[2];
    } aud[4];
    unsigned char  *bplpt[8];
    unsigned short bplcon0;
    unsigned short bplcon1;
    unsigned short bplcon2;
    unsigned short bplcon3;
    unsigned short bpl1mod;
    unsigned short bpl2mod;
    unsigned short bplcon4;
    unsigned short clxcon2;
    unsigned short bpldat[8];
    unsigned char  *sprpt[8];
    struct {
        unsigned short pos;
        unsigned short ctl;
        unsigned short dataa;
        unsigned short datab;
    } spr[8];
    unsigned short color[32];
    unsigned short htotal;
    unsigned short hsstop;
    unsigned short hbstrt;
    unsigned short hbstop;
    unsigned short vtotal;
    unsigned short vsstop;
    unsigned short vbstrt;
    unsigned short vbstop;
    unsigned short sprhstrt;
    unsigned short sprhstop;
    unsigned short bplhstrt;
    unsigned short bplhstop;
    unsigned short hhposw;
    unsigned short hhposr;
    unsigned short beamcon0;
    unsigned short hsstrt;
    unsigned short vsstrt;
    unsigned short hcenter;
    unsigned short diwhigh;
    unsigned short spare4[11];
    unsigned short fmode;
};

/*
 * DMA register bits
 */
#define DMAF_SETCLR             (0x8000)
#define DMAF_AUD0               (0x0001)
#define DMAF_AUD1               (0x0002)
#define DMAF_AUD2               (0x0004)
#define DMAF_AUD3               (0x0008)
#define DMAF_DISK               (0x0010)
#define DMAF_SPRITE             (0x0020)
#define DMAF_BLITTER            (0x0040)
#define DMAF_COPPER             (0x0080)
#define DMAF_RASTER             (0x0100)
#define DMAF_MASTER             (0x0200)
#define DMAF_BLITHOG            (0x0400)
#define DMAF_BLTNZERO           (0x2000)
#define DMAF_BLTDONE            (0x4000)
#define DMAF_ALL                (0x01FF)

struct CIA {
    unsigned char pra;          char pad0[0xff];
    unsigned char prb;          char pad1[0xff];
    unsigned char ddra;         char pad2[0xff];
    unsigned char ddrb;         char pad3[0xff];
    unsigned char talo;         char pad4[0xff];
    unsigned char tahi;         char pad5[0xff];
    unsigned char tblo;         char pad6[0xff];
    unsigned char tbhi;         char pad7[0xff];
    unsigned char todlo;        char pad8[0xff];
    unsigned char todmid;       char pad9[0xff];
    unsigned char todhi;        char pada[0x1ff];
    unsigned char sdr;          char padb[0xff];
    unsigned char icr;          char padc[0xff];
    unsigned char cra;          char padd[0xff];
    unsigned char crb;          char pade[0xff];
};

#define zTwoBase (0x80000000)
#define ZTWO_PADDR(x) (((unsigned long)(x))-zTwoBase)
#define ZTWO_VADDR(x) (((unsigned long)(x))+zTwoBase)

#define CUSTOM_PHYSADDR     (0xdff000)
#define amiga_custom ((*(volatile struct CUSTOM *)(zTwoBase+CUSTOM_PHYSADDR)))

#define CIAA_PHYSADDR     (0xbfe001)
#define CIAB_PHYSADDR     (0xbfd000)
#define ciaa   ((*(volatile struct CIA *)(zTwoBase + CIAA_PHYSADDR)))
#define ciab   ((*(volatile struct CIA *)(zTwoBase + CIAB_PHYSADDR)))

#define CHIP_PHYSADDR       (0x000000)

void amiga_chip_init (void);
void *amiga_chip_alloc(unsigned long size, const char *name);
void *amiga_chip_alloc_res(unsigned long size, struct resource *res);
void amiga_chip_free(void *ptr);
unsigned long amiga_chip_avail( void ); /*MILAN*/
extern volatile unsigned short amiga_audio_min_period;

static inline void amifb_video_off(void)
{
        if (amiga_chipset == CS_ECS || amiga_chipset == CS_AGA) {
                /* program Denise/Lisa for a higher maximum play rate */
                amiga_custom.htotal = 113;        /* 31 kHz */
                amiga_custom.vtotal = 223;        /* 70 Hz */
                amiga_custom.beamcon0 = 0x4390;   /* HARDDIS, VAR{BEAM,VSY,HSY,CSY}EN */
                /* suspend the monitor */
                amiga_custom.hsstrt = amiga_custom.hsstop = 116;
                amiga_custom.vsstrt = amiga_custom.vsstop = 226;
                amiga_audio_min_period = 57;
        }
}

struct tod3000 {
  unsigned int  :28, second2:4; /* lower digit */
  unsigned int  :28, second1:4; /* upper digit */
  unsigned int  :28, minute2:4; /* lower digit */
  unsigned int  :28, minute1:4; /* upper digit */
  unsigned int  :28, hour2:4;   /* lower digit */
  unsigned int  :28, hour1:4;   /* upper digit */
  unsigned int  :28, weekday:4;
  unsigned int  :28, day2:4;    /* lower digit */
  unsigned int  :28, day1:4;    /* upper digit */
  unsigned int  :28, month2:4;  /* lower digit */
  unsigned int  :28, month1:4;  /* upper digit */
  unsigned int  :28, year2:4;   /* lower digit */
  unsigned int  :28, year1:4;   /* upper digit */
  unsigned int  :28, cntrl1:4;  /* control-byte 1 */
  unsigned int  :28, cntrl2:4;  /* control-byte 2 */
  unsigned int  :28, cntrl3:4;  /* control-byte 3 */
};
#define TOD3000_CNTRL1_HOLD     0
#define TOD3000_CNTRL1_FREE     9
#define tod_3000 ((*(volatile struct tod3000 *)(zTwoBase+0xDC0000)))

struct tod2000 {
  unsigned int  :28, second2:4; /* lower digit */
  unsigned int  :28, second1:4; /* upper digit */
  unsigned int  :28, minute2:4; /* lower digit */
  unsigned int  :28, minute1:4; /* upper digit */
  unsigned int  :28, hour2:4;   /* lower digit */
  unsigned int  :28, hour1:4;   /* upper digit */
  unsigned int  :28, day2:4;    /* lower digit */
  unsigned int  :28, day1:4;    /* upper digit */
  unsigned int  :28, month2:4;  /* lower digit */
  unsigned int  :28, month1:4;  /* upper digit */
  unsigned int  :28, year2:4;   /* lower digit */
  unsigned int  :28, year1:4;   /* upper digit */
  unsigned int  :28, weekday:4;
  unsigned int  :28, cntrl1:4;  /* control-byte 1 */
  unsigned int  :28, cntrl2:4;  /* control-byte 2 */
  unsigned int  :28, cntrl3:4;  /* control-byte 3 */
};

#define TOD2000_CNTRL1_HOLD     (1<<0)
#define TOD2000_CNTRL1_BUSY     (1<<1)
#define TOD2000_CNTRL3_24HMODE  (1<<2)
#define TOD2000_HOUR1_PM        (1<<2)
#define tod_2000 ((*(volatile struct tod2000 *)(zTwoBase+0xDC0000)))

#endif /* _M68K_AMIGAHW_H */

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

[funini.com] -> [kei@sodan] -> Kernel Reading