setup.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:12k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2. ** asm/setup.h -- Definition of the Linux/m68k boot information structure
  3. **
  4. ** Copyright 1992 by Greg Harp
  5. **
  6. ** This file is subject to the terms and conditions of the GNU General Public
  7. ** License.  See the file COPYING in the main directory of this archive
  8. ** for more details.
  9. **
  10. ** Created 09/29/92 by Greg Harp
  11. **
  12. ** 5/2/94 Roman Hodek:
  13. **   Added bi_atari part of the machine dependent union bi_un; for now it
  14. **   contains just a model field to distinguish between TT and Falcon.
  15. ** 26/7/96 Roman Zippel:
  16. **   Renamed to setup.h; added some useful macros to allow gcc some
  17. **   optimizations if possible.
  18. */
  19. #ifndef _M68K_SETUP_H
  20. #define _M68K_SETUP_H
  21. #include <linux/config.h>
  22. #define CL_SIZE (256)
  23. #if 0
  24. #include <asm/zorro.h>
  25. /*
  26.  * Amiga specific part of bootinfo structure.
  27.  */
  28. #define NUM_AUTO    16
  29. #ifndef __ASSEMBLY__
  30. #define AMIGAHW_DECLARE(name) unsigned name : 1
  31. #define AMIGAHW_SET(name) (boot_info.bi_amiga.hw_present.name = 1)
  32. #define AMIGAHW_PRESENT(name) (boot_info.bi_amiga.hw_present.name)
  33. struct bi_Amiga {
  34. int model; /* Amiga Model (3000?) */
  35. int num_autocon; /* # of autoconfig devices found */
  36. struct ConfigDev autocon[NUM_AUTO]; /* up to 16 autoconfig devices */
  37. #ifdef HACKER_KERNEL
  38. void (*exit_func)(void); /* addr of function to exit kernel */
  39. unsigned long chip_addr; /* start of chip memory (bytes) */
  40. #endif
  41. unsigned long chip_size; /* size of chip memory (bytes) */
  42. unsigned char vblank;   /* VBLANK frequency */
  43. unsigned char psfreq;  /* power supply frequency */
  44. unsigned long eclock;  /* EClock frequency */
  45. unsigned long chipset; /* native chipset present */
  46. struct {
  47. /* video hardware */
  48. AMIGAHW_DECLARE(AMI_VIDEO); /* Amiga Video */
  49. AMIGAHW_DECLARE(AMI_BLITTER); /* Amiga Blitter */
  50. AMIGAHW_DECLARE(AMBER_FF); /* Amber Flicker Fixer */
  51. /* sound hardware */
  52. AMIGAHW_DECLARE(AMI_AUDIO); /* Amiga Audio */
  53. /* disk storage interfaces */
  54. AMIGAHW_DECLARE(AMI_FLOPPY); /* Amiga Floppy */
  55. AMIGAHW_DECLARE(A3000_SCSI); /* SCSI (wd33c93, A3000 alike) */
  56. AMIGAHW_DECLARE(A4000_SCSI); /* SCSI (ncr53c710, A4000T alike) */
  57. AMIGAHW_DECLARE(A1200_IDE); /* IDE (A1200 alike) */
  58. AMIGAHW_DECLARE(A4000_IDE); /* IDE (A4000 alike) */
  59. AMIGAHW_DECLARE(CD_ROM); /* CD ROM drive */
  60. /* other I/O hardware */
  61. AMIGAHW_DECLARE(AMI_KEYBOARD); /* Amiga Keyboard */
  62. AMIGAHW_DECLARE(AMI_MOUSE); /* Amiga Mouse */
  63. AMIGAHW_DECLARE(AMI_SERIAL); /* Amiga Serial */
  64. AMIGAHW_DECLARE(AMI_PARALLEL); /* Amiga Parallel */
  65. /* real time clocks */
  66. AMIGAHW_DECLARE(A2000_CLK); /* Hardware Clock (A2000 alike) */
  67. AMIGAHW_DECLARE(A3000_CLK); /* Hardware Clock (A3000 alike) */
  68. /* supporting hardware */
  69. AMIGAHW_DECLARE(CHIP_RAM); /* Chip RAM */
  70. AMIGAHW_DECLARE(PAULA); /* Paula (8364) */
  71. AMIGAHW_DECLARE(DENISE); /* Denise (8362) */
  72. AMIGAHW_DECLARE(DENISE_HR); /* Denise (8373) */
  73. AMIGAHW_DECLARE(LISA); /* Lisa (8375) */
  74. AMIGAHW_DECLARE(AGNUS_PAL); /* Normal/Fat PAL Agnus (8367/8371) */
  75. AMIGAHW_DECLARE(AGNUS_NTSC); /* Normal/Fat NTSC Agnus (8361/8370) */
  76. AMIGAHW_DECLARE(AGNUS_HR_PAL); /* Fat Hires PAL Agnus (8372) */
  77. AMIGAHW_DECLARE(AGNUS_HR_NTSC); /* Fat Hires NTSC Agnus (8372) */
  78. AMIGAHW_DECLARE(ALICE_PAL); /* PAL Alice (8374) */
  79. AMIGAHW_DECLARE(ALICE_NTSC); /* NTSC Alice (8374) */
  80. AMIGAHW_DECLARE(MAGIC_REKICK); /* A3000 Magic Hard Rekick */
  81. AMIGAHW_DECLARE(ZORRO); /* Zorro AutoConfig */
  82. } hw_present;
  83. };
  84. #else /* __ASSEMBLY__ */
  85.  
  86. BI_amiga_model = BI_un
  87. BI_amiga_num_autcon = BI_amiga_model+4
  88. BI_amiga_autocon = BI_amiga_num_autcon+4
  89. #ifdef HACKER_KERNEL
  90. BI_amiga_exit_func = BI_amiga_autocon+(CD_sizeof*NUM_AUTO)
  91. BI_amiga_chip_addr = BI_amiga_exit_func+4
  92. BI_amiga_chip_size = BI_amiga_chip_addr+4
  93. #else
  94. BI_amiga_chip_size = BI_amiga_autocon+(CD_sizeof*NUM_AUTO)
  95. #endif
  96. BI_amiga_vblank = BI_amiga_chip_size+4
  97. BI_amiga_psfreq = BI_amiga_vblank+1
  98. BI_amiga_eclock = BI_amiga_psfreq+1
  99. BI_amiga_chipset = BI_amiga_eclock+4
  100. BI_amiga_hw_present = BI_amiga_chipset+4
  101. #endif /* __ASSEMBLY__ */
  102. /* Atari specific part of bootinfo */
  103. /*
  104.  * Define several Hardware-Chips for indication so that for the ATARI we do
  105.  * no longer decide whether it is a Falcon or other machine . It's just
  106.  * important what hardware the machine uses
  107.  */
  108. /* ++roman 08/08/95: rewritten from ORing constants to a C bitfield */
  109. #ifndef __ASSEMBLY__
  110. #define ATARIHW_DECLARE(name) unsigned name : 1
  111. #define ATARIHW_SET(name) (boot_info.bi_atari.hw_present.name = 1)
  112. #define ATARIHW_PRESENT(name) (boot_info.bi_atari.hw_present.name)
  113. struct bi_Atari {
  114. struct {
  115. /* video hardware */
  116. ATARIHW_DECLARE(STND_SHIFTER); /* ST-Shifter - no base low ! */
  117. ATARIHW_DECLARE(EXTD_SHIFTER); /* STe-Shifter - 24 bit address */
  118. ATARIHW_DECLARE(TT_SHIFTER); /* TT-Shifter */
  119. ATARIHW_DECLARE(VIDEL_SHIFTER); /* Falcon-Shifter */
  120. /* sound hardware */
  121. ATARIHW_DECLARE(YM_2149); /* Yamaha YM 2149 */
  122. ATARIHW_DECLARE(PCM_8BIT); /* PCM-Sound in STe-ATARI */
  123. ATARIHW_DECLARE(CODEC); /* CODEC Sound (Falcon) */
  124. /* disk storage interfaces */
  125. ATARIHW_DECLARE(TT_SCSI); /* Directly mapped NCR5380 */
  126. ATARIHW_DECLARE(ST_SCSI); /* NCR5380 via ST-DMA (Falcon) */
  127. ATARIHW_DECLARE(ACSI); /* Standard ACSI like in STs */
  128. ATARIHW_DECLARE(IDE); /* IDE Interface */
  129. ATARIHW_DECLARE(FDCSPEED); /* 8/16 MHz switch for FDC */
  130. /* other I/O hardware */
  131. ATARIHW_DECLARE(ST_MFP); /* The ST-MFP (there should
  132.    be no Atari without
  133.    it... but who knows?) */
  134. ATARIHW_DECLARE(TT_MFP); /* 2nd MFP */
  135. ATARIHW_DECLARE(SCC); /* Serial Communications Contr. */
  136. ATARIHW_DECLARE(ST_ESCC); /* SCC Z83230 in an ST */
  137. ATARIHW_DECLARE(ANALOG_JOY); /* Paddle Interface for STe
  138.    and Falcon */
  139. ATARIHW_DECLARE(MICROWIRE); /* Microwire Interface */
  140. /* DMA */
  141. ATARIHW_DECLARE(STND_DMA); /* 24 Bit limited ST-DMA */
  142. ATARIHW_DECLARE(EXTD_DMA); /* 32 Bit ST-DMA */
  143. ATARIHW_DECLARE(SCSI_DMA); /* DMA for the NCR5380 */
  144. ATARIHW_DECLARE(SCC_DMA); /* DMA for the SCC */
  145. /* real time clocks */
  146. ATARIHW_DECLARE(TT_CLK); /* TT compatible clock chip */
  147. ATARIHW_DECLARE(MSTE_CLK); /* Mega ST(E) clock chip */
  148. /* supporting hardware */
  149. ATARIHW_DECLARE(SCU); /* System Control Unit */
  150. ATARIHW_DECLARE(BLITTER); /* Blitter */
  151. ATARIHW_DECLARE(VME); /* VME Bus */
  152. } hw_present;
  153. unsigned long mch_cookie; /* _MCH cookie from TOS */
  154. };
  155. /* mch_cookie values (upper word) */
  156. #define ATARI_MCH_ST 0
  157. #define ATARI_MCH_STE 1
  158. #define ATARI_MCH_TT 2
  159. #define ATARI_MCH_FALCON 3
  160. struct mem_info {
  161. unsigned long addr; /* physical address of memory chunk */
  162. unsigned long size; /* length of memory chunk (in bytes) */
  163. };
  164. #else /* __ASSEMBLY__ */
  165. MI_addr = 0
  166. MI_size = MI_addr+4
  167. MI_sizeof = MI_size+4
  168. #endif /* __ASSEMBLY__ */
  169. #define NUM_MEMINFO  4
  170. #define MACH_AMIGA   1
  171. #define MACH_ATARI   2
  172. #define MACH_MAC     3
  173. /*
  174.  * CPU and FPU types
  175.  */
  176. #define CPUB_68020 0
  177. #define CPUB_68030 1
  178. #define CPUB_68040 2
  179. #define CPUB_68060 3
  180. #define FPUB_68881 5
  181. #define FPUB_68882 6
  182. #define FPUB_68040 7 /* Internal FPU */
  183. #define FPUB_68060 8 /* Internal FPU */
  184. #define CPU_68020    (1<<CPUB_68020)
  185. #define CPU_68030    (1<<CPUB_68030)
  186. #define CPU_68040    (1<<CPUB_68040)
  187. #define CPU_68060    (1<<CPUB_68060)
  188. #define CPU_MASK     (31)
  189. #define FPU_68881    (1<<FPUB_68881)
  190. #define FPU_68882    (1<<FPUB_68882)
  191. #define FPU_68040    (1<<FPUB_68040) /* Internal FPU */
  192. #define FPU_68060    (1<<FPUB_68060) /* Internal FPU */
  193. #define FPU_MASK     (0xfe0)
  194. #define CL_SIZE      (256)
  195. /*
  196.  * machine type definitions
  197.  */
  198. #if !defined(CONFIG_AMIGA)
  199. #  define MACH_IS_AMIGA (0)
  200. #elif defined(CONFIG_ATARI) || defined(CONFIG_MAC)
  201. #  define MACH_IS_AMIGA (boot_info.machtype == MACH_AMIGA)
  202. #else
  203. #  define CONFIG_AMIGA_ONLY
  204. #  define MACH_IS_AMIGA (1)
  205. #  define MACH_TYPE (MACH_AMIGA)
  206. #endif
  207. #if !defined(CONFIG_ATARI)
  208. #  define MACH_IS_ATARI (0)
  209. #elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC)
  210. #  define MACH_IS_ATARI (boot_info.machtype == MACH_ATARI)
  211. #else
  212. #  define CONFIG_ATARI_ONLY
  213. #  define MACH_IS_ATARI (1)
  214. #  define MACH_TYPE (MACH_ATARI)
  215. #endif
  216. #if defined(CONFIG_MAC)
  217. #  error Currently no Mac support!
  218. #endif
  219. #ifndef MACH_TYPE
  220. #  define MACH_TYPE (boot_info.machtype)
  221. #endif
  222. /*
  223.  * cpu type definitions
  224.  */
  225. #if !defined(CONFIG_M68020)
  226. #  define CPU_IS_020 (0)
  227. #elif defined(CONFIG_M68030) || defined(CONFIG_M68040) || defined(CONFIG_M68060)
  228. #  define CPU_IS_020 (boot_info.cputype & CPU_68020)
  229. #else
  230. #  define CONFIG_M68020_ONLY
  231. #  define CPU_IS_020 (1)
  232. #endif
  233. #if !defined(CONFIG_M68030)
  234. #  define CPU_IS_030 (0)
  235. #elif defined(CONFIG_M68020) || defined(CONFIG_M68040) || defined(CONFIG_M68060)
  236. #  define CPU_IS_030 (boot_info.cputype & CPU_68030)
  237. #else
  238. #  define CONFIG_M68030_ONLY
  239. #  define CPU_IS_030 (1)
  240. #endif
  241. #if !defined(CONFIG_M68040)
  242. #  define CPU_IS_040 (0)
  243. #elif defined(CONFIG_M68020) || defined(CONFIG_M68030) || defined(CONFIG_M68060)
  244. #  define CPU_IS_040 (boot_info.cputype & CPU_68040)
  245. #else
  246. #  define CONFIG_M68040_ONLY
  247. #  define CPU_IS_040 (1)
  248. #endif
  249. #if !defined(CONFIG_M68060)
  250. #  define CPU_IS_060 (0)
  251. #elif defined(CONFIG_M68020) || defined(CONFIG_M68030) || defined(CONFIG_M68040)
  252. #  define CPU_IS_060 (boot_info.cputype & CPU_68060)
  253. #else
  254. #  define CONFIG_M68060_ONLY
  255. #  define CPU_IS_060 (1)
  256. #endif
  257. #if !defined(CONFIG_M68020) && !defined(CONFIG_M68030)
  258. #  define CPU_IS_020_OR_030 (0)
  259. #else
  260. #  define CONFIG_M68020_OR_M68030
  261. #  if defined(CONFIG_M68040) || defined(CONFIG_M68060)
  262. #    define CPU_IS_020_OR_030 (!m68k_is040or060)
  263. #  else
  264. #    define CONFIG_M68020_OR_M68030_ONLY
  265. #    define CPU_IS_020_OR_030 (1)
  266. #  endif
  267. #endif
  268. #if !defined(CONFIG_M68040) && !defined(CONFIG_M68060)
  269. #  define CPU_IS_040_OR_060 (0)
  270. #else
  271. #  define CONFIG_M68040_OR_M68060
  272. #  if defined(CONFIG_M68020) || defined(CONFIG_M68030)
  273. #    define CPU_IS_040_OR_060 (m68k_is040or060)
  274. #  else
  275. #    define CONFIG_M68040_OR_M68060_ONLY
  276. #    define CPU_IS_040_OR_060 (1)
  277. #  endif
  278. #endif
  279. #define CPU_TYPE (boot_info.cputype)
  280. #ifndef __ASSEMBLY__
  281. #ifdef __KERNEL__
  282. /*
  283.  * m68k_is040or060 is != 0 for a '040 or higher;
  284.  * used numbers are 4 for 68040 and 6 for 68060.
  285.  */
  286. extern int m68k_is040or060;
  287. #endif
  288. struct bootinfo {
  289. unsigned long machtype; /* machine type */
  290. unsigned long cputype; /* system CPU & FPU */
  291. struct mem_info memory[NUM_MEMINFO]; /* memory description */
  292. int num_memory; /* # of memory blocks found */
  293. unsigned long ramdisk_size; /* ramdisk size in 1024 byte blocks */
  294. unsigned long ramdisk_addr; /* address of the ram disk in mem */
  295. char command_line[CL_SIZE]; /* kernel command line parameters */
  296. union {
  297. struct bi_Amiga bi_ami;  /* Amiga specific information */
  298. struct bi_Atari bi_ata;  /* Atari specific information */
  299. } bi_un;
  300. };
  301. #define bi_amiga bi_un.bi_ami
  302. #define bi_atari bi_un.bi_ata
  303. #define bi_mac  bi_un.bi_mac
  304. extern struct bootinfo
  305.     boot_info;
  306. #else /* __ASSEMBLY__ */
  307. BI_machtype = 0
  308. BI_cputype = BI_machtype+4
  309. BI_memory = BI_cputype+4
  310. BI_num_memory = BI_memory+(MI_sizeof*NUM_MEMINFO)
  311. BI_ramdisk_size = BI_num_memory+4
  312. BI_ramdisk_addr = BI_ramdisk_size+4
  313. BI_command_line = BI_ramdisk_addr+4
  314. BI_un = BI_command_line+CL_SIZE
  315. #endif /* __ASSEMBLY__ */
  316. /*
  317.  * Stuff for bootinfo interface versioning
  318.  *
  319.  * At the start of kernel code, a 'struct bootversion' is located. bootstrap
  320.  * checks for a matching version of the interface before booting a kernel, to
  321.  * avoid user confusion if kernel and bootstrap don't work together :-)
  322.  *
  323.  * If incompatible changes are made to the bootinfo interface, the major
  324.  * number below should be stepped (and the minor reset to 0) for the
  325.  * appropriate machine. If a change is backward-compatible, the minor should
  326.  * be stepped. "Backwards-compatible" means that booting will work, but
  327.  * certain features may not.
  328.  */
  329. #define BOOTINFOV_MAGIC 0x4249561A /* 'BIV^Z' */
  330. #define MK_BI_VERSION(major,minor) (((major)<<16)+(minor))
  331. #define BI_VERSION_MAJOR(v) (((v) >> 16) & 0xffff)
  332. #define BI_VERSION_MINOR(v) ((v) & 0xffff)
  333. #ifndef __ASSEMBLY__
  334. struct bootversion {
  335. unsigned short branch;
  336. unsigned long magic;
  337. struct {
  338. unsigned long machtype;
  339. unsigned long version;
  340. } machversions[0];
  341. };
  342. #endif /* __ASSEMBLY__ */
  343. #define AMIGA_BOOTI_VERSION    MK_BI_VERSION( 1, 0 )
  344. #define ATARI_BOOTI_VERSION    MK_BI_VERSION( 1, 0 )
  345. #endif
  346. #endif /* _M68K_SETUP_H */