amigahw.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:11k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

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