amigahw.h 10 KB

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