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

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

?? setup.c

?? linux-2.4.29操作系統的源碼
?? C
字號:
/* * Copyright (C) 2000, 2001, 2002, 2003 Broadcom Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */#include <linux/config.h>#include <linux/init.h>#include <linux/kernel.h>#include <linux/linkage.h>#include <linux/mm.h>#include <linux/blk.h>#include <linux/bootmem.h>#include <linux/smp.h>#include <asm/bootinfo.h>#include <asm/reboot.h>#include <asm/sibyte/board.h>#include "cfe_api.h"#include "cfe_error.h"/* Max ram addressable in 32-bit segments */#ifdef CONFIG_MIPS64#define MAX_RAM_SIZE (~0ULL)#else#ifdef CONFIG_HIGHMEM#ifdef CONFIG_64BIT_PHYS_ADDR#define MAX_RAM_SIZE (~0ULL)#else#define MAX_RAM_SIZE (0xffffffffULL)#endif#else#define MAX_RAM_SIZE (0x1fffffffULL)#endif#endif#define SIBYTE_MAX_MEM_REGIONS 8phys_t board_mem_region_addrs[SIBYTE_MAX_MEM_REGIONS];phys_t board_mem_region_sizes[SIBYTE_MAX_MEM_REGIONS];unsigned int board_mem_region_count;/* This is the kernel command line.  Actually, it's   copied, eventually, to command_line, and looks to be   quite redundant.  But not something to fix just now */extern char arcs_cmdline[];int cfe_cons_handle;#ifdef CONFIG_EMBEDDED_RAMDISK/* These are symbols defined by the ramdisk linker script */extern unsigned char __rd_start;extern unsigned char __rd_end;#endif#ifdef CONFIG_KGDBextern int kgdb_port;#endifstatic void ATTRIB_NORET cfe_linux_exit(void *arg){	int warm = *(int *)arg;	if (smp_processor_id()) {		static int reboot_smp;		/* Don't repeat the process from another CPU */		if (!reboot_smp) {			/* Get CPU 0 to do the cfe_exit */			reboot_smp = 1;			smp_call_function(cfe_linux_exit, arg, 1, 0);		}	} else {		printk("Passing control back to CFE...\n");		cfe_exit(warm, 0);		printk("cfe_exit returned??\n");	}	while (1);}static void ATTRIB_NORET cfe_linux_restart(char *command){	static const int zero;	cfe_linux_exit((void *)&zero);}static void ATTRIB_NORET cfe_linux_halt(void){	static const int one = 1;	cfe_linux_exit((void *)&one);}static __init void prom_meminit(void){	u64 addr, size, type; /* regardless of 64BIT_PHYS_ADDR */	int mem_flags = 0;	unsigned int idx;	int rd_flag;#ifdef CONFIG_BLK_DEV_INITRD	unsigned long initrd_pstart;	unsigned long initrd_pend;#ifdef CONFIG_EMBEDDED_RAMDISK	/* If we're using an embedded ramdisk, then __rd_start and __rd_end	   are defined by the linker to be on either side of the ramdisk	   area.  Otherwise, initrd_start should be defined by kernel command	   line arguments */	if (initrd_start == 0) {		initrd_start = (unsigned long)&__rd_start;		initrd_end = (unsigned long)&__rd_end;	}#endif	initrd_pstart = CPHYSADDR(initrd_start);	initrd_pend = CPHYSADDR(initrd_end);	if (initrd_start &&	    ((initrd_pstart > MAX_RAM_SIZE)	     || (initrd_pend > MAX_RAM_SIZE))) {		panic("initrd out of addressable memory");	}#endif /* INITRD */	for (idx = 0; cfe_enummem(idx, mem_flags, &addr, &size, &type) != CFE_ERR_NOMORE;	     idx++) {		rd_flag = 0;		if (type == CFE_MI_AVAILABLE) {			/*			 * See if this block contains (any portion of) the			 * ramdisk			 */#ifdef CONFIG_BLK_DEV_INITRD			if (initrd_start) {				if ((initrd_pstart > addr) &&				    (initrd_pstart < (addr + size))) {					add_memory_region(addr,					                  initrd_pstart - addr,					                  BOOT_MEM_RAM);					rd_flag = 1;				}				if ((initrd_pend > addr) &&				    (initrd_pend < (addr + size))) {					add_memory_region(initrd_pend,						(addr + size) - initrd_pend,						 BOOT_MEM_RAM);					rd_flag = 1;				}			}#endif			if (!rd_flag) {				if (addr > MAX_RAM_SIZE)					continue;				if (addr+size > MAX_RAM_SIZE)					size = MAX_RAM_SIZE - (addr+size) + 1;				/*				 * memcpy/__copy_user prefetch, which				 * will cause a bus error for				 * KSEG/KUSEG addrs not backed by RAM.				 * Hence, reserve some padding for the				 * prefetch distance.				 */				if (size > 512)					size -= 512;				add_memory_region(addr, size, BOOT_MEM_RAM);			}			board_mem_region_addrs[board_mem_region_count] = addr;			board_mem_region_sizes[board_mem_region_count] = size;			board_mem_region_count++;			if (board_mem_region_count ==			    SIBYTE_MAX_MEM_REGIONS) {				/*				 * Too many regions.  Need to configure more				 */				while(1);			}		}	}#ifdef CONFIG_BLK_DEV_INITRD	if (initrd_start) {		add_memory_region(initrd_pstart, initrd_pend - initrd_pstart,				  BOOT_MEM_RESERVED);	}#endif}#ifdef CONFIG_BLK_DEV_INITRDstatic int __init initrd_setup(char *str){	char rdarg[64];	int idx;	/* Make a copy of the initrd argument so we can smash it up here */	for (idx = 0; idx < sizeof(rdarg)-1; idx++) {		if (!str[idx] || (str[idx] == ' ')) break;		rdarg[idx] = str[idx];	}	rdarg[idx] = 0;	str = rdarg;	/*	 *Initrd location comes in the form "<hex size of ramdisk in bytes>@<location in memory>"	 *  e.g. initrd=3abfd@80010000.  This is set up by the loader.	 */	char *tmp, *endptr;	unsigned long initrd_size;	for (tmp = str; *tmp != '@'; tmp++) {		if (!*tmp) {			goto fail;		}	}	*tmp = 0;	tmp++;	if (!*tmp) {		goto fail;	}	initrd_size = simple_strtoul(str, &endptr, 16);	if (*endptr) {		*(tmp-1) = '@';		goto fail;	}	*(tmp-1) = '@';	initrd_start = simple_strtoul(tmp, &endptr, 16);	if (*endptr) {		goto fail;	}	initrd_end = initrd_start + initrd_size;	prom_printf("Found initrd of %lx@%lx\n", initrd_size, initrd_start);	return 1; fail:	prom_printf("Bad initrd argument.  Disabling initrd\n");	initrd_start = 0;	initrd_end = 0;	return 1;}#endif/* * prom_init is called just after the cpu type is determined, from init_arch() */__init int prom_init(int argc, char **argv, char **envp, int *prom_vec){	uint64_t cfe_ept, cfe_handle;	unsigned int cfe_eptseal;#ifdef CONFIG_KGDB	char *arg;#endif	_machine_restart   = cfe_linux_restart;	_machine_halt      = cfe_linux_halt;	_machine_power_off = cfe_linux_halt;	/*	 * Check if a loader was used; if NOT, the 4 arguments are	 * what CFE gives us (handle, 0, EPT and EPTSEAL)	 */	if (argc < 0) {		cfe_handle = (uint64_t)(long)argc;		cfe_ept = (long)envp;		cfe_eptseal = (uint32_t)(unsigned long)prom_vec;	} else {		if ((int32_t)(long)prom_vec < 0) {			/*			 * Old loader; all it gives us is the handle,			 * so use the "known" entrypoint and assume			 * the seal.			 */			cfe_handle = (uint64_t)(long)prom_vec;			cfe_ept = (uint64_t)((int32_t)0x9fc00500);			cfe_eptseal = CFE_EPTSEAL;		} else {			/*			 * Newer loaders bundle the handle/ept/eptseal			 * Note: prom_vec is in the loader's useg			 * which is still alive in the TLB.			 */			cfe_handle = (uint64_t)((int32_t *)prom_vec)[0];			cfe_ept = (uint64_t)((int32_t *)prom_vec)[2];			cfe_eptseal = (unsigned int)((uint32_t *)prom_vec)[3];		}	}	if (cfe_eptseal != CFE_EPTSEAL) {		/* too early for panic to do any good */		prom_printf("CFE's entrypoint seal doesn't match. Spinning.");		while (1) ;	}	cfe_init(cfe_handle, cfe_ept);	/* 	 * Get the handle for (at least) prom_putchar, possibly for	 * boot console	 */	cfe_cons_handle = cfe_getstdhandle(CFE_STDHANDLE_CONSOLE);	if (cfe_getenv("LINUX_CMDLINE", arcs_cmdline, CL_SIZE) < 0) {		if (argc < 0) {			/*			 * It's OK for direct boot to not provide a			 *  command line			 */			strcpy(arcs_cmdline, "root=/dev/ram0 ");		} else {			/* The loader should have set the command line */			/* too early for panic to do any good */			prom_printf("LINUX_CMDLINE not defined in cfe.");			while (1) ;		}	}#ifdef CONFIG_KGDB	if ((arg = strstr(arcs_cmdline,"kgdb=duart")) != NULL)		kgdb_port = (arg[10] == '0') ? 0 : 1;	else		kgdb_port = 1;#endif#ifdef SIBYTE_DEFAULT_CONSOLE	/* Force default console from board header (allowing override) */	if (!strstr(arcs_cmdline,"console=")) {		strcat(arcs_cmdline, "console=" SIBYTE_DEFAULT_CONSOLE);	}#endif#ifdef CONFIG_BLK_DEV_INITRD	{		char *ptr;		/* Need to find out early whether we've got an initrd.  So scan		   the list looking now */		for (ptr = arcs_cmdline; *ptr; ptr++) {			while (*ptr == ' ') {				ptr++;			}			if (!strncmp(ptr, "initrd=", 7)) {				initrd_setup(ptr+7);				break;			} else {				while (*ptr && (*ptr != ' ')) {					ptr++;				}			}		}	}#endif /* CONFIG_BLK_DEV_INITRD */	/* Not sure this is needed, but it's the safe way. */	arcs_cmdline[CL_SIZE-1] = 0;	mips_machgroup = MACH_GROUP_SIBYTE;	prom_meminit();	return 0;}void prom_free_prom_memory(void){	/* Not sure what I'm supposed to do here.  Nothing, I think */}int page_is_ram(unsigned long pagenr){	phys_t addr = pagenr << PAGE_SHIFT;	int i;	for (i = 0; i < board_mem_region_count; i++) {		if ((addr >= board_mem_region_addrs[i])		    && (addr < (board_mem_region_addrs[i] + board_mem_region_sizes[i]))) {			return 1;		}	}	return 0;}void prom_putchar(char c){	int ret;	while ((ret = cfe_write(cfe_cons_handle, &c, 1)) == 0)		;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产网站一区二区| 玖玖九九国产精品| 日韩精品一级中文字幕精品视频免费观看 | 亚洲精品国久久99热| 日本欧美一区二区在线观看| 成人免费视频一区二区| 欧美一级欧美三级| 亚洲欧美日韩系列| 国产麻豆成人传媒免费观看| 欧美日韩国产精品自在自线| 日本一区二区成人| 精品一区二区三区视频| 欧美日韩国产高清一区二区| 亚洲色图.com| 国产一区二区在线观看视频| 欧美裸体一区二区三区| 一区二区高清在线| hitomi一区二区三区精品| 91精品国产黑色紧身裤美女| 亚洲精品欧美专区| 91啦中文在线观看| 国产精品理伦片| 国产一区二区三区观看| 日韩视频免费直播| 天堂午夜影视日韩欧美一区二区| 色综合咪咪久久| 最近日韩中文字幕| 成人涩涩免费视频| 国产精品色哟哟| 成人av手机在线观看| 国产日韩欧美a| 国产精品综合网| 久久久精品天堂| 国产成人午夜片在线观看高清观看| 91精品国产免费| 人人爽香蕉精品| 日韩三级视频中文字幕| 美女爽到高潮91| 久久午夜国产精品| 粉嫩av亚洲一区二区图片| 欧美变态口味重另类| 美女视频黄a大片欧美| 欧美一区午夜精品| 久久99精品一区二区三区三区| 日韩午夜电影在线观看| 久久av资源站| 亚洲国产精品精华液ab| 成人激情动漫在线观看| 亚洲男人的天堂av| 欧美日韩久久久一区| 日韩电影在线观看一区| 日韩欧美亚洲另类制服综合在线| 久久国产精品第一页| 精品国产网站在线观看| 岛国av在线一区| 亚洲免费观看高清完整| 欧美性猛交一区二区三区精品| 视频一区二区中文字幕| 久久久久久久电影| 色先锋久久av资源部| 天堂av在线一区| 国产欧美一区二区精品性色| 色婷婷av一区二区三区软件| 日韩影院免费视频| 中文字幕成人av| 欧美日韩夫妻久久| 国产盗摄精品一区二区三区在线 | 国产传媒一区在线| 亚洲精品视频在线看| 欧美一区二区私人影院日本| 国产精品一卡二| 亚洲男女一区二区三区| 日韩精品中文字幕在线一区| 成人爱爱电影网址| 青青草精品视频| 国产精品黄色在线观看| 欧美精品欧美精品系列| 国产a精品视频| 婷婷六月综合亚洲| 国产精品福利一区| 欧美成人午夜电影| 精品视频999| 国产成人高清在线| 水野朝阳av一区二区三区| 欧美国产成人精品| 日韩美一区二区三区| 成人三级在线视频| 韩国三级中文字幕hd久久精品| 一区二区三区欧美日韩| 国产欧美一区二区精品性色超碰 | 精品成人在线观看| 69堂亚洲精品首页| 高清成人免费视频| 毛片av中文字幕一区二区| 亚洲人成网站影音先锋播放| 26uuu国产电影一区二区| 欧美视频你懂的| 97久久人人超碰| 国产精品乡下勾搭老头1| 午夜国产精品一区| 一区二区免费在线播放| 亚洲三级在线看| 国产精品麻豆久久久| 久久久国产精华| 久久综合国产精品| 精品久久人人做人人爽| 91精品国产91久久综合桃花| 色国产综合视频| 99精品热视频| 不卡欧美aaaaa| 丁香激情综合国产| 国产精品系列在线观看| 国内国产精品久久| 九九九精品视频| 久草精品在线观看| 精品一区二区综合| 韩日av一区二区| 国内久久精品视频| 国产不卡一区视频| 高清在线成人网| 国产成人亚洲综合a∨猫咪| 国产成人在线观看| 成人av电影在线观看| 99久久99久久久精品齐齐| 97久久精品人人做人人爽50路| 99在线精品视频| 在线免费亚洲电影| 69堂亚洲精品首页| 久久你懂得1024| 中文天堂在线一区| 一区二区三区中文字幕精品精品| 亚洲人成网站在线| 爽爽淫人综合网网站| 久久精品国产秦先生| 国产一区二三区| 成人国产精品免费观看动漫| 91原创在线视频| 精品视频免费看| 久久影院电视剧免费观看| 欧美激情艳妇裸体舞| 综合网在线视频| 日韩中文字幕麻豆| 国产黄色91视频| 91碰在线视频| 日韩视频123| 国产精品国产三级国产aⅴ原创| 一区二区三区欧美视频| 精品无人码麻豆乱码1区2区 | 麻豆一区二区在线| 国产成人aaa| 欧美亚洲综合网| 精品国产乱码久久久久久久| 国产精品毛片高清在线完整版 | 日韩精品久久理论片| 国产一区二区三区四区在线观看| 成人午夜视频福利| 欧美日韩中文另类| 久久午夜老司机| 亚洲线精品一区二区三区| 国产美女久久久久| 欧美色老头old∨ideo| 久久久九九九九| 日韩电影一区二区三区| 99re热视频这里只精品| 欧美大片在线观看一区二区| 亚洲免费在线观看| 国内精品国产成人| 欧美精品第1页| 综合色天天鬼久久鬼色| 美美哒免费高清在线观看视频一区二区 | 精品粉嫩aⅴ一区二区三区四区| ●精品国产综合乱码久久久久| 麻豆一区二区99久久久久| 91成人国产精品| 国产精品网友自拍| 激情久久五月天| 欧美日韩三级在线| 亚洲欧美国产三级| 国产成人在线色| 337p日本欧洲亚洲大胆精品| 亚洲福利一区二区| 日本乱人伦一区| 中文字幕一区av| 国产精品一色哟哟哟| 91精品国产色综合久久久蜜香臀| 一区二区三区**美女毛片| 成人免费毛片a| 国产亚洲精品福利| 国产伦精品一区二区三区在线观看| 欧美日韩黄视频| 午夜伊人狠狠久久| 欧美视频一二三区| 亚洲成人激情社区| 欧美午夜一区二区三区免费大片| 国产精品国产三级国产有无不卡| 国产一区中文字幕| 精品国产伦一区二区三区观看方式| 热久久久久久久| 日韩欧美国产午夜精品| 日本欧美一区二区三区乱码 |