⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.h

📁 系统启动时检测内存状况的软件C代码
💻 H
字号:
/* test.h - MemTest-86  Version 3.2 * * Released under version 2 of the Gnu Public License. * By Chris Brady * ---------------------------------------------------- * MemTest86+ V2.00 Specific code (GPL V2.0) * By Samuel DEMEULEMEESTER, sdemeule@memtest.org * http://www.x86-secret.com - http://www.memtest.org */#define E88     0x00#define E801    0x04#define E820NR  0x08           /* # entries in E820MAP */#define E820MAP 0x0c           /* our map */#define E820MAX 32             /* number of entries in E820MAP */#define E820ENTRY_SIZE 20#define MEMINFO_SIZE 0x28c#ifndef __ASSEMBLY__#define E820_RAM        1#define E820_RESERVED   2#define E820_ACPI       3 /* usable as RAM once ACPI tables have been read */#define E820_NVS        4struct e820entry {        unsigned long long addr;        /* start of memory segment */        unsigned long long size;        /* size of memory segment */        unsigned long type;             /* type of memory segment */};struct mem_info_t {	unsigned long e88_mem_k;	/* 0x00 */	unsigned long e801_mem_k;	/* 0x04 */	unsigned long e820_nr;		/* 0x08 */	struct e820entry e820[E820MAX];	/* 0x0c */					/* 0x28c */};typedef unsigned long ulong;#define SPINSZ		0x800000#define MOD_SZ		20#define BAILOUT		if (bail) goto skip_test;#define BAILR		if (bail) return;#define RES_START	0xa0000#define RES_END		0x100000#define SCREEN_ADR	0xb8000#define SCREEN_END_ADR  (SCREEN_ADR + 80*25*2)#define TITLE_WIDTH	28#define LINE_TIME	10#define COL_TIME	0#define LINE_TST	2#define LINE_RANGE	3#define LINE_CPU	1#define COL_MID		30#define LINE_PAT        4#define COL_PAT		41#define LINE_INFO	10#define COL_CACHE_TOP   13#define COL_RESERVED    22#define COL_MMAP	29#define COL_CACHE	40#define COL_ECC		46#define COL_TST		51#define COL_PASS	56#define COL_ERR		63#define COL_ECC_ERR	72#define LINE_HEADER	12#define LINE_SCROLL	14#define BAR_SIZE	(78-COL_MID-9)#define POP_W	30#define POP_H	15#define POP_X	16#define POP_Y	8#define POP2_W	74#define POP2_H	21#define POP2_X	3#define POP2_Y	2#define NULL	0/* memspeed operations */#define MS_BCOPY	1#define MS_COPY		2#define MS_WRITE	3#define MS_READ		4#define SZ_MODE_BIOS		1#define SZ_MODE_BIOS_RES	2#define SZ_MODE_PROBE		3#define getCx86(reg) ({ outb((reg), 0x22); inb(0x23); })int memcmp(const void *s1, const void *s2, ulong count);void *memmove(void *dest, const void *src, ulong n);int query_linuxbios(void);int query_pcbios(void);int insertaddress(ulong);void printpatn(void);void printpatn(void);void itoa(char s[], int n);void reverse(char *p);void serial_echo_init(void);void serial_echo_print(const char *s);void ttyprint(int y, int x, const char *s);void ttyprintc(int y, int x, char c);void cprint(int y,int x, const char *s);void hprint(int y,int x,ulong val);void hprint2(int y,int x, ulong val, int len);void hprint3(int y,int x, ulong val, int len);void xprint(int y,int x,ulong val);void aprint(int y,int x,ulong page);void dprint(int y,int x,ulong val,int len, int right);void movinv1(int iter, ulong p1, ulong p2);void movinvr();void movinv32(int iter, ulong p1, ulong lb, ulong mb, int sval, int off);void modtst(int off, int iter, ulong p1, ulong p2);void error(ulong* adr, ulong good, ulong bad);void ad_err1(ulong *adr1, ulong *adr2, ulong good, ulong bad);void ad_err2(ulong *adr, ulong bad);void do_tick(void);void rand_seed(int seed1, int seed2);ulong rand();void init(void);struct eregs;void inter(struct eregs *trap_regs);void set_cache(int val);void check_input(void);void footer(void);void scroll(void);void popup(void);void popdown(void);void popclear(void);void pop2up(void);void pop2down(void);void pop2clear(void);void get_config(void);void get_menu(void);void get_printmode(void);void addr_tst1(void);void addr_tst2(void);void bit_fade(void);void sleep(int sec, int sms);void beep(unsigned int frequency);void block_move(int iter);void find_ticks(void);void print_err(ulong *adr, ulong good, ulong bad, ulong xor);void print_ecc_err(ulong page, ulong offset, int corrected,	unsigned short syndrome, int channel);void mem_size(void);void adj_mem(void);ulong getval(int x, int y, int result_shift);int get_key(void);int ascii_to_keycode(int in);void wait_keyup(void);void print_hdr(void);void restart(void);void parity_err(ulong edi, ulong esi);void start_config(void);void clear_screen(void);void paging_off(void);int map_page(unsigned long page);void *mapping(unsigned long page_address);void *emapping(unsigned long page_address);unsigned long page_of(void *ptr);#define PRINTMODE_ADDRESSES 0#define PRINTMODE_PATTERNS  1#define PRINTMODE_DMI	    2	#define PRINTMODE_NONE      3#define BADRAM_MAXPATNS 10struct pair {       ulong adr;       ulong mask;};static inline void cache_off(void){        asm(		"push %eax\n\t"		"movl %cr0,%eax\n\t"                "orl $0x40000000,%eax\n\t"  /* Set CD */                "movl %eax,%cr0\n\t"		"wbinvd\n\t"		"pop  %eax\n\t");}static inline void cache_on(void){        asm(		"push %eax\n\t"		"movl %cr0,%eax\n\t"		"andl $0x9fffffff,%eax\n\t" /* Clear CD and NW */		"movl %eax,%cr0\n\t"		"pop  %eax\n\t");}static inline void reboot(void){        asm(		"movl %cr0,%eax\n\t"		"andl  $0x00000011,%eax\n\t"		"orl   $0x60000000,%eax\n\t"		"movl  %eax,%cr0\n\t"		"movl  %eax,%cr3\n\t"		"movl  %cr0,%ebx\n\t"		"andl  $0x60000000,%ebx\n\t"		"jz    f\n\t"		".byte 0x0f,0x09\n\t"	/* Invalidate and flush cache */		"f: andb  $0x10,%al\n\t"		"movl  %eax,%cr0\n\t"		"movw $0x0010,%ax\n\t"		"movw %ax,%ds\n\t"		"movw %ax,%es\n\t"		"movw %ax,%fs\n\t"		"movw %ax,%gs\n\t"		"movw %ax,%ss\n\t"		"ljmp  $0xffff,$0x0000\n\t");}struct mmap {	ulong pbase_addr;	ulong *start;	ulong *end;};struct pmap {	ulong start;	ulong end;};struct tseq {	short cache;	short pat;	short iter;	short ticks;	short errors;	char *msg;};struct cpu_ident {	char type;	char model;	char step;	char fill;	long cpuid;	long capability;	char vend_id[12];	unsigned char cache_info[16];	long pwrcap;	long ext;};#define X86_FEATURE_PAE		(0*32+ 6) /* Physical Address Extensions */#define MAX_MEM_SEGMENTS E820MAX/* Define common variables accross relocations of memtest86 */struct vars {	int test;	int pass;	unsigned long *eadr;	unsigned long exor;	int msg_line;	int ecount;	int ecc_ecount;	int msegs;	int testsel;	int scroll_start;	int rdtsc;	int pae;	int pass_ticks;	int total_ticks;	int pptr;	int tptr;	int beepmode;	struct pmap pmap[MAX_MEM_SEGMENTS];	struct mmap map[MAX_MEM_SEGMENTS];	ulong plim_lower;	ulong plim_upper;	ulong clks_msec;	ulong starth;	ulong startl;	ulong snaph;	ulong snapl;	ulong extclock;	int printmode;	int numpatn;	struct pair patn [BADRAM_MAXPATNS];	ulong test_pages;	ulong selected_pages;	ulong reserved_pages;};#define FIRMWARE_UNKNOWN   0#define FIRMWARE_PCBIOS    1#define FIRMWARE_LINUXBIOS 2extern struct vars * const v;extern unsigned char _start[], _end[], startup_32[];extern unsigned char _size, _pages;extern struct mem_info_t mem_info;#endif /* __ASSEMBLY__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -