亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? setup.s

?? linux-2.6.15.6
?? S
?? 第 1 頁 / 共 2 頁
字號:
/* *	setup.S		Copyright (C) 1991, 1992 Linus Torvalds * * setup.s is responsible for getting the system data from the BIOS, * and putting them into the appropriate places in system memory. * both setup.s and system has been loaded by the bootblock. * * This code asks the bios for memory/disk/other parameters, and * puts them in a "safe" place: 0x90000-0x901FF, ie where the * boot-block used to be. It is then up to the protected mode * system to read them from there before the area is overwritten * for buffer-blocks. * * Move PS/2 aux init code to psaux.c * (troyer@saifr00.cfsat.Honeywell.COM) 03Oct92 * * some changes and additional features by Christoph Niemann, * March 1993/June 1994 (Christoph.Niemann@linux.org) * * add APM BIOS checking by Stephen Rothwell, May 1994 * (sfr@canb.auug.org.au) * * High load stuff, initrd support and position independency * by Hans Lermen & Werner Almesberger, February 1996 * <lermen@elserv.ffm.fgan.de>, <almesber@lrc.epfl.ch> * * Video handling moved to video.S by Martin Mares, March 1996 * <mj@k332.feld.cvut.cz> * * Extended memory detection scheme retwiddled by orc@pell.chi.il.us (david * parsons) to avoid loadlin confusion, July 1997 * * Transcribed from Intel (as86) -> AT&T (gas) by Chris Noe, May 1999. * <stiker@northlink.com> * * Fix to work around buggy BIOSes which don't use carry bit correctly * and/or report extended memory in CX/DX for e801h memory size detection  * call.  As a result the kernel got wrong figures.  The int15/e801h docs * from Ralf Brown interrupt list seem to indicate AX/BX should be used * anyway.  So to avoid breaking many machines (presumably there was a reason * to orginally use CX/DX instead of AX/BX), we do a kludge to see * if CX/DX have been changed in the e801 call and if so use AX/BX . * Michael Miller, April 2001 <michaelm@mjmm.org> * * Added long mode checking and SSE force. March 2003, Andi Kleen.		 */#include <linux/config.h>#include <asm/segment.h>#include <linux/version.h>#include <linux/compile.h>#include <asm/boot.h>#include <asm/e820.h>#include <asm/page.h>/* Signature words to ensure LILO loaded us right */#define SIG1	0xAA55#define SIG2	0x5A5AINITSEG  = DEF_INITSEG		# 0x9000, we move boot here, out of the waySYSSEG   = DEF_SYSSEG		# 0x1000, system loaded at 0x10000 (65536).SETUPSEG = DEF_SETUPSEG		# 0x9020, this is the current segment				# ... and the former contents of CSDELTA_INITSEG = SETUPSEG - INITSEG	# 0x0020.code16.globl begtext, begdata, begbss, endtext, enddata, endbss.textbegtext:.databegdata:.bssbegbss:.textstart:	jmp	trampoline# This is the setup header, and it must start at %cs:2 (old 0x9020:2)		.ascii	"HdrS"		# header signature		.word	0x0204		# header version number (>= 0x0105)					# or else old loadlin-1.5 will fail)realmode_swtch:	.word	0, 0		# default_switch, SETUPSEGstart_sys_seg:	.word	SYSSEG		.word	kernel_version	# pointing to kernel version string					# above section of header is compatible					# with loadlin-1.5 (header v1.5). Don't					# change it.type_of_loader:	.byte	0		# = 0, old one (LILO, Loadlin,					#      Bootlin, SYSLX, bootsect...)					# See Documentation/i386/boot.txt for					# assigned ids	# flags, unused bits must be zero (RFU) bit within loadflagsloadflags:LOADED_HIGH	= 1			# If set, the kernel is loaded highCAN_USE_HEAP	= 0x80			# If set, the loader also has set					# heap_end_ptr to tell how much					# space behind setup.S can be used for					# heap purposes.					# Only the loader knows what is free#ifndef __BIG_KERNEL__		.byte	0#else		.byte	LOADED_HIGH#endifsetup_move_size: .word  0x8000		# size to move, when setup is not					# loaded at 0x90000. We will move setup 					# to 0x90000 then just before jumping					# into the kernel. However, only the					# loader knows how much data behind					# us also needs to be loaded.code32_start:				# here loaders can put a different					# start address for 32-bit code.#ifndef __BIG_KERNEL__		.long	0x1000		#   0x1000 = default for zImage#else		.long	0x100000	# 0x100000 = default for big kernel#endiframdisk_image:	.long	0		# address of loaded ramdisk image					# Here the loader puts the 32-bit					# address where it loaded the image.					# This only will be read by the kernel.ramdisk_size:	.long	0		# its size in bytesbootsect_kludge:		.long	0		# obsoleteheap_end_ptr:	.word	modelist+1024	# (Header version 0x0201 or later)					# space from here (exclusive) down to					# end of setup code can be used by setup					# for local heap purposes.pad1:		.word	0cmd_line_ptr:	.long 0			# (Header version 0x0202 or later)					# If nonzero, a 32-bit pointer					# to the kernel command line.					# The command line should be					# located between the start of					# setup and the end of low					# memory (0xa0000), or it may					# get overwritten before it					# gets read.  If this field is					# used, there is no longer					# anything magical about the					# 0x90000 segment; the setup					# can be located anywhere in					# low memory 0x10000 or higher.ramdisk_max:	.long 0xffffffff	trampoline:	call	start_of_setup		.align 16					# The offset at this point is 0x240		.space  (0xeff-0x240+1)	# E820 & EDD space (ending at 0xeff)# End of setup header #####################################################start_of_setup:# Bootlin depends on this being done early	movw	$0x01500, %ax	movb	$0x81, %dl	int	$0x13#ifdef SAFE_RESET_DISK_CONTROLLER# Reset the disk controller.	movw	$0x0000, %ax	movb	$0x80, %dl	int	$0x13#endif# Set %ds = %cs, we know that SETUPSEG = %cs at this point	movw	%cs, %ax		# aka SETUPSEG	movw	%ax, %ds# Check signature at end of setup	cmpw	$SIG1, setup_sig1	jne	bad_sig	cmpw	$SIG2, setup_sig2	jne	bad_sig	jmp	good_sig1# Routine to print asciiz string at ds:siprtstr:	lodsb	andb	%al, %al	jz	fin	call	prtchr	jmp	prtstrfin:	ret# Space printingprtsp2:	call	prtspc		# Print double spaceprtspc:	movb	$0x20, %al	# Print single space (note: fall-thru)prtchr:		pushw	%ax	pushw	%cx	movw	$0007,%bx	movw	$0x01, %cx	movb	$0x0e, %ah	int	$0x10	popw	%cx	popw	%ax	retbeep:	movb	$0x07, %al	jmp	prtchr	no_sig_mess: .string	"No setup signature found ..."good_sig1:	jmp	good_sig# We now have to find the rest of the setup code/databad_sig:	movw	%cs, %ax			# SETUPSEG	subw	$DELTA_INITSEG, %ax		# INITSEG	movw	%ax, %ds	xorb	%bh, %bh	movb	(497), %bl			# get setup sect from bootsect	subw	$4, %bx				# LILO loads 4 sectors of setup	shlw	$8, %bx				# convert to words (1sect=2^8 words)	movw	%bx, %cx	shrw	$3, %bx				# convert to segment	addw	$SYSSEG, %bx	movw	%bx, %cs:start_sys_seg# Move rest of setup code/data to here	movw	$2048, %di			# four sectors loaded by LILO	subw	%si, %si	movw	%cs, %ax			# aka SETUPSEG	movw	%ax, %es	movw	$SYSSEG, %ax	movw	%ax, %ds	rep	movsw	movw	%cs, %ax			# aka SETUPSEG	movw	%ax, %ds	cmpw	$SIG1, setup_sig1	jne	no_sig	cmpw	$SIG2, setup_sig2	jne	no_sig	jmp	good_signo_sig:	lea	no_sig_mess, %si	call	prtstrno_sig_loop:	jmp	no_sig_loopgood_sig:	movw	%cs, %ax			# aka SETUPSEG	subw	$DELTA_INITSEG, %ax 		# aka INITSEG	movw	%ax, %ds# Check if an old loader tries to load a big-kernel	testb	$LOADED_HIGH, %cs:loadflags	# Do we have a big kernel?	jz	loader_ok			# No, no danger for old loaders.	cmpb	$0, %cs:type_of_loader 		# Do we have a loader that						# can deal with us?	jnz	loader_ok			# Yes, continue.	pushw	%cs				# No, we have an old loader,	popw	%ds				# die. 	lea	loader_panic_mess, %si	call	prtstr	jmp	no_sig_looploader_panic_mess: .string "Wrong loader, giving up..."loader_ok:	/* check for long mode. */	/* we have to do this before the VESA setup, otherwise the user	   can't see the error message. */		pushw	%ds	movw	%cs,%ax	movw	%ax,%ds		/* minimum CPUID flags for x86-64 */	/* see http://www.x86-64.org/lists/discuss/msg02971.html */		#define SSE_MASK ((1<<25)|(1<<26))#define REQUIRED_MASK1 ((1<<0)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<8)|\					   (1<<13)|(1<<15)|(1<<24))#define REQUIRED_MASK2 (1<<29)	pushfl				/* standard way to check for cpuid */	popl	%eax	movl	%eax,%ebx	xorl	$0x200000,%eax	pushl	%eax	popfl	pushfl	popl	%eax	cmpl	%eax,%ebx	jz	no_longmode		/* cpu has no cpuid */	movl	$0x0,%eax	cpuid	cmpl	$0x1,%eax	jb	no_longmode		/* no cpuid 1 */	xor	%di,%di	cmpl	$0x68747541,%ebx	/* AuthenticAMD */	jnz	noamd	cmpl	$0x69746e65,%edx	jnz	noamd	cmpl	$0x444d4163,%ecx	jnz	noamd	mov	$1,%di			/* cpu is from AMD */noamd:			movl    $0x1,%eax	cpuid	andl	$REQUIRED_MASK1,%edx	xorl	$REQUIRED_MASK1,%edx	jnz	no_longmode	movl    $0x80000000,%eax	cpuid	cmpl    $0x80000001,%eax	jb      no_longmode             /* no extended cpuid */	movl    $0x80000001,%eax	cpuid	andl    $REQUIRED_MASK2,%edx	xorl    $REQUIRED_MASK2,%edx	jnz     no_longmodesse_test:			movl	$1,%eax	cpuid	andl	$SSE_MASK,%edx	cmpl	$SSE_MASK,%edx	je	sse_ok	test	%di,%di	jz	no_longmode	/* only try to force SSE on AMD */ 	movl	$0xc0010015,%ecx	/* HWCR */	rdmsr	btr	$15,%eax	/* enable SSE */	wrmsr	xor	%di,%di		/* don't loop */	jmp	sse_test	/* try again */	no_longmode:	call	beep	lea	long_mode_panic,%si	call	prtstrno_longmode_loop:			jmp	no_longmode_looplong_mode_panic:	.string "Your CPU does not support long mode. Use a 32bit distribution."	.byte 0	sse_ok:	popw	%ds	# tell BIOS we want to go to long mode	movl  $0xec00,%eax	# declare target operating mode	movl  $2,%ebx		# long mode	int $0x15				# Get memory size (extended mem, kB)	xorl	%eax, %eax	movl	%eax, (0x1e0)#ifndef STANDARD_MEMORY_BIOS_CALL	movb	%al, (E820NR)# Try three different memory detection schemes.  First, try# e820h, which lets us assemble a memory map, then try e801h,# which returns a 32-bit memory size, and finally 88h, which# returns 0-64m# method E820H:# the memory map from hell.  e820h returns memory classified into# a whole bunch of different types, and allows memory holes and# everything.  We scan through this memory map and build a list# of the first 32 memory areas, which we return at [E820MAP].# This is documented at http://www.acpi.info/, in the ACPI 2.0 specification.#define SMAP  0x534d4150meme820:	xorl	%ebx, %ebx			# continuation counter	movw	$E820MAP, %di			# point into the whitelist						# so we can have the bios						# directly write into it.jmpe820:	movl	$0x0000e820, %eax		# e820, upper word zeroed	movl	$SMAP, %edx			# ascii 'SMAP'	movl	$20, %ecx			# size of the e820rec	pushw	%ds				# data record.	popw	%es	int	$0x15				# make the call	jc	bail820				# fall to e801 if it fails	cmpl	$SMAP, %eax			# check the return is `SMAP'	jne	bail820				# fall to e801 if it fails#	cmpl	$1, 16(%di)			# is this usable memory?#	jne	again820	# If this is usable memory, we save it by simply advancing %di by	# sizeof(e820rec).	#good820:	movb	(E820NR), %al			# up to 128 entries	cmpb	$E820MAX, %al	jae	bail820	incb	(E820NR)	movw	%di, %ax	addw	$20, %ax	movw	%ax, %diagain820:	cmpl	$0, %ebx			# check to see if	jne	jmpe820				# %ebx is set to EOFbail820:# method E801H:# memory size is in 1k chunksizes, to avoid confusing loadlin.# we store the 0xe801 memory size in a completely different place,# because it will most likely be longer than 16 bits.# (use 1e0 because that's what Larry Augustine uses in his# alternative new memory detection scheme, and it's sensible

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区美女| 国产精品久久看| 亚洲一区二区三区爽爽爽爽爽 | 日韩你懂的在线播放| 国产91富婆露脸刺激对白| 国产成人免费视频网站高清观看视频| 在线观看视频一区| 亚洲欧洲美洲综合色网| 国产一区日韩二区欧美三区| 在线不卡的av| 亚洲午夜视频在线| 欧美视频三区在线播放| 亚洲免费成人av| 色综合夜色一区| 亚洲1区2区3区4区| 97久久精品人人做人人爽50路| 久久综合久久综合九色| 免费看精品久久片| 欧美xingq一区二区| 亚洲成人你懂的| 欧美一区二区三区四区视频| 日韩精品亚洲一区二区三区免费| 欧美日韩在线播放三区四区| 亚洲激情自拍视频| 欧美日韩一区二区电影| 日韩高清欧美激情| 欧美xingq一区二区| 国产伦精品一区二区三区免费| www国产精品av| 成人福利视频在线| 亚洲高清中文字幕| 8v天堂国产在线一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎| 2023国产精华国产精品| 成人国产视频在线观看 | 激情小说亚洲一区| 国产精品欧美久久久久一区二区| 99久久精品情趣| 婷婷久久综合九色综合绿巨人| 精品国精品国产尤物美女| 成人黄色777网| 日韩主播视频在线| 国产精品私房写真福利视频| 在线观看日韩高清av| 激情偷乱视频一区二区三区| 亚洲日本在线天堂| 欧美一二三四在线| 一本大道久久a久久综合婷婷 | 日本高清不卡在线观看| 麻豆精品视频在线观看视频| 亚洲欧美日韩在线| 久久久一区二区三区| 91精品国产综合久久福利软件 | 免费成人在线影院| 一二三四区精品视频| 国产精品视频麻豆| 精品精品国产高清a毛片牛牛| 色哟哟国产精品| 国产98色在线|日韩| 蜜桃视频在线观看一区二区| 亚洲免费电影在线| 国产精品久久久久久久久久久免费看 | 国产一区欧美日韩| 日本成人在线电影网| 亚洲午夜久久久久久久久电影院| 国产精品区一区二区三区| xfplay精品久久| 久久一留热品黄| 精品欧美乱码久久久久久1区2区| 欧美精品乱码久久久久久按摩| 在线观看国产精品网站| 欧美性一级生活| 精品1区2区3区| 69精品人人人人| 91麻豆精品国产91久久久久久| 欧美三级视频在线| 欧美久久久久免费| 欧美一卡二卡三卡四卡| 日韩一区二区不卡| 亚洲精品在线观| 国产精品无遮挡| 国产精品二三区| 洋洋成人永久网站入口| 亚洲成人av免费| 久久国产乱子精品免费女| 韩国女主播成人在线| 国产丶欧美丶日本不卡视频| 国产aⅴ综合色| 欧洲一区在线观看| 欧美一区二区三区喷汁尤物| 欧美变态凌虐bdsm| 1区2区3区国产精品| 亚洲伦理在线精品| 蜜臀久久99精品久久久久宅男| 国产精品一品二品| 91激情五月电影| 欧美v日韩v国产v| 日韩美女视频19| 免费黄网站欧美| 91免费精品国自产拍在线不卡| 69堂国产成人免费视频| 国产精品欧美久久久久无广告| 亚洲小说欧美激情另类| 国产精品亚洲第一| 欧美三级在线播放| 1024国产精品| 经典三级视频一区| 欧美日韩综合在线免费观看| 久久精品夜夜夜夜久久| 亚洲成人免费视| av在线播放不卡| 精品国产伦一区二区三区免费| 亚洲综合色噜噜狠狠| 国产91精品精华液一区二区三区 | 中文字幕一区二区不卡| 欧美aⅴ一区二区三区视频| 91免费观看视频在线| 久久婷婷国产综合国色天香| 日日夜夜精品视频免费| 99国产欧美久久久精品| 国产精品亲子伦对白| 成人免费看视频| 美女一区二区三区在线观看| 成人av一区二区三区| 欧美日韩精品一区二区三区蜜桃| 国产精品久线在线观看| 国产精品中文字幕日韩精品| 精品国产乱码久久久久久1区2区 | 日韩精品一区二区三区视频| 亚洲永久精品大片| 色视频成人在线观看免| 综合色中文字幕| 在线视频综合导航| 亚洲一级二级三级| 欧美日韩一级二级| 日韩精品五月天| 日韩欧美色综合网站| 裸体歌舞表演一区二区| 精品999在线播放| 国产高清不卡一区二区| 亚洲国产激情av| 99久久久国产精品免费蜜臀| 亚洲永久免费av| 日韩一区二区不卡| 国产成人在线观看免费网站| 国产精品久久久久久久久动漫| 91免费观看国产| 日本一不卡视频| 日本一区二区成人在线| 不卡的av在线播放| 天天免费综合色| 久久美女艺术照精彩视频福利播放 | 久久嫩草精品久久久精品一| 91网上在线视频| 日韩一区欧美二区| 中文字幕久久午夜不卡| 欧美撒尿777hd撒尿| 国产乱码精品一区二区三区忘忧草 | 美国十次综合导航| 中文字幕在线不卡一区二区三区 | 在线视频亚洲一区| 精品系列免费在线观看| 一区二区三区视频在线观看| 精品久久久久久久人人人人传媒| 国产91在线观看丝袜| 日韩中文字幕1| 中文字幕视频一区| 日韩欧美亚洲一区二区| 欧美专区在线观看一区| 国产激情一区二区三区桃花岛亚洲| 亚洲综合视频在线| 中文文精品字幕一区二区| 欧美一区二区三区视频在线| 色哟哟精品一区| 成人综合在线观看| 美腿丝袜亚洲综合| 日一区二区三区| 一区二区三区中文免费| 国产精品久久久久久久午夜片| 日韩免费观看2025年上映的电影| 欧美日韩一区二区在线观看| 91影视在线播放| 99久久精品免费| 成人精品在线视频观看| 国产激情视频一区二区三区欧美 | 欧美久久久久免费| 欧美亚洲综合久久| 欧美视频一区二区三区在线观看| 91麻豆国产精品久久| 91免费版在线| 在线亚洲高清视频| 欧美日韩在线电影| 日韩午夜激情免费电影| 91精品国产日韩91久久久久久| 777xxx欧美| 精品国产髙清在线看国产毛片| 精品国产乱码久久久久久免费| 久久综合给合久久狠狠狠97色69| 久久婷婷国产综合精品青草| 国产精品久久久久影视|