1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * asm/bootinfo.h -- Definition of the Linux/m68k boot information structure 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright 1992 by Greg Harp 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * This file is subject to the terms and conditions of the GNU General Public 8*4882a593Smuzhiyun * License. See the file COPYING in the main directory of this archive 9*4882a593Smuzhiyun * for more details. 10*4882a593Smuzhiyun */ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #ifndef _UAPI_ASM_M68K_BOOTINFO_H 13*4882a593Smuzhiyun #define _UAPI_ASM_M68K_BOOTINFO_H 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #include <linux/types.h> 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun /* 22*4882a593Smuzhiyun * Bootinfo definitions 23*4882a593Smuzhiyun * 24*4882a593Smuzhiyun * This is an easily parsable and extendable structure containing all 25*4882a593Smuzhiyun * information to be passed from the bootstrap to the kernel. 26*4882a593Smuzhiyun * 27*4882a593Smuzhiyun * This way I hope to keep all future changes back/forewards compatible. 28*4882a593Smuzhiyun * Thus, keep your fingers crossed... 29*4882a593Smuzhiyun * 30*4882a593Smuzhiyun * This structure is copied right after the kernel by the bootstrap 31*4882a593Smuzhiyun * routine. 32*4882a593Smuzhiyun */ 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun struct bi_record { 35*4882a593Smuzhiyun __be16 tag; /* tag ID */ 36*4882a593Smuzhiyun __be16 size; /* size of record (in bytes) */ 37*4882a593Smuzhiyun __be32 data[0]; /* data */ 38*4882a593Smuzhiyun }; 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun struct mem_info { 42*4882a593Smuzhiyun __be32 addr; /* physical address of memory chunk */ 43*4882a593Smuzhiyun __be32 size; /* length of memory chunk (in bytes) */ 44*4882a593Smuzhiyun }; 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun #endif /* __ASSEMBLY__ */ 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun /* 50*4882a593Smuzhiyun * Tag Definitions 51*4882a593Smuzhiyun * 52*4882a593Smuzhiyun * Machine independent tags start counting from 0x0000 53*4882a593Smuzhiyun * Machine dependent tags start counting from 0x8000 54*4882a593Smuzhiyun */ 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun #define BI_LAST 0x0000 /* last record (sentinel) */ 57*4882a593Smuzhiyun #define BI_MACHTYPE 0x0001 /* machine type (__be32) */ 58*4882a593Smuzhiyun #define BI_CPUTYPE 0x0002 /* cpu type (__be32) */ 59*4882a593Smuzhiyun #define BI_FPUTYPE 0x0003 /* fpu type (__be32) */ 60*4882a593Smuzhiyun #define BI_MMUTYPE 0x0004 /* mmu type (__be32) */ 61*4882a593Smuzhiyun #define BI_MEMCHUNK 0x0005 /* memory chunk address and size */ 62*4882a593Smuzhiyun /* (struct mem_info) */ 63*4882a593Smuzhiyun #define BI_RAMDISK 0x0006 /* ramdisk address and size */ 64*4882a593Smuzhiyun /* (struct mem_info) */ 65*4882a593Smuzhiyun #define BI_COMMAND_LINE 0x0007 /* kernel command line parameters */ 66*4882a593Smuzhiyun /* (string) */ 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun /* 70*4882a593Smuzhiyun * Linux/m68k Architectures (BI_MACHTYPE) 71*4882a593Smuzhiyun */ 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun #define MACH_AMIGA 1 74*4882a593Smuzhiyun #define MACH_ATARI 2 75*4882a593Smuzhiyun #define MACH_MAC 3 76*4882a593Smuzhiyun #define MACH_APOLLO 4 77*4882a593Smuzhiyun #define MACH_SUN3 5 78*4882a593Smuzhiyun #define MACH_MVME147 6 79*4882a593Smuzhiyun #define MACH_MVME16x 7 80*4882a593Smuzhiyun #define MACH_BVME6000 8 81*4882a593Smuzhiyun #define MACH_HP300 9 82*4882a593Smuzhiyun #define MACH_Q40 10 83*4882a593Smuzhiyun #define MACH_SUN3X 11 84*4882a593Smuzhiyun #define MACH_M54XX 12 85*4882a593Smuzhiyun #define MACH_M5441X 13 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun /* 89*4882a593Smuzhiyun * CPU, FPU and MMU types (BI_CPUTYPE, BI_FPUTYPE, BI_MMUTYPE) 90*4882a593Smuzhiyun * 91*4882a593Smuzhiyun * Note: we may rely on the following equalities: 92*4882a593Smuzhiyun * 93*4882a593Smuzhiyun * CPU_68020 == MMU_68851 94*4882a593Smuzhiyun * CPU_68030 == MMU_68030 95*4882a593Smuzhiyun * CPU_68040 == FPU_68040 == MMU_68040 96*4882a593Smuzhiyun * CPU_68060 == FPU_68060 == MMU_68060 97*4882a593Smuzhiyun */ 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun #define CPUB_68020 0 100*4882a593Smuzhiyun #define CPUB_68030 1 101*4882a593Smuzhiyun #define CPUB_68040 2 102*4882a593Smuzhiyun #define CPUB_68060 3 103*4882a593Smuzhiyun #define CPUB_COLDFIRE 4 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun #define CPU_68020 (1 << CPUB_68020) 106*4882a593Smuzhiyun #define CPU_68030 (1 << CPUB_68030) 107*4882a593Smuzhiyun #define CPU_68040 (1 << CPUB_68040) 108*4882a593Smuzhiyun #define CPU_68060 (1 << CPUB_68060) 109*4882a593Smuzhiyun #define CPU_COLDFIRE (1 << CPUB_COLDFIRE) 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun #define FPUB_68881 0 112*4882a593Smuzhiyun #define FPUB_68882 1 113*4882a593Smuzhiyun #define FPUB_68040 2 /* Internal FPU */ 114*4882a593Smuzhiyun #define FPUB_68060 3 /* Internal FPU */ 115*4882a593Smuzhiyun #define FPUB_SUNFPA 4 /* Sun-3 FPA */ 116*4882a593Smuzhiyun #define FPUB_COLDFIRE 5 /* ColdFire FPU */ 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun #define FPU_68881 (1 << FPUB_68881) 119*4882a593Smuzhiyun #define FPU_68882 (1 << FPUB_68882) 120*4882a593Smuzhiyun #define FPU_68040 (1 << FPUB_68040) 121*4882a593Smuzhiyun #define FPU_68060 (1 << FPUB_68060) 122*4882a593Smuzhiyun #define FPU_SUNFPA (1 << FPUB_SUNFPA) 123*4882a593Smuzhiyun #define FPU_COLDFIRE (1 << FPUB_COLDFIRE) 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun #define MMUB_68851 0 126*4882a593Smuzhiyun #define MMUB_68030 1 /* Internal MMU */ 127*4882a593Smuzhiyun #define MMUB_68040 2 /* Internal MMU */ 128*4882a593Smuzhiyun #define MMUB_68060 3 /* Internal MMU */ 129*4882a593Smuzhiyun #define MMUB_APOLLO 4 /* Custom Apollo */ 130*4882a593Smuzhiyun #define MMUB_SUN3 5 /* Custom Sun-3 */ 131*4882a593Smuzhiyun #define MMUB_COLDFIRE 6 /* Internal MMU */ 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun #define MMU_68851 (1 << MMUB_68851) 134*4882a593Smuzhiyun #define MMU_68030 (1 << MMUB_68030) 135*4882a593Smuzhiyun #define MMU_68040 (1 << MMUB_68040) 136*4882a593Smuzhiyun #define MMU_68060 (1 << MMUB_68060) 137*4882a593Smuzhiyun #define MMU_SUN3 (1 << MMUB_SUN3) 138*4882a593Smuzhiyun #define MMU_APOLLO (1 << MMUB_APOLLO) 139*4882a593Smuzhiyun #define MMU_COLDFIRE (1 << MMUB_COLDFIRE) 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun /* 143*4882a593Smuzhiyun * Stuff for bootinfo interface versioning 144*4882a593Smuzhiyun * 145*4882a593Smuzhiyun * At the start of kernel code, a 'struct bootversion' is located. 146*4882a593Smuzhiyun * bootstrap checks for a matching version of the interface before booting 147*4882a593Smuzhiyun * a kernel, to avoid user confusion if kernel and bootstrap don't work 148*4882a593Smuzhiyun * together :-) 149*4882a593Smuzhiyun * 150*4882a593Smuzhiyun * If incompatible changes are made to the bootinfo interface, the major 151*4882a593Smuzhiyun * number below should be stepped (and the minor reset to 0) for the 152*4882a593Smuzhiyun * appropriate machine. If a change is backward-compatible, the minor 153*4882a593Smuzhiyun * should be stepped. "Backwards-compatible" means that booting will work, 154*4882a593Smuzhiyun * but certain features may not. 155*4882a593Smuzhiyun */ 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun #define BOOTINFOV_MAGIC 0x4249561A /* 'BIV^Z' */ 158*4882a593Smuzhiyun #define MK_BI_VERSION(major, minor) (((major) << 16) + (minor)) 159*4882a593Smuzhiyun #define BI_VERSION_MAJOR(v) (((v) >> 16) & 0xffff) 160*4882a593Smuzhiyun #define BI_VERSION_MINOR(v) ((v) & 0xffff) 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun struct bootversion { 165*4882a593Smuzhiyun __be16 branch; 166*4882a593Smuzhiyun __be32 magic; 167*4882a593Smuzhiyun struct { 168*4882a593Smuzhiyun __be32 machtype; 169*4882a593Smuzhiyun __be32 version; 170*4882a593Smuzhiyun } machversions[0]; 171*4882a593Smuzhiyun } __packed; 172*4882a593Smuzhiyun 173*4882a593Smuzhiyun #endif /* __ASSEMBLY__ */ 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun 176*4882a593Smuzhiyun #endif /* _UAPI_ASM_M68K_BOOTINFO_H */ 177