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