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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? setup.s

?? linux-2.6.15.6
?? S
?? 第 1 頁 / 共 2 頁
字號(hào):
/* *	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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品啪在线观看国产60岁| 欧美日韩高清在线| 亚洲mv在线观看| 久久一区二区三区四区| 色综合天天综合网国产成人综合天 | 欧美成人精精品一区二区频| 成人精品国产免费网站| 日韩精品国产欧美| 亚洲图片欧美激情| 国产喂奶挤奶一区二区三区| 91精品免费观看| 色8久久人人97超碰香蕉987| 国产福利一区二区三区视频 | 国产精品系列在线播放| 亚欧色一区w666天堂| 亚洲欧美日韩成人高清在线一区| 久久久久亚洲蜜桃| 日韩亚洲欧美一区| 欧美日韩另类国产亚洲欧美一级| 99视频一区二区三区| 老司机午夜精品| 美国十次综合导航| 日韩影院精彩在线| 亚洲第四色夜色| 亚洲一区二区美女| 亚洲乱码中文字幕| 成人欧美一区二区三区1314| 欧美韩日一区二区三区四区| 国产亚洲短视频| 久久久久久久久久久电影| 欧美精品一区二区三区蜜桃视频| 91精品国产福利| 91精品国产色综合久久不卡电影| 欧美日韩精品是欧美日韩精品| 91国产成人在线| 91成人在线精品| 欧洲精品一区二区三区在线观看| 91在线免费看| 色综合一个色综合亚洲| 91丨九色porny丨蝌蚪| 91欧美一区二区| 色综合激情久久| 91国偷自产一区二区三区成为亚洲经典 | 欧美一级日韩不卡播放免费| 51精品国自产在线| 日韩一区二区三区在线观看| 日韩亚洲欧美高清| 精品福利在线导航| xnxx国产精品| 国产目拍亚洲精品99久久精品| 欧美国产精品一区| 中文字幕亚洲在| 一个色妞综合视频在线观看| 亚洲一级二级在线| 日本少妇一区二区| 国产在线一区观看| 国产精品99久久久| 91亚洲国产成人精品一区二区三 | 亚洲国产综合91精品麻豆| 亚洲bdsm女犯bdsm网站| 蜜桃av一区二区| 国产白丝网站精品污在线入口| jiyouzz国产精品久久| 色狠狠一区二区| 91精品国产福利| 国产人成一区二区三区影院| 亚洲啪啪综合av一区二区三区| 亚洲成在人线在线播放| 亚洲高清免费观看| 狠狠色丁香婷婷综合| 成人18精品视频| 欧美私模裸体表演在线观看| 日韩一级片网站| 国产精品国产自产拍在线| 一区二区三区四区高清精品免费观看| 日韩av高清在线观看| 国产成人夜色高潮福利影视| 在线免费av一区| 精品国产电影一区二区| 亚洲少妇30p| 日韩电影免费一区| 成人高清视频在线| 在线播放国产精品二区一二区四区| 欧美α欧美αv大片| 亚洲特级片在线| 捆绑调教美女网站视频一区| k8久久久一区二区三区| 91麻豆精品国产91| 亚洲少妇30p| 国产精品99久久久久久久vr| 欧美性一级生活| 亚洲国产激情av| 热久久久久久久| 一本久久综合亚洲鲁鲁五月天| 日韩精品一区国产麻豆| 亚洲精品日日夜夜| 国产精品一二三区在线| 欧美性大战久久久久久久蜜臀| 国产午夜精品一区二区三区视频| 亚洲成人精品在线观看| 粉嫩欧美一区二区三区高清影视 | 91久久精品日日躁夜夜躁欧美| 精品国产凹凸成av人网站| 一区二区三区四区在线免费观看 | 国产精品一区二区果冻传媒| 欧美三片在线视频观看 | 一区二区在线观看免费| 国产精品香蕉一区二区三区| 日韩三级免费观看| 亚洲一区免费在线观看| 成人av在线播放网站| 欧美成人video| 婷婷综合另类小说色区| 91视频国产观看| 亚洲国产精品传媒在线观看| 国精品**一区二区三区在线蜜桃| 4438成人网| 亚洲成人资源网| 欧美这里有精品| 亚洲欧美精品午睡沙发| 波多野结衣中文字幕一区 | 亚洲欧洲精品一区二区三区| 免费观看日韩电影| 欧美高清dvd| 亚洲18影院在线观看| 日本道精品一区二区三区| 综合在线观看色| 波多野结衣在线aⅴ中文字幕不卡| 国产女人aaa级久久久级| 国产成人综合网站| 久久精品亚洲乱码伦伦中文 | 亚洲午夜激情网站| 色94色欧美sute亚洲13| 亚洲精品国产成人久久av盗摄| av网站免费线看精品| 国产精品久久久爽爽爽麻豆色哟哟| 国产99一区视频免费| 国产欧美久久久精品影院| 国产成+人+日韩+欧美+亚洲| 国产午夜精品久久| 不卡视频免费播放| 伊人夜夜躁av伊人久久| 欧美日韩中文另类| 日韩中文字幕亚洲一区二区va在线| 欧美精品久久99久久在免费线| 婷婷久久综合九色国产成人| 欧美一区二区三区思思人| 蜜桃视频免费观看一区| 日韩欧美专区在线| 国产精华液一区二区三区| 国产三级一区二区| 99久久精品免费精品国产| 亚洲人123区| 在线成人av网站| 国产一区二区中文字幕| 国产精品美女一区二区| 91九色02白丝porn| 奇米色一区二区三区四区| 久久蜜桃av一区精品变态类天堂 | 成人动漫一区二区在线| 亚洲视频一区二区在线| 欧美日韩电影在线| 老司机午夜精品| 国产精品久久久久久久久久久免费看| 91网站最新地址| 日本va欧美va精品发布| 国产日韩精品一区| 在线观看一区不卡| 久久99蜜桃精品| 日韩一区中文字幕| 91麻豆精品久久久久蜜臀 | 欧美绝品在线观看成人午夜影视| 日本欧美在线观看| 国产欧美日韩另类视频免费观看| 99精品久久只有精品| 日本vs亚洲vs韩国一区三区| 国产精品色噜噜| 69堂国产成人免费视频| 成人综合激情网| 天堂蜜桃一区二区三区| 日本一区二区三区高清不卡| 欧美日韩一级大片网址| 国产精品自在在线| 亚洲成人激情社区| 日本一区二区综合亚洲| 69精品人人人人| 成人av先锋影音| 蜜臀av性久久久久蜜臀aⅴ| 国产精品久久久久久久久免费桃花| 欧美日韩国产a| 97精品电影院| 国产一区二区女| 午夜视频在线观看一区| 国产精品每日更新| 精品捆绑美女sm三区| 欧美午夜精品久久久久久超碰| 福利电影一区二区| 久久99久久久久久久久久久| 亚洲一区二区欧美日韩| 亚洲欧洲精品一区二区三区|