1 /* lilo.h - LILO constants
3 * Copyright 1992-1998 Werner Almesberger
4 * Copyright 1999-2006 John Coffman
5 * Copyright 2009-2011 Joachim Wiedorn
8 * Licensed under the terms contained in the file 'COPYING'
9 * in the source directory.
12 /* This file is also included by the boot loader assembler code. Put
13 everything that isn't legal C syntax or isn't swallowed by the
14 preprocessor into #ifdef LILO_ASM ... #endif */
23 #endif /* !__MSDOS__ */
25 /* This is the stuff to check the configuration:
27 #if defined(LCF_READONLY) && defined(LCF_REWRITE_TABLE)
28 #error "Incompatible Makefile options: READONLY and REWRITE_TABLE"
31 #error "Configuration option '-DLARGE_EBDA' is deprecated"
35 * Starting with 2.1.something, Linux kernels put VGA constants and segment
36 * definitions into asm/boot.h instead of linux/config.h
44 #include <linux/config.h>
49 /* Don't touch these, unless you really know what you're doing. */
50 #define DEF_INITSEG 0x9000
51 #define DEF_SYSSEG 0x1000
52 #define DEF_SETUPSEG 0x9020
53 #define DEF_SYSSIZE 0x7F00
55 /* Internal svga startup constants */
56 #define NORMAL_VGA 0xffff /* 80x25 mode */
57 #define EXTENDED_VGA 0xfffe /* 80x50 mode */
58 #define ASK_VGA 0xfffd /* ask for it at bootup */
62 #if defined(HAS_VERSION_H) && !__MSDOS__
63 #include <linux/version.h>
64 #endif /* !__MSDOS__ */
66 #ifndef LINUX_VERSION_CODE
67 #define LINUX_VERSION_CODE 0
69 #ifndef KERNEL_VERSION
70 #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
73 #define nelem(a) (sizeof(a)/sizeof((a)[0]))
78 #define VERSION 256*VERSION_MINOR+VERSION_MAJOR
79 #if VERSION_MINOR >= 50
85 /* definitions for pf_hard_disk_scan in device.c */
86 #ifdef DEBUG_PARTITIONS
87 #define PARTITIONS "./devfs_partitions"
89 #define PARTITIONS "/proc/partitions"
93 /* the known major device numbers */
94 #define MAJMIN_RAM 0x101 /* RAM disk */
96 #define MAJOR_MDP_SORT 1 /* Convert MAJOR_MDP to this for sorting */
98 #define MAJOR_EMD_SORT 2 /* Convert MAJOR_EMD to this for sorting */
99 #define MAJOR_HPT370_SORT 2 /* Convert MAJOR_HPT370 to this for sorting */
100 #define MAJOR_FD 2 /* floppy disks */
101 #define MAJOR_HD 3 /* IDE-type hard disks */
102 #define MAJOR_LOOP 7 /* Loopback devices 0-15 */
103 #define MAJOR_SD 8 /* SCSI disks 0-15 */
104 #define MAJOR_MD 9 /* multi-disk RAID sets */
105 #define MAJOR_XT 13 /* XT-type hard disks */
106 #define MAJOR_ACORN 21 /* Acorn MFM controller */
107 #define MAJOR_IDE2 22 /* IDE on second interface */
108 #define MAJOR_IDE3 33 /* IDE on third interface */
109 #define MAJOR_IDE4 34 /* IDE on fourth interface */
110 #define MAJOR_ESDI 36 /* PS/2 ESDI drives */
111 #define MAJOR_FTL 44 /* Flash Transition Layer on Memory Technology Device */
112 #define MAJOR_PP 45 /* Parallel Port IDE drive */
113 #define MAJOR_PPFD 47 /* Parallel Port floppy drive */
114 #define MAJOR_DAC960 48 /* First Mylex DAC960 PCI RAID controller */
116 #define MAJOR_IDE5 56 /* IDE on fifth interface */
118 #define MAJOR_IDE6 57 /* IDE on sixth interface */
119 #define MAJOR_LVM 58 /* Logical Volume Manager block device */
120 #define MAJOR_EXPR 60 /* Experimental devices 60..63 */
121 /*#define MAJOR_FL 62 / M-Systems Disk-On-Chip 2000 ***experimental*** */
123 #define MAJOR_SD_SORT 64 /*** MAJOR_SD converted to this for sorting ***/
124 #define MAJOR_SD2 65 /* SCSI disks 16-31 */
125 #define MAJOR_SD3 66 /* SCSI disks 32-47 */
126 #define MAJOR_SD4 67 /* SCSI disks 48-63 */
127 #define MAJOR_SD5 68 /* SCSI disks 64-79 */
128 #define MAJOR_SD6 69 /* SCSI disks 80-95 */
129 #define MAJOR_SD7 70 /* SCSI disks 96-111 */
130 #define MAJOR_SD8 71 /* SCSI disks 112-127 */
131 #define MAJOR_SMART2 72 /* First Compaq Smart/2 Major 72-79 */
132 #define MAJOR_I2O 80 /* First I2O block device 80-87 */
133 #define MAJOR_IDE7 88 /* IDE on seventh interface */
134 #define MAJOR_IDE8 89 /* IDE on eighth interface */
135 #define MAJOR_IDE9 90 /* IDE on ninth interface */
136 #define MAJOR_IDE10 91 /* IDE on tenth interface */
137 #define MAJOR_PPDD 92 /* PPDD encrypted disks - not supported */
138 #define MAJOR_NFTL 93 /* NAND Flash Translation Layer (Disk-On-Chip) */
139 #define MAJOR_DOC 100 /* Disk-On-Chip driver */
140 #define MAJOR_AMI_HYP 101 /* AMI Hyper Disk RAID controller */
141 #define MAJOR_CISS 104 /* First CCISS Major 104-111 */
142 #define MAJOR_IBM_iSER 112 /* IBM iSeries virtual disk */
143 #define MAJOR_HPT370 114 /* HPT370 controller */
144 #define MAJOR_EVMS 117 /* Enterprise Volume Management System */
145 #define MAJOR_SD9 128 /* SCSI disks 129 */
146 #define MAJOR_SD16 135 /* SCSI disks -255 */
147 #define MAJOR_DAC960_8 136 /* Ninth Mylex DAC960 PCI RAID controller */
148 #define MAJOR_EMD 153 /* Enhanced multi-disk RAID sets */
149 #define MAJOR_SATA 160 /* Carmel SATA Disk on first 8-port controller */
150 #define MAJOR_SATA2 161 /* Carmel SATA Disk on 2nd 8-port controller */
151 /* don't use the following */
152 #define MAJOR_MDP 254 /* Enhanced multi-disk RAID sets [experimental?] */
154 #define MAX_TOKEN 1023 /* max device Token length */
155 #define MAX_IMAGE_NAME 15 /* maximum name length (w/o terminating NUL) */
156 #define MAX_DESCR_SECTORS 12 /* upper limit on MAX_DESCR_SECS */
160 #define SHS_PASSWORDS /* use this one if SHS passwords are in use */
161 #define MAX_PW_CRC 5 /* max # of longwords in password digest */
162 #define PW_FILE_SUFFIX ".shs" /* suffix for the file that saves password digest */
164 #define CRC_PASSWORDS /* use this one if CRC passwords are in use */
165 #define MAX_PW_CRC 2 /* max # of CRC-32's in password */
166 #define PW_FILE_SUFFIX ".crc" /* suffix for the file that saves password CRC's */
170 #define MAX_DESCR_SECS LCF_DSECS
172 #define MAX_DESCR_SECS 2 /* maximum # of descriptor sectors */
174 #if MAX_DESCR_SECS > MAX_DESCR_SECTORS
175 #error "Maximum DSECS=x exceeded."
177 #define MAX_IMAGES ((int)((SECTOR_SIZE*MAX_DESCR_SECS-sizeof(INT4)-1)/sizeof(IMAGE_DESCR)))
178 /* maximum number of images */
180 #define COMMAND_LINE_SIZE 512 /* CL_LENGTH */
181 #define SECTOR_SIZE 512 /* disk sector size */
182 #ifndef BLOCK_SIZE /* may also come from linux/fs.h */
183 #define BLOCK_SIZE 1024 /* disk block size */
186 #define PARTITION_ENTRY 16 /* size of one partition entry */
187 #define PARTITION_ENTRIES 4 /* number of partition entries */
188 #define PART_TABLE_SIZE (PARTITION_ENTRY*PARTITION_ENTRIES)
189 #define PART_TABLE_OFFSET 0x1be /* offset in the master boot sector */
190 #define PART_ACT_ENT_OFF 0 /* offset in entry for active flag */
191 #define PART_TYPE_ENT_OFF 4 /* offset in entry for partition type */
193 #define P_MASK(x) ((~has_partitions(x))&0xFFFFFFFF)
194 #define D_MASK(x) (has_partitions(x))
195 #define PART_MAX PARTITION_ENTRIES /* biggest primary partition number */
196 #define PART_MAX_MAX 63 /* max. partition number (on IDE disks) */
198 #define MAX_BOOT_SIZE 0x1b6 /* (leave some space for NT's and DR DOS' dirty
199 hacks) scream if the boot sector gets any
200 bigger -- (22.5 - we now use those hacks) */
202 #define BOOT_SIGNATURE 0xAA55 /* boot signature */
203 #define BOOT_SIG_OFFSET 510 /* boot signature offset */
204 #define MAGIC_SERIAL 0xC9CF /* LILO installed serial number */
205 #define PRIME 271 /* prime number used for serial no generation */
206 #define SMALL_PRIME 17 /* another prime, but a small one */
208 #define MAX_BIOS_DEVICES 2 /* max hard disk devices used by BIOS */
209 #define MAX_DEVICES 4 /* max hard disk devices, total */
211 #define MAX_BIOS_DEVICES 16 /* max hard disk devices used by BIOS */
212 #define MAX_DEVICES 64 /* max hard disk devices, total */
214 #define MAX_RAID 30 /* max number of RAID disks in a set */
216 #define MAX_RAID_DEVICES 6 /* max raid devices reported to second.S */
218 #define MAX_RAID_DEVICES MAX_DESCR_SECTORS-MAX_DESCR_SECS+6 /* max raid devices reported to second.S */
221 #define PART_LINUX_MINIX 0x81 /* Linux/MINIX partition */
222 #define PART_LINUX_SWAP 0x82 /* Linux swap partition */
223 #define PART_LINUX_NATIVE 0x83 /* Linux native (file system) */
224 #define PART_DOS_EXTD 5 /* DOS Extended partition */
225 #define PART_WIN_EXTD_LBA 0xF /* Win95/98 Extended partition */
226 #define PART_LINUX_EXTD 0x85 /* Linux Extended partition */
227 #define PART_LINUX_LVM 0x8E /* Linux LVM partition */
228 #define PART_OS2_BOOTMGR 0xA /* OS/2 Boot Manager */
230 #define PART_DOS12 1 /* DOS 12 bit FAT partition type */
231 #define PART_DOS16_SMALL 4 /* DOS 16 bit FAT partition type, < 32 MB */
232 #define PART_DOS16_BIG 6 /* DOS 16 bit FAT partition type, >= 32 MB */
233 #define PART_HPFS 7 /* OS/2 High Performance File System */
234 #define PART_NTFS 7 /* WinNT File System */
235 #define PART_FAT32 0xB /* Win95/98 FAT32 partition on small disk */
236 #define PART_FAT32_LBA 0xC /* Win95/98 FAT32 partition on large disk */
237 #define PART_FAT16_LBA 0xE /* Win95/98 FAT16 partition on large disk */
238 #define PART_INVALID 98 /* invalid partition type */
240 #define HIDDEN_OFF 0x10 /* type offset to hide partition (OS/2 BM) */
241 #define PART_HDOS12 (PART_DOS12+HIDDEN_OFF)
242 #define PART_HDOS16_SMALL (PART_DOS16_SMALL+HIDDEN_OFF)
243 #define PART_HDOS16_BIG (PART_DOS16_BIG+HIDDEN_OFF)
245 #define STAGE_FIRST 1 /* first stage loader code */
246 #define STAGE_SECOND 2 /* second stage loader code */
247 #define STAGE_CHAIN 0x10 /* chain loader code */
248 #define STAGE_DRIVE_MAP 0x11 /* chain loader drive mapper */
249 #define STAGE_MBR 0x12 /* mbr loader */
250 #define STAGE_MBR2 0x13 /* mbr2 loader (extended) */
251 #define STAGE_FLAG_SERIAL 0x0100 /* boot loader supports serial i/o */
252 #define STAGE_FLAG_MENU 0x0200 /* boot loader supports menu interface */
253 #define STAGE_FLAG_BMP4 0x0400 /* boot loader supports 640x480x4 bitmaps */
255 #define VSS_NUM 497 /* address where variable setup size is stored */
256 #define VGA_SET 506 /* address of initial kernel VGA mode */
257 #define SETUPSECS 4 /* default number of setup sectors */
258 #define MAX_SETUPSECS 63 /* maximum number of sectors in kernel
259 setup code (+ bootsect) (for kernel >= 2.4.0) */
260 #define MAX_KERNEL_SECS 1024 /* absolute maximum kernel size */
261 #define SPECIAL_SECTORS 2 /* special sectors (don't compact) at beginning
263 #define SPECIAL_BOOTSECT 1 /* INITSEG bootsect.S bootloader at beginning
264 of all kernels, ahead of SETUPSECS */
266 #define LINEAR_FLAG 0x40 /* mark linear address */
267 #define LBA32_FLAG 0x20 /* mark lba 32-bit address */
268 #define LBA32_NOCOUNT 0x40 /* mark address with count absent */
269 #define RAID_REL_FLAG 0x10 /* mark address raid-relocatable */
273 * 0x00 pure geometric addressing (C:H:S)
274 * 0x40 Linear address (24-bits) converted to CHS at boot-time
275 * 0x60 LBA32 address (32-bits), count=1, sets the high nibble!!
276 * 0x20 LBA32 address (24-bits) + (8-bit) high nibble (implied)
279 #define DEV_MASK_EXP 0x80+MAX_BIOS_DEVICES-1
280 #define DEV_MASK (DEV_MASK_EXP)
282 #define EX_OFF SETUP_STACKSIZE-8+SSDIFF /* external parameter block */
283 #define EX_DL_MAG 0xfe /* magic number in DL */
284 #define EX_MAG_L 0x494c /* magic number at ES:SI, "LI" */
285 #define EX_MAG_H 0x4f4c /* magic number at ES:SI+2, "LO" */
286 #define EX_MAG_HL 0x4f4c494c /* "LILO" */
287 #define EX_MAG_STRING "LILO" /* magic signature string as as string */
289 #define BIOS_MAX_DEVS 2 /* BIOS devices (2 fd, 2 hd) */
290 #define BIOS_MAX_HEADS 256 /* 8 bits head number; really 255 */
291 /* but must account for oddball BIOS's that allow 256 */
292 #define BIOS_MAX_CYLS 1024 /* 10 bits cylinder number */
293 #define BIOS_MAX_SECS 64 /* 6 bits sector number (really 63) */
295 /* these are the boot record flags in the "prompt" variable */
296 #define FLAG_PROMPT 1 /* always issue boot: prompt */
297 #define FLAG_RAID 2 /* one boot record of many */
298 #define FLAG_RAID_DEFEAT 4 /* defeat finding this RAID boot record */
300 #define FLAG_RAID_NOWRITE 8 /* defeat RAID writeback of command line */
302 #define FLAG_NOBD 16 /* defeat BIOS data collection at boot time */
303 #define FLAG_LARGEMEM 32 /* BIOS has MoveExtMemBlk support for 386 */
304 #define FLAG_MAP_ON_BOOT 64 /* map file is on the boot device */
305 #define FLAG_BD_OKAY 128 /* BIOS data collection known to work */
306 #ifdef FLAG_RAID_NOWRITE
307 #define FLAG_SAVE (~(FLAG_RAID|FLAG_RAID_DEFEAT|FLAG_RAID_NOWRITE)) /* All but raid flags */
309 #define FLAG_SAVE (~(FLAG_RAID|FLAG_RAID_DEFEAT)) /* All but raid flags */
312 /* these are the second-stage specific flags */
313 #define FLAG2_EL_TORITO 2 /* El Torito format bootable CD */
314 #define FLAG2_UNATTENDED 4 /* Unattended booting option */
315 #define FLAG2_VIRTUAL 8 /* vmdefault, vmdisable, vmwarn used */
316 #define FLAG2_NOKBD 16 /* nokbdefault, nokbdisable used */
318 /* these are the descriptor flags */
319 #define FLAG_VGA 1 /* override VGA mode */
320 #define FLAG_RESTR 2 /* restrict additional parameters */
321 #define FLAG_LOCK 4 /* lock on target */
322 #define FLAG_MODKRN 8 /* modern kernel with high memory support */
323 #define FLAG_KERNEL 16 /* image is a kernel */
324 #define FLAG_TOOBIG 32 /* initrd so big that kernel could be overwritten */
325 #define FLAG_FALLBACK 64 /* fallback command line exists */
326 #define FLAG_PASSWORD 128 /* this image requires a password */
327 #define FLAG_LOADHI 256 /* this kernel loads high (>=1Mb) */
329 #define FLAG_VMDISABLE 512 /* unable to boot if virtual */
330 #define FLAG_VMWARN 1024 /* warn on virtual boot */
331 #define FLAG_VMDEFAULT 2048 /* this is the default vitual load */
333 #define FLAG_SINGLE 4096 /* single key activation */
334 #define FLAG_RETAIN 0x2000 /* retain BMP screen on boot */
335 #ifdef LCF_NOKEYBOARD
336 #define FLAG_NOKBDEFAULT 0x4000 /* this is the default with no keyboard */
337 #define FLAG_NOKBDISABLE 0x8000 /* unable to boot if no keyboard */
340 #define VGA_NOCOVR 0x8000 /* VGA setting not overridden on command line */
342 #define SER_DFL_PRM 0xa3 /* default serial parameters: 2400n8 */
344 #define DC_MAGIC 0xf4f2 /* magic number of default cmd. line sector */
345 #define DC_MGOFF 0x6b6d /* magic number for disabled line */
347 #define MAX_MESSAGE 65535 /* maximum message length */
348 #define MAX_MENU_TITLE 37 /* maximum MENU title length */
350 #define NEW_HDR_SIG "HdrS" /* setup header signature */
351 #define NEW_HDR_VERSION 0x200 /* header version number */
352 #define NEW2_HDR_VERSION 0x202 /* new cmdline protocol */
353 #define NEW3_HDR_VERSION 0X203 /* defines CL_RAMDISK_MAX */
354 #define LOADER_VERSION 0x02 /* loader version, for SETUP_HDR.loader */
355 #define LFLAG_HIGH 1 /* SETUP_HDR.flags */
356 #define LFLAG_USE_HEAP 0x80
358 #define PRTMAP_SIZE 32 /* number of partition type mappings */
359 #define DRVMAP_SIZE 24 /* number of drive mappings */
361 #define CRC_POLY1 0x04c11db7
362 #define CRC_POLY2 0x23a55379
363 #define CRC_POLY3 0x049f21c7
364 #define CRC_POLY4 0x1c632927
365 #define CRC_POLY5 0xA3139383
367 #define PROBE_SIGNATURE "LiLo" /* signature placed in low memory */
368 #define PROBESEG 0x60 /* must be in first 4k page in memory */
369 #define EDD_LTH 30 /* length of the EDD return structure (max) */
370 #define EDD_PACKET 01 /* packet calls are supported */
371 #define EDD_LOCK 02 /* removable media may be locked */
372 #define EDD_SUBSET 04 /* EDD call supported */
377 BOOTSEG = 0x07C0 ! original address of boot-sector
378 PARTS_LOAD= 0x0600 ! partition sector load address
379 PARTS_SCR = 0x0800 ! ditto, for non-boot partitions
380 PART_TABLE= 0x07BE ! partition table
382 INITSEG = DEF_INITSEG ! we move boot here - out of the way
383 SETUPSEG = DEF_SETUPSEG ! setup starts here
384 SYSSEG = DEF_SYSSEG ! system loaded at 0x10000 (65536).
386 MAX_DESCR_SECS_asm = MAX_DESCR_SECS ! **
387 MAX_DESCR_SECTORS_asm = MAX_DESCR_SECTORS ! **
388 MAX_IMAGE_NAME_asm = MAX_IMAGE_NAME ! **
389 MAX_PW_CRC_asm = MAX_PW_CRC ! **
390 SECTOR_SIZE_asm = SECTOR_SIZE ! **
391 MAX_MENU_TITLE_asm = MAX_MENU_TITLE ! **
392 MAX_BIOS_DEVICES_asm = MAX_BIOS_DEVICES ! **
393 MAX_RAID_DEVICES_asm = MAX_RAID_DEVICES ! **
394 DEV_MASK_asm = DEV_MASK_EXP ! **
397 STACKSEG = 0x9000 ! MUST == INITSEG for kernel 2.0.36 (and others?)
398 SETUP_STACKSIZE = 2048 ! stacksize for kernel setup.S
401 #define BOOTSEG 0x07c0 /* for probe.c */
404 #define FIRSTSEG BOOTSEG
408 STACK = 2048 ! amount of stack space to reserve
411 BOOTSECT = 0x200 ! kernel bootsect.S
413 #define SETUP_STACK_DYN PARMLINE
414 #define SLA_SIZE_DYN SETUP_STACK_DYN-SETUP_STACKSIZE-BOOTSECT
416 KBBEG = 0x41A ! beginning of keyboard buffer
417 KBEND = 0x41C ! end of keyboard buffer
424 ! 0x007BE-0x007FD 64 B partition table
425 ! 0x07C00-0x07DFF 0.5 kB HD/FD boot load address
426 ! 0x10000-0x8FFFF 512.0 kB kernel (zImage)
427 ! 0x90000-0x901FF 0.5 kB kernel floppy boot sector (bootsect.S)
428 ! 0x90200-0x967FF 25.5 kB kernel setup code (setup.S) and heap
429 ! 0x96800-0x969FF 0.5 kB LILO stack
430 ! 0x96A00-0x96BFF 0.5 kB LILO first stage loader
431 ! 0x96C00-0x985FF 6.5 kB LILO second stage loader
432 ! 0x98600-0x987FF 0.5 kB file map load area
433 ! 0x98800-0x98BFF 1 kB descriptor table load area
434 ! 0x98C00-0x98DFF 0.5 kB default command line load area
435 ! 0x98E00-0x98FFF 0.5 kB keyboard translation table load area
436 ! 0x99000-0x991FF 0.5 kB parameter line construction area
437 ! 0x99200-0x9FFFF 27.5 kB Extended BIOS Data Area
439 ! when LILO has loaded the kernel, and control is transfered to
440 ! the kernel setup.S code at 0x9020:0000
442 ! 0x007BE-0x007FD 64 B partition table
443 ! 0x07C00-0x07DFF 0.5 kB HD/FD boot load address
444 ! 0x10000-0x8FFFF 512.0 kB kernel (zImage)
445 ! 0x90000-0x901FF 0.5 kB kernel floppy boot sector (bootsect.S)
446 ! 0x90200-0x967FF 25.5 kB kernel setup code (setup.S) and heap
447 ! 0x96800-0x987FF 8.0 kB additional heap space
448 ! 0x98800-0x98FFF 2.0 kB stack created for (setup.S)
449 ! 0x99000-0x991FF 0.5 kB parameter line for kernel
450 ! 0x99200-0x9FFFF 27.5 kB Extended BIOS Data Area
452 CL_MAGIC_ADDR = 0x20 ! command line magic number
453 CL_MAGIC = 0xa33f ! very unusual command sequence
454 CL_OFFSET = 0x22 ! command line offset
455 CL_LENGTH = COMMAND_LINE_SIZE ! maximum length = 256-1
457 ! 0x90020-0x90021 2 by command line magic number
458 ! 0x90022-0x90023 2 by command line offset
460 CL_HEADER_ID = 0x202 ! "HdrS"
461 CL_HDRS_VERSION = 0x206 ! 0x0201=old; 0x0202=new
462 NEW_VERSION = NEW2_HDR_VERSION ! 0x0202 for new cmdline protocol
463 CL_POINTER = 0x228 ! new pointer is dword address
464 CL_RAMDISK_MAX = CL_POINTER+4 ! ramdisk_max; header version 0x0203
469 /* Bug fix needed for some S-ATA controllers with the Silicon Image
470 3112 or 3114 chipsets. Early versions of the SI BIOS do not properly
471 update the low memory size in the BIOS Data Area at 40h:13h when
472 they allocate space in the Extended BIOS Data Area (EBDA).
474 #ifdef LCF_BUG_SI_EBDA
475 # define EBDA_EXTRA LCF_BUG_SI_EBDA
477 # define EBDA_EXTRA 0
481 /* the following configuration variable are now required
482 don't compile without them ...