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

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

?? memsize.c

?? Memtest86 is thorough, stand alone memory test for Intel/AMD x86 architecture systems. BIOS based m
?? C
字號:
/* memsize.c - MemTest-86  Version 3.2 * * Released under version 2 of the Gnu Public License. * By Chris Brady */#include "test.h"#include "defs.h"#include "config.h"short e820_nr;short memsz_mode = SZ_MODE_BIOS;short firmware = FIRMWARE_UNKNOWN;static ulong alt_mem_k;static ulong ext_mem_k;static struct e820entry e820[E820MAX];extern ulong p1, p2;extern volatile ulong *p;static void sort_pmap(void);static int check_ram(void);static void memsize_bios(int res);static void memsize_820(int res);static void memsize_801(void);static int sanitize_e820_map(struct e820entry *orig_map, struct e820entry *new_bios,	short old_nr, short res);static void memsize_linuxbios();static void memsize_probe(void);static int check_ram(void);/* * Find out how much memory there is. */void mem_size(void){	int i;	v->reserved_pages = 0;	v->test_pages = 0;	/* On the first time thru only */	/* Make a copy of the memory info table so that we can re-evaluate */	/* The memory map later */	if (e820_nr == 0 && alt_mem_k == 0 && ext_mem_k == 0) {		ext_mem_k = mem_info.e88_mem_k;		alt_mem_k = mem_info.e801_mem_k;		e820_nr   = mem_info.e820_nr;		for (i=0; i< mem_info.e820_nr; i++) {			e820[i].addr = mem_info.e820[i].addr;			e820[i].size = mem_info.e820[i].size;			e820[i].type = mem_info.e820[i].type;		}	}	switch (memsz_mode) {	case SZ_MODE_BIOS:		/* Get the memory size from the BIOS */		memsize_bios(0);		break;	case SZ_MODE_BIOS_RES:		/* Get the memory size from the BIOS, include reserved mem */		memsize_bios(1);		break;	case SZ_MODE_PROBE:		/* Probe to find memory */		memsize_probe();		cprint(LINE_INFO, COL_MMAP, " Probed ");		break;	}	/* Guarantee that pmap entries are in ascending order */	sort_pmap();	v->plim_lower = 0;	v->plim_upper = v->pmap[v->msegs-1].end;	adj_mem();	aprint(LINE_INFO, COL_RESERVED, v->reserved_pages);}static void memsize_bios(int res){	if (firmware == FIRMWARE_PCBIOS) {		memsize_820(res);	}	else if (firmware == FIRMWARE_LINUXBIOS) {		memsize_linuxbios();	}}static void sort_pmap(void){	int i, j;	/* Do an insertion sort on the pmap, on an already sorted	 * list this should be a O(1) algorithm.	 */	for(i = 0; i < v->msegs; i++) {		/* Find where to insert the current element */		for(j = i -1; j >= 0; j--) {			if (v->pmap[i].start > v->pmap[j].start) {				j++;				break;			}		}		/* Insert the current element */		if (i != j) {			struct pmap temp;			temp = v->pmap[i];			memmove(&v->pmap[j], &v->pmap[j+1], 				(i -j)* sizeof(temp));			v->pmap[j] = temp;		}	}}static void memsize_linuxbios(void){	int i, n;	/* Build the memory map for testing */	n = 0;	for (i=0; i < e820_nr; i++) {		unsigned long long end;		if (e820[i].type != E820_RAM) {			continue;		}		end = e820[i].addr;		end += e820[i].size;		v->pmap[n].start = (e820[i].addr + 4095) >> 12;		v->pmap[n].end = end >> 12;		v->test_pages += v->pmap[n].end - v->pmap[n].start;		n++;	}	v->msegs = n;	cprint(LINE_INFO, COL_MMAP, "LinuxBIOS");}static void memsize_820(int res){	int i, n, nr;	struct e820entry nm[E820MAX];	/* Clean up, adjust and copy the BIOS-supplied E820-map. */	/* If the res arg is true reclassify reserved memory as E820_RAM */	nr = sanitize_e820_map(e820, nm, e820_nr, res);	/* If there is not a good 820 map use the BIOS 801/88 info */	if (nr < 1 || nr > E820MAX) {		memsize_801();		return;	}	/* Build the memory map for testing */	n = 0;	for (i=0; i<nr; i++) {		if (nm[i].type == E820_RAM) {			unsigned long long start;			unsigned long long end;			start = nm[i].addr;			end = start + nm[i].size;			/* Don't ever use memory between 640 and 1024k */			if (start > RES_START && start < RES_END) {				if (end < RES_END) {					continue;				}				start = RES_END;			}			if (end > RES_START && end < RES_END) {				end = RES_START;			}			v->pmap[n].start = (start + 4095) >> 12;			v->pmap[n].end = end >> 12;			v->test_pages += v->pmap[n].end - v->pmap[n].start;			n++;		} else {			/* If this is reserved memory starting at the top			 * of memory then don't count it as reserved, since			 * it is very unlikely to be real memory.			 */			if (nm[i].addr < 0xff000000) {				v->reserved_pages += nm[i].size >> 12;			}		}	}	v->msegs = n;	if (res) {		cprint(LINE_INFO, COL_MMAP, "e820-All");	} else {		cprint(LINE_INFO, COL_MMAP, "e820-Std");	}}	static void memsize_801(void){	ulong mem_size;	/* compare results from 88 and 801 methods and take the greater */	/* These sizes are for extended memory in 1k units. */	if (alt_mem_k < ext_mem_k) {		mem_size = ext_mem_k;		cprint(LINE_INFO, COL_MMAP, "e88-Std ");	} else {		mem_size = alt_mem_k;		cprint(LINE_INFO, COL_MMAP, "e801-Std");	}	/* First we map in the first 640k */	v->pmap[0].start = 0;	v->pmap[0].end = RES_START >> 12;	v->test_pages = RES_START >> 12;	/* Now the extended memory */	v->pmap[1].start = (RES_END + 4095) >> 12;	v->pmap[1].end = (mem_size + 1024) >> 2;	v->test_pages += mem_size >> 2;	v->msegs = 2;}/* * Sanitize the BIOS e820 map. * * Some e820 responses include overlapping entries.  The following  * replaces the original e820 map with a new one, removing overlaps. * */static int sanitize_e820_map(struct e820entry *orig_map, struct e820entry *new_bios,	short old_nr, short res){	struct change_member {		struct e820entry *pbios; /* pointer to original bios entry */		unsigned long long addr; /* address for this change point */	};	struct change_member change_point_list[2*E820MAX];	struct change_member *change_point[2*E820MAX];	struct e820entry *overlap_list[E820MAX];	struct e820entry biosmap[E820MAX];	struct change_member *change_tmp;	ulong current_type, last_type;	unsigned long long last_addr;	int chgidx, still_changing;	int overlap_entries;	int new_bios_entry;	int i;	/*		Visually we're performing the following (1,2,3,4 = memory types)...		Sample memory map (w/overlaps):		   ____22__________________		   ______________________4_		   ____1111________________		   _44_____________________		   11111111________________		   ____________________33__		   ___________44___________		   __________33333_________		   ______________22________		   ___________________2222_		   _________111111111______		   _____________________11_		   _________________4______		Sanitized equivalent (no overlap):		   1_______________________		   _44_____________________		   ___1____________________		   ____22__________________		   ______11________________		   _________1______________		   __________3_____________		   ___________44___________		   _____________33_________		   _______________2________		   ________________1_______		   _________________4______		   ___________________2____		   ____________________33__		   ______________________4_	*/	/* First make a copy of the map */	for (i=0; i<old_nr; i++) {		biosmap[i].addr = orig_map[i].addr;		biosmap[i].size = orig_map[i].size;		biosmap[i].type = orig_map[i].type;	}	/* bail out if we find any unreasonable addresses in bios map */	for (i=0; i<old_nr; i++) {		if (biosmap[i].addr + biosmap[i].size < biosmap[i].addr)			return 0;		if (res) {			/* If we want to test the reserved memory include			 * everything except for reserved segments that start			 * at the  the top of memory			 */			if (biosmap[i].type == E820_RESERVED &&					biosmap[i].addr > 0xff000000) {				continue;			}			biosmap[i].type = E820_RAM;		} else {			/* It is always be safe to test ACPI ram */			if ( biosmap[i].type == E820_ACPI) {				biosmap[i].type = E820_RAM;			}		}	}	/* create pointers for initial change-point information (for sorting) */	for (i=0; i < 2*old_nr; i++)		change_point[i] = &change_point_list[i];	/* record all known change-points (starting and ending addresses) */	chgidx = 0;	for (i=0; i < old_nr; i++)	{		change_point[chgidx]->addr = biosmap[i].addr;		change_point[chgidx++]->pbios = &biosmap[i];		change_point[chgidx]->addr = biosmap[i].addr + biosmap[i].size;		change_point[chgidx++]->pbios = &biosmap[i];	}	/* sort change-point list by memory addresses (low -> high) */	still_changing = 1;	while (still_changing)	{		still_changing = 0;		for (i=1; i < 2*old_nr; i++)  {			/* if <current_addr> > <last_addr>, swap */			/* or, if current=<start_addr> & last=<end_addr>, swap */			if ((change_point[i]->addr < change_point[i-1]->addr) ||				((change_point[i]->addr == change_point[i-1]->addr) &&				 (change_point[i]->addr == change_point[i]->pbios->addr) &&				 (change_point[i-1]->addr != change_point[i-1]->pbios->addr))			   )			{				change_tmp = change_point[i];				change_point[i] = change_point[i-1];				change_point[i-1] = change_tmp;				still_changing=1;			}		}	}	/* create a new bios memory map, removing overlaps */	overlap_entries=0;	 /* number of entries in the overlap table */	new_bios_entry=0;	 /* index for creating new bios map entries */	last_type = 0;		 /* start with undefined memory type */	last_addr = 0;		 /* start with 0 as last starting address */	/* loop through change-points, determining affect on the new bios map */	for (chgidx=0; chgidx < 2*old_nr; chgidx++)	{		/* keep track of all overlapping bios entries */		if (change_point[chgidx]->addr == change_point[chgidx]->pbios->addr)		{			/* add map entry to overlap list (> 1 entry implies an overlap) */			overlap_list[overlap_entries++]=change_point[chgidx]->pbios;		}		else		{			/* remove entry from list (order independent, so swap with last) */			for (i=0; i<overlap_entries; i++)			{				if (overlap_list[i] == change_point[chgidx]->pbios)					overlap_list[i] = overlap_list[overlap_entries-1];			}			overlap_entries--;		}		/* if there are overlapping entries, decide which "type" to use */		/* (larger value takes precedence -- 1=usable, 2,3,4,4+=unusable) */		current_type = 0;		for (i=0; i<overlap_entries; i++)			if (overlap_list[i]->type > current_type)				current_type = overlap_list[i]->type;		/* continue building up new bios map based on this information */		if (current_type != last_type)	{			if (last_type != 0)	 {				new_bios[new_bios_entry].size =					change_point[chgidx]->addr - last_addr;				/* move forward only if the new size was non-zero */				if (new_bios[new_bios_entry].size != 0)					if (++new_bios_entry >= E820MAX)						break; 	/* no more space left for new bios entries */			}			if (current_type != 0)	{				new_bios[new_bios_entry].addr = change_point[chgidx]->addr;				new_bios[new_bios_entry].type = current_type;				last_addr=change_point[chgidx]->addr;			}			last_type = current_type;		}	}	return(new_bios_entry);}static void memsize_probe(void){	int i, n;	ulong m_lim;	static unsigned long magic = 0x1234569;	/* Since all address bits may not be decoded, the search for memory	 * must be limited.  The max address is found by checking for	 * memory wrap from 1MB to 4GB.  */	p1 = (ulong)&magic;	m_lim = 0xfffffffc; 	for (p2 = 0x100000; p2; p2 <<= 1) {  		p = (ulong *)(p1 + p2);		if (*p == 0x1234569) {			m_lim = --p2;			break;		}	}	/* Turn on cache */	set_cache(1);	/* Find all segments of RAM */	i = 0;	v->pmap[i].start = ((ulong)&_end + (1 << 12) - 1) >> 12;	p = (ulong *)(v->pmap[i].start << 12);	/* Limit search for memory to m_lim and make sure we don't 	 * overflow the 32 bit size of p.  */	while ((ulong)p < m_lim && (ulong)p >= (ulong)&_end) {		/*		 * Skip over reserved memory		 */		if ((ulong)p < RES_END && (ulong)p >= RES_START) {			v->pmap[i].end = RES_START >> 12;			v->test_pages += (v->pmap[i].end - v->pmap[i].start);			p = (ulong *)RES_END;			i++;			v->pmap[i].start = 0;			goto fstart;		}		if (check_ram() == 0) {			/* ROM or nothing at this address, record end addrs */			v->pmap[i].end = ((ulong)p) >> 12;			v->test_pages += (v->pmap[i].end - v->pmap[i].start);			i++;			v->pmap[i].start = 0;fstart:			/* We get here when there is a gap in memory.			 * Loop until we find more ram, the gap is more			 * than 32768k or we hit m_lim */			n = 32768 >> 2;			while ((ulong)p < m_lim && (ulong)p >= (ulong)&_end) {				/* Skip over video memory */				if ((ulong)p < RES_END &&					(ulong)p >= RES_START) {					p = (ulong *)RES_END;				}				if (check_ram() == 1) {					/* More RAM, record start addrs */					v->pmap[i].start = (ulong)p >> 12;					break;				}				/* If the gap is 32768k or more then there				 * is probably no more memory so bail out */				if (--n <= 0) {					p = (ulong *)m_lim;					break;				}				p += 0x1000;			}		}		p += 0x1000;	}	/* If there is ram right up to the memory limit this will record	 * the last address.  */	if (v->pmap[i].start) {		v->pmap[i].end = m_lim >> 12;		v->test_pages += (v->pmap[i].end - v->pmap[i].start);		i++;	}	v->msegs = i;}/* check_ram - Determine if this address points to memory by checking * for a wrap pattern and then reading and then writing the complement. * We then check that at least one bit changed in each byte before * believing that it really is memory.  */static int check_ram(void) {        int s;        p1 = *p;        /* write the complement */        *p = ~p1;        p2 = *p;        s = 0;        /* Now make sure a bit changed in each byte */        if ((0xff & p1) != (0xff & p2)) {                s++;        }        if ((0xff00 & p1) != (0xff00 & p2)) {                s++;        }        if ((0xff0000 & p1) != (0xff0000 & p2)) {                s++;        }        if ((0xff000000 & p1) != (0xff000000 & p2)) {                s++;        }        if (s == 4) {                /* RAM at this address */                return 1;        }        return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
aaa国产一区| 日韩av高清在线观看| 国产乱一区二区| 国产无一区二区| 国产美女娇喘av呻吟久久| 久久精品一区二区三区不卡牛牛| 国产成人亚洲综合a∨婷婷| 国产色综合久久| 99re这里只有精品首页| 亚洲永久免费视频| 欧美日本不卡视频| 韩国欧美一区二区| 国产精品高潮呻吟| 欧美色老头old∨ideo| 青青草精品视频| 欧美韩国日本一区| 一本色道a无线码一区v| 亚洲成av人片一区二区梦乃| 2024国产精品| 色婷婷精品大在线视频| 日本va欧美va瓶| 国产精品乱人伦中文| 欧美亚洲日本一区| 久久不见久久见免费视频7| 中文字幕不卡一区| 欧美猛男超大videosgay| 国产酒店精品激情| 亚洲最新视频在线观看| 久久中文字幕电影| 色噜噜久久综合| 精品综合久久久久久8888| 专区另类欧美日韩| 欧美va亚洲va在线观看蝴蝶网| 国v精品久久久网| 国产在线视频一区二区| 国产精品另类一区| 日韩视频免费观看高清在线视频| 丁香激情综合国产| 天堂久久久久va久久久久| 中文字幕精品在线不卡| 欧美伦理视频网站| 91论坛在线播放| 国产精品香蕉一区二区三区| 亚洲v中文字幕| 国产精品欧美久久久久一区二区| 欧美一区日本一区韩国一区| av动漫一区二区| 国内不卡的二区三区中文字幕| 夜夜嗨av一区二区三区网页| 国产日韩亚洲欧美综合| 欧美另类z0zxhd电影| 91一区二区三区在线播放| 极品尤物av久久免费看| 日本在线观看不卡视频| 欧美性受xxxx黑人xyx| 大陆成人av片| 免费观看一级欧美片| 亚洲综合色成人| 在线成人高清不卡| 欧美在线一二三| 91精品国产综合久久蜜臀| 欧美大片拔萝卜| 国产精品视频在线看| 亚洲色图欧美在线| 婷婷六月综合亚洲| 国产乱人伦偷精品视频免下载| 成人午夜视频网站| 91久久精品日日躁夜夜躁欧美| 欧美日韩一本到| 欧美精品一区二区三区蜜桃 | 欧美性猛交xxxx黑人交| 欧美日韩一二三区| 久久一区二区视频| 一区二区三区四区乱视频| 免费在线观看一区| 成人av在线播放网址| 欧美日韩视频专区在线播放| 久久综合久久综合久久| 亚洲视频在线一区二区| 日本大胆欧美人术艺术动态| 福利一区二区在线观看| 91福利精品第一导航| 精品国产乱码91久久久久久网站| 国产精品久久精品日日| 午夜欧美一区二区三区在线播放| 国产老妇另类xxxxx| 欧美亚洲动漫另类| 久久亚洲影视婷婷| 亚洲第一成人在线| 成人免费视频免费观看| 538prom精品视频线放| 国产精品久久毛片| 麻豆国产精品官网| 欧洲亚洲精品在线| 久久久国产精品麻豆| 同产精品九九九| 97精品久久久午夜一区二区三区 | 从欧美一区二区三区| 欧美另类z0zxhd电影| 中文字幕一区二区5566日韩| 美女一区二区三区在线观看| 一本色道久久综合狠狠躁的推荐| 精品电影一区二区| 午夜久久久久久| 91浏览器在线视频| 国产婷婷一区二区| 久草精品在线观看| 7799精品视频| 亚洲综合色噜噜狠狠| 成人黄色在线看| 久久久久久影视| 麻豆精品国产91久久久久久| 欧美在线观看视频一区二区三区 | 粉嫩蜜臀av国产精品网站| 在线成人免费视频| 亚洲一本大道在线| 99视频精品免费视频| 久久久精品中文字幕麻豆发布| 男女男精品视频网| 欧美日韩精品欧美日韩精品| 有码一区二区三区| 99视频一区二区| 日韩一区在线播放| 成人福利在线看| 国产精品日韩成人| 国产91露脸合集magnet| 久久天天做天天爱综合色| 看电视剧不卡顿的网站| 91精品国产色综合久久| 日韩精品91亚洲二区在线观看 | 91麻豆精品国产自产在线观看一区| 悠悠色在线精品| 色偷偷成人一区二区三区91| 国产精品高潮呻吟久久| 成人黄色a**站在线观看| 国产精品污www在线观看| 国产经典欧美精品| 国产日韩av一区二区| 国产成人午夜99999| 国产欧美精品区一区二区三区| 国产精品自在欧美一区| 久久日韩粉嫩一区二区三区| 国产精品一卡二卡| 欧美国产成人精品| 91麻豆国产福利精品| 亚洲一区二区三区免费视频| 欧美日韩中文国产| 日韩va亚洲va欧美va久久| 日韩女优毛片在线| 国产精品一区二区在线观看不卡| 国产亚洲1区2区3区| av在线播放不卡| 亚洲精品中文字幕在线观看| 欧美日韩在线一区二区| 美女脱光内衣内裤视频久久影院| 精品国产乱子伦一区| 成人永久aaa| 一区二区激情视频| 91麻豆精品国产自产在线| 九九精品一区二区| 中文字幕制服丝袜成人av| 91久久一区二区| 青青草97国产精品免费观看| 26uuu精品一区二区在线观看| 粉嫩高潮美女一区二区三区 | 日韩视频中午一区| 国产不卡视频在线观看| 亚洲少妇最新在线视频| 欧美日韩视频在线一区二区| 久久精品国产秦先生| 亚洲国产精品成人综合色在线婷婷 | 国产精品乱码一区二三区小蝌蚪| 91国模大尺度私拍在线视频| 日本强好片久久久久久aaa| 久久久久久久性| 在线观看视频91| 久久精品99国产精品| 中文字幕一区二区三区色视频 | 亚洲精品在线三区| 91视频在线观看免费| 日韩1区2区日韩1区2区| 国产欧美日韩亚州综合| 欧美日韩一区在线| 成人一区在线看| 日本伊人精品一区二区三区观看方式| 国产午夜亚洲精品理论片色戒| 欧美性videosxxxxx| 国产一区三区三区| 亚洲一区二区三区视频在线播放| 久久久久97国产精华液好用吗| 欧美少妇一区二区| 国产高清不卡二三区| 午夜激情一区二区三区| 国产精品久久久久四虎| 日韩亚洲欧美在线观看| 在线观看日韩国产| 成人小视频在线观看| 免费不卡在线视频| 夜夜精品浪潮av一区二区三区| 日本一区二区视频在线观看|