home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / asm-m68k / amigahw.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  11.0 KB  |  351 lines

  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.     /*
  22.      *  Different Amiga models
  23.      */
  24.  
  25. #define AMI_UNKNOWN    (0)
  26. #define AMI_500        (1)
  27. #define AMI_500PLUS    (2)
  28. #define AMI_600        (3)
  29. #define AMI_1000    (4)
  30. #define AMI_1200    (5)
  31. #define AMI_2000    (6)
  32. #define AMI_2500    (7)
  33. #define AMI_3000    (8)
  34. #define AMI_3000T    (9)
  35. #define AMI_3000PLUS    (10)
  36. #define AMI_4000    (11)
  37. #define AMI_4000T    (12)
  38. #define AMI_CDTV    (13)
  39. #define AMI_CD32    (14)
  40. #define AMI_DRACO    (15)
  41.  
  42.  
  43.     /*
  44.      *  Chipsets
  45.      */
  46.  
  47. extern unsigned long amiga_chipset;
  48.  
  49. #define CS_STONEAGE    (0)
  50. #define CS_OCS        (1)
  51. #define CS_ECS        (2)
  52. #define CS_AGA        (3)
  53.  
  54.  
  55.     /*
  56.      *  Miscellaneous
  57.      */
  58.  
  59. extern unsigned long amiga_eclock;    /* 700 kHz E Peripheral Clock */
  60. extern unsigned long amiga_colorclock;    /* 3.5 MHz Color Clock */
  61. extern unsigned long amiga_chip_size;    /* Chip RAM Size (bytes) */
  62. extern unsigned char amiga_vblank;    /* VBLANK Frequency */
  63.  
  64.  
  65. #define AMIGAHW_DECLARE(name)    unsigned name : 1
  66. #define AMIGAHW_SET(name)    (amiga_hw_present.name = 1)
  67. #define AMIGAHW_PRESENT(name)    (amiga_hw_present.name)
  68.  
  69. struct amiga_hw_present {
  70.     /* video hardware */
  71.     AMIGAHW_DECLARE(AMI_VIDEO);        /* Amiga Video */
  72.     AMIGAHW_DECLARE(AMI_BLITTER);    /* Amiga Blitter */
  73.     AMIGAHW_DECLARE(AMBER_FF);        /* Amber Flicker Fixer */
  74.     /* sound hardware */
  75.     AMIGAHW_DECLARE(AMI_AUDIO);        /* Amiga Audio */
  76.     /* disk storage interfaces */
  77.     AMIGAHW_DECLARE(AMI_FLOPPY);    /* Amiga Floppy */
  78.     AMIGAHW_DECLARE(A3000_SCSI);    /* SCSI (wd33c93, A3000 alike) */
  79.     AMIGAHW_DECLARE(A4000_SCSI);    /* SCSI (ncr53c710, A4000T alike) */
  80.     AMIGAHW_DECLARE(A1200_IDE);        /* IDE (A1200 alike) */
  81.     AMIGAHW_DECLARE(A4000_IDE);        /* IDE (A4000 alike) */
  82.     AMIGAHW_DECLARE(CD_ROM);        /* CD ROM drive */
  83.     /* other I/O hardware */
  84.     AMIGAHW_DECLARE(AMI_KEYBOARD);    /* Amiga Keyboard */
  85.     AMIGAHW_DECLARE(AMI_MOUSE);        /* Amiga Mouse */
  86.     AMIGAHW_DECLARE(AMI_SERIAL);    /* Amiga Serial */
  87.     AMIGAHW_DECLARE(AMI_PARALLEL);    /* Amiga Parallel */
  88.     /* real time clocks */
  89.     AMIGAHW_DECLARE(A2000_CLK);        /* Hardware Clock (A2000 alike) */
  90.     AMIGAHW_DECLARE(A3000_CLK);        /* Hardware Clock (A3000 alike) */
  91.     /* supporting hardware */
  92.     AMIGAHW_DECLARE(CHIP_RAM);        /* Chip RAM */
  93.     AMIGAHW_DECLARE(PAULA);        /* Paula (8364) */
  94.     AMIGAHW_DECLARE(DENISE);        /* Denise (8362) */
  95.     AMIGAHW_DECLARE(DENISE_HR);        /* Denise (8373) */
  96.     AMIGAHW_DECLARE(LISA);        /* Lisa (8375) */
  97.     AMIGAHW_DECLARE(AGNUS_PAL);        /* Normal/Fat PAL Agnus (8367/8371) */
  98.     AMIGAHW_DECLARE(AGNUS_NTSC);    /* Normal/Fat NTSC Agnus (8361/8370) */
  99.     AMIGAHW_DECLARE(AGNUS_HR_PAL);    /* Fat Hires PAL Agnus (8372) */
  100.     AMIGAHW_DECLARE(AGNUS_HR_NTSC);    /* Fat Hires NTSC Agnus (8372) */
  101.     AMIGAHW_DECLARE(ALICE_PAL);        /* PAL Alice (8374) */
  102.     AMIGAHW_DECLARE(ALICE_NTSC);    /* NTSC Alice (8374) */
  103.     AMIGAHW_DECLARE(MAGIC_REKICK);    /* A3000 Magic Hard Rekick */
  104.     AMIGAHW_DECLARE(PCMCIA);        /* PCMCIA Slot */
  105.     AMIGAHW_DECLARE(GG2_ISA);        /* GG2 Zorro2ISA Bridge */
  106.     AMIGAHW_DECLARE(ZORRO);        /* Zorro AutoConfig */
  107.     AMIGAHW_DECLARE(ZORRO3);        /* Zorro III */
  108. };
  109.  
  110. extern struct amiga_hw_present amiga_hw_present;
  111.  
  112. struct CUSTOM {
  113.     unsigned short bltddat;
  114.     unsigned short dmaconr;
  115.     unsigned short vposr;
  116.     unsigned short vhposr;
  117.     unsigned short dskdatr;
  118.     unsigned short joy0dat;
  119.     unsigned short joy1dat;
  120.     unsigned short clxdat;
  121.     unsigned short adkconr;
  122.     unsigned short pot0dat;
  123.     unsigned short pot1dat;
  124.     unsigned short potgor;
  125.     unsigned short serdatr;
  126.     unsigned short dskbytr;
  127.     unsigned short intenar;
  128.     unsigned short intreqr;
  129.     unsigned char  *dskptr;
  130.     unsigned short dsklen;
  131.     unsigned short dskdat;
  132.     unsigned short refptr;
  133.     unsigned short vposw;
  134.     unsigned short vhposw;
  135.     unsigned short copcon;
  136.     unsigned short serdat;
  137.     unsigned short serper;
  138.     unsigned short potgo;
  139.     unsigned short joytest;
  140.     unsigned short strequ;
  141.     unsigned short strvbl;
  142.     unsigned short strhor;
  143.     unsigned short strlong;
  144.     unsigned short bltcon0;
  145.     unsigned short bltcon1;
  146.     unsigned short bltafwm;
  147.     unsigned short bltalwm;
  148.     unsigned char  *bltcpt;
  149.     unsigned char  *bltbpt;
  150.     unsigned char  *bltapt;
  151.     unsigned char  *bltdpt;
  152.     unsigned short bltsize;
  153.     unsigned char  pad2d;
  154.     unsigned char  bltcon0l;
  155.     unsigned short bltsizv;
  156.     unsigned short bltsizh;
  157.     unsigned short bltcmod;
  158.     unsigned short bltbmod;
  159.     unsigned short bltamod;
  160.     unsigned short bltdmod;
  161.     unsigned short spare2[4];
  162.     unsigned short bltcdat;
  163.     unsigned short bltbdat;
  164.     unsigned short bltadat;
  165.     unsigned short spare3[3];
  166.     unsigned short deniseid;
  167.     unsigned short dsksync;
  168.     unsigned short *cop1lc;
  169.     unsigned short *cop2lc;
  170.     unsigned short copjmp1;
  171.     unsigned short copjmp2;
  172.     unsigned short copins;
  173.     unsigned short diwstrt;
  174.     unsigned short diwstop;
  175.     unsigned short ddfstrt;
  176.     unsigned short ddfstop;
  177.     unsigned short dmacon;
  178.     unsigned short clxcon;
  179.     unsigned short intena;
  180.     unsigned short intreq;
  181.     unsigned short adkcon;
  182.     struct {
  183.     unsigned short    *audlc;
  184.     unsigned short audlen;
  185.     unsigned short audper;
  186.     unsigned short audvol;
  187.     unsigned short auddat;
  188.     unsigned short audspare[2];
  189.     } aud[4];
  190.     unsigned char  *bplpt[8];
  191.     unsigned short bplcon0;
  192.     unsigned short bplcon1;
  193.     unsigned short bplcon2;
  194.     unsigned short bplcon3;
  195.     unsigned short bpl1mod;
  196.     unsigned short bpl2mod;
  197.     unsigned short bplcon4;
  198.     unsigned short clxcon2;
  199.     unsigned short bpldat[8];
  200.     unsigned char  *sprpt[8];
  201.     struct {
  202.     unsigned short pos;
  203.     unsigned short ctl;
  204.     unsigned short dataa;
  205.     unsigned short datab;
  206.     } spr[8];
  207.     unsigned short color[32];
  208.     unsigned short htotal;
  209.     unsigned short hsstop;
  210.     unsigned short hbstrt;
  211.     unsigned short hbstop;
  212.     unsigned short vtotal;
  213.     unsigned short vsstop;
  214.     unsigned short vbstrt;
  215.     unsigned short vbstop;
  216.     unsigned short sprhstrt;
  217.     unsigned short sprhstop;
  218.     unsigned short bplhstrt;
  219.     unsigned short bplhstop;
  220.     unsigned short hhposw;
  221.     unsigned short hhposr;
  222.     unsigned short beamcon0;
  223.     unsigned short hsstrt;
  224.     unsigned short vsstrt;
  225.     unsigned short hcenter;
  226.     unsigned short diwhigh;
  227.     unsigned short spare4[11];
  228.     unsigned short fmode;
  229. };
  230.  
  231. /*
  232.  * DMA register bits
  233.  */
  234. #define DMAF_SETCLR        (0x8000)
  235. #define DMAF_AUD0        (0x0001)
  236. #define DMAF_AUD1        (0x0002)
  237. #define DMAF_AUD2        (0x0004)
  238. #define DMAF_AUD3        (0x0008)
  239. #define DMAF_DISK        (0x0010)
  240. #define DMAF_SPRITE        (0x0020)
  241. #define DMAF_BLITTER        (0x0040)
  242. #define DMAF_COPPER        (0x0080)
  243. #define DMAF_RASTER        (0x0100)
  244. #define DMAF_MASTER        (0x0200)
  245. #define DMAF_BLITHOG        (0x0400)
  246. #define DMAF_BLTNZERO        (0x2000)
  247. #define DMAF_BLTDONE        (0x4000)
  248. #define DMAF_ALL        (0x01FF)
  249.  
  250. struct CIA {
  251.     unsigned char pra;        char pad0[0xff];
  252.     unsigned char prb;        char pad1[0xff];
  253.     unsigned char ddra;        char pad2[0xff];
  254.     unsigned char ddrb;        char pad3[0xff];
  255.     unsigned char talo;        char pad4[0xff];
  256.     unsigned char tahi;        char pad5[0xff];
  257.     unsigned char tblo;        char pad6[0xff];
  258.     unsigned char tbhi;        char pad7[0xff];
  259.     unsigned char todlo;    char pad8[0xff];
  260.     unsigned char todmid;    char pad9[0xff];
  261.     unsigned char todhi;    char pada[0x1ff];
  262.     unsigned char sdr;        char padb[0xff];
  263.     unsigned char icr;        char padc[0xff];
  264.     unsigned char cra;        char padd[0xff];
  265.     unsigned char crb;        char pade[0xff];
  266. };
  267.  
  268. #define zTwoBase (0x80000000)
  269. #define ZTWO_PADDR(x) (((unsigned long)(x))-zTwoBase)
  270. #define ZTWO_VADDR(x) (((unsigned long)(x))+zTwoBase)
  271.  
  272. #define CUSTOM_PHYSADDR     (0xdff000)
  273. #define amiga_custom ((*(volatile struct CUSTOM *)(zTwoBase+CUSTOM_PHYSADDR)))
  274.  
  275. #define CIAA_PHYSADDR      (0xbfe001)
  276. #define CIAB_PHYSADDR      (0xbfd000)
  277. #define ciaa   ((*(volatile struct CIA *)(zTwoBase + CIAA_PHYSADDR)))
  278. #define ciab   ((*(volatile struct CIA *)(zTwoBase + CIAB_PHYSADDR)))
  279.  
  280. #define CHIP_PHYSADDR        (0x000000)
  281.  
  282. void amiga_chip_init (void);
  283. void *amiga_chip_alloc(unsigned long size, const char *name);
  284. void *amiga_chip_alloc_res(unsigned long size, struct resource *res);
  285. void amiga_chip_free(void *ptr);
  286. unsigned long amiga_chip_avail( void ); /*MILAN*/
  287. extern volatile unsigned short amiga_audio_min_period;
  288.  
  289. static inline void amifb_video_off(void)
  290. {
  291.     if (amiga_chipset == CS_ECS || amiga_chipset == CS_AGA) {
  292.         /* program Denise/Lisa for a higher maximum play rate */
  293.         amiga_custom.htotal = 113;        /* 31 kHz */
  294.         amiga_custom.vtotal = 223;        /* 70 Hz */
  295.         amiga_custom.beamcon0 = 0x4390;   /* HARDDIS, VAR{BEAM,VSY,HSY,CSY}EN */
  296.         /* suspend the monitor */
  297.         amiga_custom.hsstrt = amiga_custom.hsstop = 116;
  298.         amiga_custom.vsstrt = amiga_custom.vsstop = 226;
  299.         amiga_audio_min_period = 57;
  300.     }
  301. }
  302.  
  303. struct tod3000 {
  304.   unsigned int  :28, second2:4;    /* lower digit */
  305.   unsigned int  :28, second1:4;    /* upper digit */
  306.   unsigned int  :28, minute2:4;    /* lower digit */
  307.   unsigned int  :28, minute1:4;    /* upper digit */
  308.   unsigned int  :28, hour2:4;    /* lower digit */
  309.   unsigned int  :28, hour1:4;    /* upper digit */
  310.   unsigned int  :28, weekday:4;
  311.   unsigned int  :28, day2:4;    /* lower digit */
  312.   unsigned int  :28, day1:4;    /* upper digit */
  313.   unsigned int  :28, month2:4;    /* lower digit */
  314.   unsigned int  :28, month1:4;    /* upper digit */
  315.   unsigned int  :28, year2:4;    /* lower digit */
  316.   unsigned int  :28, year1:4;    /* upper digit */
  317.   unsigned int  :28, cntrl1:4;    /* control-byte 1 */
  318.   unsigned int  :28, cntrl2:4;    /* control-byte 2 */
  319.   unsigned int  :28, cntrl3:4;    /* control-byte 3 */
  320. };
  321. #define TOD3000_CNTRL1_HOLD    0
  322. #define TOD3000_CNTRL1_FREE    9
  323. #define tod_3000 ((*(volatile struct tod3000 *)(zTwoBase+0xDC0000)))
  324.  
  325. struct tod2000 {
  326.   unsigned int  :28, second2:4;    /* lower digit */
  327.   unsigned int  :28, second1:4;    /* upper digit */
  328.   unsigned int  :28, minute2:4;    /* lower digit */
  329.   unsigned int  :28, minute1:4;    /* upper digit */
  330.   unsigned int  :28, hour2:4;    /* lower digit */
  331.   unsigned int  :28, hour1:4;    /* upper digit */
  332.   unsigned int  :28, day2:4;    /* lower digit */
  333.   unsigned int  :28, day1:4;    /* upper digit */
  334.   unsigned int  :28, month2:4;    /* lower digit */
  335.   unsigned int  :28, month1:4;    /* upper digit */
  336.   unsigned int  :28, year2:4;    /* lower digit */
  337.   unsigned int  :28, year1:4;    /* upper digit */
  338.   unsigned int  :28, weekday:4;
  339.   unsigned int  :28, cntrl1:4;    /* control-byte 1 */
  340.   unsigned int  :28, cntrl2:4;    /* control-byte 2 */
  341.   unsigned int  :28, cntrl3:4;    /* control-byte 3 */
  342. };
  343.  
  344. #define TOD2000_CNTRL1_HOLD    (1<<0)
  345. #define TOD2000_CNTRL1_BUSY    (1<<1)
  346. #define TOD2000_CNTRL3_24HMODE    (1<<2)
  347. #define TOD2000_HOUR1_PM    (1<<2)
  348. #define tod_2000 ((*(volatile struct tod2000 *)(zTwoBase+0xDC0000)))
  349.  
  350. #endif /* _M68K_AMIGAHW_H */
  351.