Make struct boot_params a real structure, and remove obsolete fields
Make struct boot_params a real structure, and remove the handling of some obsolete fields, in particular hd*_info, which was only used by the ST-506 driver, and likely to be wrong for that driver on any modern BIOS. Signed-off-by: H. Peter Anvin <hpa@zytor.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
					parent
					
						
							
								9c25d134b3
							
						
					
				
			
			
				commit
				
					
						48c7ae674f
					
				
			
		
					 5 changed files with 94 additions and 30 deletions
				
			
		|  | @ -102,19 +102,10 @@ static unsigned int highmem_pages = -1; | |||
| /*
 | ||||
|  * Setup options | ||||
|  */ | ||||
| struct drive_info_struct { char dummy[32]; } drive_info; | ||||
| #if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_HD) || \ | ||||
|     defined(CONFIG_BLK_DEV_IDE_MODULE) || defined(CONFIG_BLK_DEV_HD_MODULE) | ||||
| EXPORT_SYMBOL(drive_info); | ||||
| #endif | ||||
| struct screen_info screen_info; | ||||
| EXPORT_SYMBOL(screen_info); | ||||
| struct apm_info apm_info; | ||||
| EXPORT_SYMBOL(apm_info); | ||||
| struct sys_desc_table_struct { | ||||
| 	unsigned short length; | ||||
| 	unsigned char table[0]; | ||||
| }; | ||||
| struct edid_info edid_info; | ||||
| EXPORT_SYMBOL_GPL(edid_info); | ||||
| struct ist_info ist_info; | ||||
|  | @ -134,7 +125,7 @@ unsigned long saved_videomode; | |||
| 
 | ||||
| static char __initdata command_line[COMMAND_LINE_SIZE]; | ||||
| 
 | ||||
| unsigned char __initdata boot_params[PARAM_SIZE]; | ||||
| struct boot_params __initdata boot_params; | ||||
| 
 | ||||
| #if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE) | ||||
| struct edd edd; | ||||
|  | @ -528,7 +519,6 @@ void __init setup_arch(char **cmdline_p) | |||
| #endif | ||||
| 
 | ||||
|  	ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV); | ||||
|  	drive_info = DRIVE_INFO; | ||||
|  	screen_info = SCREEN_INFO; | ||||
| 	edid_info = EDID_INFO; | ||||
| 	apm_info.bios = APM_BIOS_INFO; | ||||
|  |  | |||
							
								
								
									
										85
									
								
								include/asm-i386/bootparam.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								include/asm-i386/bootparam.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,85 @@ | |||
| #ifndef _ASM_BOOTPARAM_H | ||||
| #define _ASM_BOOTPARAM_H | ||||
| 
 | ||||
| #include <linux/types.h> | ||||
| #include <linux/screen_info.h> | ||||
| #include <linux/apm_bios.h> | ||||
| #include <asm/e820.h> | ||||
| #include <linux/edd.h> | ||||
| #include <video/edid.h> | ||||
| 
 | ||||
| struct setup_header { | ||||
| 	u8	setup_sects; | ||||
| 	u16	root_flags; | ||||
| 	u32	syssize; | ||||
| 	u16	ram_size; | ||||
| 	u16	vid_mode; | ||||
| 	u16	root_dev; | ||||
| 	u16	boot_flag; | ||||
| 	u16	jump; | ||||
| 	u32	header; | ||||
| 	u16	version; | ||||
| 	u32	realmode_swtch; | ||||
| 	u16	start_sys; | ||||
| 	u16	kernel_version; | ||||
| 	u8	type_of_loader; | ||||
| 	u8	loadflags; | ||||
| #define LOADED_HIGH	0x01 | ||||
| #define CAN_USE_HEAP	0x80 | ||||
| 	u16	setup_move_size; | ||||
| 	u32	code32_start; | ||||
| 	u32	ramdisk_image; | ||||
| 	u32	ramdisk_size; | ||||
| 	u32	bootsect_kludge; | ||||
| 	u16	heap_end_ptr; | ||||
| 	u16	_pad1; | ||||
| 	u32	cmd_line_ptr; | ||||
| 	u32	initrd_addr_max; | ||||
| 	u32	kernel_alignment; | ||||
| 	u8	relocatable_kernel; | ||||
| } __attribute__((packed)); | ||||
| 
 | ||||
| struct sys_desc_table { | ||||
| 	u16 length; | ||||
| 	u8  table[14]; | ||||
| }; | ||||
| 
 | ||||
| struct efi_info { | ||||
| 	u32 _pad1; | ||||
| 	u32 efi_systab; | ||||
| 	u32 efi_memdesc_size; | ||||
| 	u32 efi_memdec_version; | ||||
| 	u32 efi_memmap; | ||||
| 	u32 fi_memmap_size; | ||||
| 	u32 _pad2[2]; | ||||
| }; | ||||
| 
 | ||||
| /* The so-called "zeropage" */ | ||||
| struct boot_params { | ||||
| 	struct screen_info screen_info;			/* 0x000 */ | ||||
| 	struct apm_bios_info apm_bios_info;		/* 0x040 */ | ||||
| 	u8  _pad2[12];					/* 0x054 */ | ||||
| 	u32 speedstep_info[4];				/* 0x060 */ | ||||
| 	u8  _pad3[16];					/* 0x070 */ | ||||
| 	u8  hd0_info[16];	/* obsolete! */		/* 0x080 */ | ||||
| 	u8  hd1_info[16];	/* obsolete! */		/* 0x090 */ | ||||
| 	struct sys_desc_table sys_desc_table;		/* 0x0a0 */ | ||||
| 	u8  _pad4[144];					/* 0x0b0 */ | ||||
| 	struct edid_info edid_info;			/* 0x140 */ | ||||
| 	struct efi_info efi_info;			/* 0x1c0 */ | ||||
| 	u32 alt_mem_k;					/* 0x1e0 */ | ||||
| 	u32 scratch;		/* Scratch field! */	/* 0x1e4 */ | ||||
| 	u8  e820_entries;				/* 0x1e8 */ | ||||
| 	u8  eddbuf_entries;				/* 0x1e9 */ | ||||
| 	u8  edd_mbr_sig_buf_entries;			/* 0x1ea */ | ||||
| 	u8  _pad6[6];					/* 0x1eb */ | ||||
| 	struct setup_header hdr;    /* setup header */	/* 0x1f1 */ | ||||
| 	u8  _pad7[0x290-0x1f1-sizeof(struct setup_header)]; | ||||
| 	u32 edd_mbr_sig_buffer[EDD_MBR_SIG_MAX];	/* 0x290 */ | ||||
| 	struct e820entry e820_map[E820MAX];		/* 0x2d0 */ | ||||
| 	u8  _pad8[48];					/* 0xcd0 */ | ||||
| 	struct edd_info eddbuf[EDDMAXNR];		/* 0xd00 */ | ||||
| 	u8  _pad9[276];					/* 0xeec */ | ||||
| } __attribute__((packed)); | ||||
| 
 | ||||
| #endif /* _ASM_BOOTPARAM_H */ | ||||
|  | @ -26,12 +26,15 @@ | |||
| #define NEW_CL_POINTER		0x228	/* Relative to real mode data */ | ||||
| 
 | ||||
| #ifndef __ASSEMBLY__ | ||||
| 
 | ||||
| #include <asm/bootparam.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * This is set up by the setup-routine at boot-time | ||||
|  */ | ||||
| extern unsigned char boot_params[PARAM_SIZE]; | ||||
| extern struct boot_params boot_params; | ||||
| 
 | ||||
| #define PARAM	(boot_params) | ||||
| #define PARAM	((char *)&boot_params) | ||||
| #define SCREEN_INFO (*(struct screen_info *) (PARAM+0)) | ||||
| #define EXT_MEM_K (*(unsigned short *) (PARAM+2)) | ||||
| #define ALT_MEM_K (*(unsigned long *) (PARAM+0x1e0)) | ||||
|  | @ -39,8 +42,7 @@ extern unsigned char boot_params[PARAM_SIZE]; | |||
| #define E820_MAP    ((struct e820entry *) (PARAM+E820MAP)) | ||||
| #define APM_BIOS_INFO (*(struct apm_bios_info *) (PARAM+0x40)) | ||||
| #define IST_INFO   (*(struct ist_info *) (PARAM+0x60)) | ||||
| #define DRIVE_INFO (*(struct drive_info_struct *) (PARAM+0x80)) | ||||
| #define SYS_DESC_TABLE (*(struct sys_desc_table_struct*)(PARAM+0xa0)) | ||||
| #define SYS_DESC_TABLE (*(struct sys_desc_table *)(PARAM+0xa0)) | ||||
| #define EFI_SYSTAB ((efi_system_table_t *) *((unsigned long *)(PARAM+0x1c4))) | ||||
| #define EFI_MEMDESC_SIZE (*((unsigned long *) (PARAM+0x1c8))) | ||||
| #define EFI_MEMDESC_VERSION (*((unsigned long *) (PARAM+0x1cc))) | ||||
|  |  | |||
|  | @ -1,15 +1 @@ | |||
| #ifndef _LINUX_BOOT_H | ||||
| #define _LINUX_BOOT_H | ||||
| 
 | ||||
| /* Don't touch these, unless you really know what you're doing. */ | ||||
| #define DEF_INITSEG	0x9000 | ||||
| #define DEF_SYSSEG	0x1000 | ||||
| #define DEF_SETUPSEG	0x9020 | ||||
| #define DEF_SYSSIZE	0x7F00 | ||||
| 
 | ||||
| /* Internal svga startup constants */ | ||||
| #define NORMAL_VGA	0xffff		/* 80x25 mode */ | ||||
| #define EXTENDED_VGA	0xfffe		/* 80x50 mode */ | ||||
| #define ASK_VGA		0xfffd		/* ask for it at bootup */ | ||||
| 
 | ||||
| #endif | ||||
| #include <asm-i386/boot.h> | ||||
|  |  | |||
							
								
								
									
										1
									
								
								include/asm-x86_64/bootparam.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								include/asm-x86_64/bootparam.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| #include <asm-i386/bootparam.h> | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 H. Peter Anvin
				H. Peter Anvin