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

📄 controller.c

📁 Memtest86 is thorough, stand alone memory test for Intel/AMD x86 architecture systems. BIOS based m
💻 C
📖 第 1 页 / 共 4 页
字号:
	col2 += 9;		// CAS Latency (tCAS)	temp = ((drt >> 5)&0x1);	if (temp == 0x0) { cprint(LINE_CPU+5, col2, "2.5-"); col2 += 4;  }	else { cprint(LINE_CPU+5, col2, "2-"); col2 +=2; }	// RAS-To-CAS (tRCD)	temp = ((drt >> 2)& 0x3);	if (temp == 0x0) { cprint(LINE_CPU+5, col2, "4-"); }	if (temp == 0x1) { cprint(LINE_CPU+5, col2, "3-"); }	else { cprint(LINE_CPU+5, col2, "2-"); }	col2 +=2;	// RAS Precharge (tRP)	temp = (drt&0x3);	if (temp == 0x0) { cprint(LINE_CPU+5, col2, "4-"); }	if (temp == 0x1) { cprint(LINE_CPU+5, col2, "3-"); }	else { cprint(LINE_CPU+5, col2, "2-"); }	col2 +=2;		// RAS Active to precharge (tRAS)	temp = ((drt >> 9)& 0x3);	if (temp == 0x0) { cprint(LINE_CPU+5, col2, "8"); col2 +=7; }	if (temp == 0x1) { cprint(LINE_CPU+5, col2, "7"); col2 +=6; }	if (temp == 0x2) { cprint(LINE_CPU+5, col2, "6"); col2 +=5; }	if (temp == 0x3) { cprint(LINE_CPU+5, col2, "5"); col2 +=5; }	col2 +=1;}static void poll_timings_amd64(void) {	ulong dramtlr, dramclr;	int temp;	int trcd, trp, tras ;		cprint(LINE_CPU+5, col2 +1, "/ CAS : ");	col2 += 9;		pci_conf_read(0, 24, 2, 0x88, 4, &dramtlr);	pci_conf_read(0, 24, 2, 0x90, 4, &dramclr);		// CAS Latency (tCAS)	temp = (dramtlr & 0x7);	if (temp == 0x1) { cprint(LINE_CPU+5, col2, "2-"); col2 +=2; }	if (temp == 0x2) { cprint(LINE_CPU+5, col2, "3-"); col2 +=2; }	if (temp == 0x5) { cprint(LINE_CPU+5, col2, "2.5-"); col2 +=4; }			// RAS-To-CAS (tRCD)	trcd = ((dramtlr >> 12) & 0x7);	dprint(LINE_CPU+5, col2, trcd , 1 ,0);	cprint(LINE_CPU+5, col2 +1, "-"); col2 +=2;	// RAS Precharge (tRP)	trp = ((dramtlr >> 24) & 0x7);	dprint(LINE_CPU+5, col2, trp , 1 ,0);	cprint(LINE_CPU+5, col2 +1, "-"); col2 +=2;		// RAS Active to precharge (tRAS)	tras = ((dramtlr >> 20) & 0xF);	if (tras < 10){	dprint(LINE_CPU+5, col2, tras , 1 ,0); col2 += 1;	} else {	dprint(LINE_CPU+5, col2, tras , 2 ,0); col2 += 2;		}	cprint(LINE_CPU+5, col2+1, "/"); col2 +=2;		// Print 64 or 128 bits mode		if (((dramclr >> 16)&1) == 1) {		cprint(LINE_CPU+5, col2, " Dual Channel (128 bits)"); 		col2 +=24;	} else {		cprint(LINE_CPU+5, col2, " Single Channel (64 bits)"); 		col2 +=15;	}}static void poll_timings_nf2(void) {	ulong dramtlr, dramtlr2, dramtlr3, temp;	ulong dimm1p, dimm2p, dimm3p;		pci_conf_read(0, 0, 1, 0x90, 4, &dramtlr);	pci_conf_read(0, 0, 1, 0xA0, 4, &dramtlr2);	pci_conf_read(0, 0, 1, 0x84, 4, &dramtlr3);	pci_conf_read(0, 0, 2, 0x40, 4, &dimm1p);	pci_conf_read(0, 0, 2, 0x44, 4, &dimm2p);	pci_conf_read(0, 0, 2, 0x48, 4, &dimm3p);	cprint(LINE_CPU+5, col2 +1, "/ CAS : ");	col2 += 9;		// CAS Latency (tCAS)	temp = ((dramtlr2 >> 4) & 0x7);	if (temp == 0x2) { cprint(LINE_CPU+5, col2, "2-"); col2 +=2; }	if (temp == 0x3) { cprint(LINE_CPU+5, col2, "3-"); col2 +=2; }	if (temp == 0x6) { cprint(LINE_CPU+5, col2, "2.5-"); col2 +=4; }		// RAS-To-CAS (tRCD)	temp = ((dramtlr >> 20) & 0xF);	dprint(LINE_CPU+5, col2, temp , 1 ,0);	cprint(LINE_CPU+5, col2 +1, "-"); col2 +=2;		// RAS Precharge (tRP)	temp = ((dramtlr >> 28) & 0xF);	dprint(LINE_CPU+5, col2, temp , 1 ,0);	cprint(LINE_CPU+5, col2 +1, "-"); col2 +=2;		// RAS Active to precharge (tRAS)	temp = ((dramtlr >> 15) & 0xF);	if (temp < 10){	dprint(LINE_CPU+5, col2, temp , 1 ,0); col2 += 1;	} else {	dprint(LINE_CPU+5, col2, temp , 2 ,0); col2 += 2;		}	cprint(LINE_CPU+5, col2+1, "/"); col2 +=2;		// Print 64 or 128 bits mode	// If DIMM1 & DIMM3 or DIMM1 & DIMM2 populated, than Dual Channel.		if ((dimm3p&1) + (dimm2p&1) == 2 || (dimm3p&1) + (dimm1p&1) == 2 ) {		cprint(LINE_CPU+5, col2, " Dual Channel (128 bits)"); 		col2 +=24;	} else {		cprint(LINE_CPU+5, col2, " Single Channel (64 bits)"); 		col2 +=15;	}}/*static void poll_timings_kt266(void) { 	ulong dramtlr, dramtlr2, temp;	pci_conf_read(0, 0, 0, 0x64, 1, &dramtlr);	pci_conf_read(0, 0, 0, 0x02, 2, &dramtlr2); 	cprint(LINE_CPU+5, col2 +1, "/ CAS : "); 	col2 += 9; 	// CAS Latency (tCAS) 	temp = ((dramtlr >> 4)&3); 	if (temp == 0x0) { cprint(LINE_CPU+5, col2, "1-"); col2 +=2; } 	if (temp == 0x1) { cprint(LINE_CPU+5, col2, "2-"); col2 +=2; } 	if (temp == 0x3) { cprint(LINE_CPU+5, col2, "3-"); col2 +=2; } 	if (temp == 0x2) { cprint(LINE_CPU+5, col2, "2.5-"); col2 +=4; } 	// RAS-To-CAS (tRCD) 	if (((dramtlr >> 2)&1) == 0) { cprint(LINE_CPU+5, col2, "2-"); } 	else { cprint(LINE_CPU+5, col2, "3-"); } 	col2 +=2; 	// RAS Precharge (tRP) 	if (((dramtlr >> 7)&1) == 0) { cprint(LINE_CPU+5, col2, "2-"); } 	else { cprint(LINE_CPU+5, col2, "3-"); } 	col2 +=2; 	// RAS Active to precharge (tRAS) 	if (dramtlr2 == 0x3099) { 	 			if (((dramtlr >> 6)&1) == 0) {  			cprint(LINE_CPU+5, col2, "5"); } 			else { cprint(LINE_CPU+5, col2, "6"); } 	 	} else { 			if (((dramtlr >> 6)&1) == 0) {  			cprint(LINE_CPU+5, col2, "6"); } 			else { cprint(LINE_CPU+5, col2, "7"); } 	} 	col2 +=1; 	 	 	cprint(LINE_CPU+5, col2+1, "/ Interleave : "); col2 +=16; 	temp = dramtlr&3; 	if (temp == 0) { cprint(LINE_CPU+5, col2, "Disabled"); } 	if (temp == 1) { cprint(LINE_CPU+5, col2, "2-Way"); } 	if (temp == 2) { cprint(LINE_CPU+5, col2, "4-Way"); }}*//* ------------------ Let's continue ------------------ *//* ---------------------------------------------------- */struct pci_memory_controller {	unsigned vendor;	unsigned device;	char *name;	int tested;	void (*poll_fsb)(void);	void (*poll_timings)(void);	void (*setup_ecc)(void);	void (*poll_errors)(void);};static struct pci_memory_controller controllers[] = {	/* Default unknown chipset */	{ 0, 0, "",                    0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },		/* AMD */	{ 0x1022, 0x7006, "AMD 751",   0, poll_fsb_nothing, poll_timings_nothing, setup_amd751, poll_amd751 },	{ 0x1022, 0x700c, "AMD 762",   0, poll_fsb_nothing, poll_timings_nothing, setup_amd76x, poll_amd76x },	{ 0x1022, 0x700e, "AMD 761",   0, poll_fsb_nothing, poll_timings_nothing, setup_amd76x, poll_amd76x },	{ 0x1022, 0x1100, "AMD 8000",  0, poll_fsb_amd64, poll_timings_amd64, setup_amd64, poll_amd64 },	{ 0x1022, 0x7454, "AMD 8000",  0, poll_fsb_amd64, poll_timings_amd64, setup_amd64, poll_amd64 },		/* Motorola */	{ 0x1057, 0x4802, "Falcon",    0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },		/* Apple */	{ 0x106b, 0x0001, "Bandit",    0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },		/* SiS */	{ 0x1039, 0x0600, "SiS 600",   0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1039, 0x0620, "SiS 620",   0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1039, 0x5600, "SiS 5600",  0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },        { 0x1039, 0x0645, "SiS 645",   0, poll_fsb_p4, poll_timings_nothing, setup_nothing, poll_nothing },        { 0x1039, 0x0646, "SiS 645DX", 0, poll_fsb_p4, poll_timings_nothing, setup_nothing, poll_nothing },        { 0x1039, 0x0630, "SiS 630",   0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },        { 0x1039, 0x0650, "SiS 650",   0, poll_fsb_p4, poll_timings_nothing, setup_nothing, poll_nothing },        { 0x1039, 0x0651, "SiS 651",   0, poll_fsb_p4, poll_timings_nothing, setup_nothing, poll_nothing },        { 0x1039, 0x0730, "SiS 730",   0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },        { 0x1039, 0x0735, "SiS 735",   0, poll_fsb_amd32, poll_timings_nothing, setup_nothing, poll_nothing },        { 0x1039, 0x0740, "SiS 740",   0, poll_fsb_amd32, poll_timings_nothing, setup_nothing, poll_nothing },        { 0x1039, 0x0745, "SiS 745",   0, poll_fsb_amd32, poll_timings_nothing, setup_nothing, poll_nothing },        { 0x1039, 0x0755, "SiS 755",   0, poll_fsb_amd64, poll_timings_amd64, setup_amd64, poll_amd64 },        { 0x1039, 0x0748, "SiS 748",   0, poll_fsb_amd32, poll_timings_nothing, setup_nothing, poll_nothing },        { 0x1039, 0x0655, "SiS 655",   0, poll_fsb_p4, poll_timings_nothing, setup_nothing, poll_nothing },        { 0x1039, 0x0648, "SiS 648",   0, poll_fsb_p4, poll_timings_nothing, setup_nothing, poll_nothing },        { 0x1039, 0x0661, "SiS 661",   0, poll_fsb_p4, poll_timings_nothing, setup_nothing, poll_nothing },	/* ALi */	{ 0x10b9, 0x1531, "Aladdin 4", 0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x10b9, 0x1541, "Aladdin 5", 0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x10b9, 0x1687, "ALi M1687", 0, poll_fsb_amd64, poll_timings_amd64, setup_amd64, poll_amd64 },	/* ATi */	{ 0x1002, 0x5830, "ATi Radeon 9100 IGP", 0, poll_fsb_p4, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1002, 0x5831, "ATi Radeon 9100 IGP", 0, poll_fsb_p4, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1002, 0x5832, "ATi Radeon 9100 IGP", 0, poll_fsb_p4, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1002, 0x5833, "ATi Radeon 9100 IGP", 0, poll_fsb_p4, poll_timings_nothing, setup_nothing, poll_nothing },		/* nVidia */	{ 0x10de, 0x01A4, "nVidia nForce", 0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x10de, 0x01E0, "nVidia nForce2 SPP", 0, poll_fsb_nf2, poll_timings_nf2, setup_nothing, poll_nothing },	{ 0x10de, 0x00D1, "nVidia nForce3", 0, poll_fsb_amd64, poll_timings_amd64, setup_amd64, poll_amd64 },	{ 0x10de, 0x00E1, "nForce3 250", 0, poll_fsb_amd64, poll_timings_amd64, setup_amd64, poll_amd64 },	{ 0x10de, 0x005E, "nVidia nForce4", 0, poll_fsb_amd64, poll_timings_amd64, setup_amd64, poll_amd64 },		/* VIA */	{ 0x1106, 0x0305, "VIA KT133/KT133A",    0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1106, 0x0391, "vt8371",    0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1106, 0x0501, "vt8501",    0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1106, 0x0585, "vt82c585",  0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1106, 0x0595, "vt82c595",  0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1106, 0x0597, "vt82c597",  0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1106, 0x0598, "VT82C598",  0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1106, 0x0691, "VT82C691/693A/694X",  0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1106, 0x0693, "VT82C693",  0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1106, 0x0601, "VIA PLE133",  0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1106, 0x3099, "VIA KT266(A)/KT333", 0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1106, 0x3189, "VIA KT400(A)/600", 0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1106, 0x3205, "VIA KM400", 0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1106, 0x3116, "VIA KM266", 0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1106, 0x3156, "VIA KN266", 0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1106, 0x3123, "VIA CLE266", 0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1106, 0x0198, "VIA PT800", 0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1106, 0x3258, "VIA PT880", 0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x1106, 0x3188, "VIA K8T800", 0, poll_fsb_amd64, poll_timings_amd64, setup_amd64, poll_amd64 },	{ 0x1106, 0x0282, "VIA K8T800Pro", 0, poll_fsb_amd64, poll_timings_amd64, setup_amd64, poll_amd64 },	{ 0x1106, 0x3238, "VIA K8T890", 0, poll_fsb_amd64, poll_timings_amd64, setup_amd64, poll_amd64 },	/* Serverworks */	{ 0x1166, 0x0008, "CNB20HE",   0, poll_fsb_nothing, poll_timings_nothing, setup_cnb20, poll_nothing },	{ 0x1166, 0x0009, "CNB20LE",   0, poll_fsb_nothing, poll_timings_nothing, setup_cnb20, poll_nothing },	/* Intel */	{ 0x8086, 0x1130, "Intel i815",      0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x8086, 0x122d, "Intel i430fx",    0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x8086, 0x1237, "Intel i440fx",    0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x8086, 0x1250, "Intel i430hx",    0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x8086, 0x1A21, "Intel i840",      0, poll_fsb_nothing, poll_timings_nothing, setup_i840, poll_i840 },	{ 0x8086, 0x1A30, "Intel i845",      0, poll_fsb_p4, poll_timings_nothing, setup_i845, poll_i845 },        { 0x8086, 0x2560, "Intel i845E/G/PE/GE", 0, poll_fsb_p4, poll_timings_nothing, setup_i845, poll_i845 },	{ 0x8086, 0x2500, "Intel i820",      0, poll_fsb_nothing, poll_timings_nothing, setup_i820, poll_i820 },	{ 0x8086, 0x2530, "Intel i850",      0, poll_fsb_p4, poll_timings_nothing, setup_i850, poll_i850 },	{ 0x8086, 0x2531, "Intel i860",      1, poll_fsb_nothing, poll_timings_nothing, setup_i860, poll_i860 },	{ 0x8086, 0x7030, "Intel i430vx",    0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x8086, 0x7120, "Intel i810",      0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x8086, 0x7122, "Intel i810",      0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x8086, 0x7124, "Intel i810e",     0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x8086, 0x7180, "Intel i440[le]x", 0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x8086, 0x7190, "Intel i440BX",    0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x8086, 0x7192, "Intel i440BX",    0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x8086, 0x71A0, "Intel i440gx",    0, poll_fsb_nothing, poll_timings_nothing, setup_i440gx, poll_i440gx },	{ 0x8086, 0x71A2, "Intel i440gx",    0, poll_fsb_nothing, poll_timings_nothing, setup_i440gx, poll_i440gx },	{ 0x8086, 0x84C5, "Intel i450gx",    0, poll_fsb_nothing, poll_timings_nothing, setup_nothing, poll_nothing },	{ 0x8086, 0x2540, "Intel E7500",     1, poll_fsb_p4, poll_timings_E750x, setup_iE7xxx, poll_iE7xxx },	{ 0x8086, 0x254C, "Intel E7501",     1, poll_fsb_p4, poll_timings_E750x, setup_iE7xxx, poll_iE7xxx },	{ 0x8086, 0x255d, "Intel E7205",     0, poll_fsb_p4, poll_timings_nothing, setup_iE7xxx, poll_iE7xxx },	{ 0x8086, 0x2570, "Intel i848/i865", 0, poll_fsb_i875, poll_timings_i875, setup_i875, poll_nothing },        { 0x8086, 0x2578, "Intel i875P",     0, poll_fsb_i875, poll_timings_i875, setup_i875, poll_i875 },	{ 0x8086, 0x2550, "Intel E7505",     0, poll_fsb_p4, poll_timings_nothing, setup_iE7xxx, poll_iE7xxx },	{ 0x8086, 0x3580, "Intel ",          0, poll_fsb_i855, poll_timings_i852, setup_nothing, poll_nothing },	{ 0x8086, 0x3340, "Intel i855PM",    0, poll_fsb_i855, poll_timings_i855, setup_nothing, poll_nothing },	{ 0x8086, 0x2580, "Intel i915P/G",   0, poll_fsb_i925, poll_timings_i925, setup_i925, poll_nothing },	{ 0x8086, 0x2584, "Intel i925X/XE",  0, poll_fsb_i925, poll_timings_i925, setup_i925, poll_nothing },};static void print_memory_controller(void){	/* Print memory controller info */		int d;	char *name;	if (ctrl.index == 0) {		return;	}		/* Print the controller name */	name = controllers[ctrl.index].name;	col = 10;	cprint(LINE_CPU+4, col, name);	/* Now figure out how much I just printed */	while(name[col - 10] != '\0') {		col++;	} 	/* Now print the memory controller capabilities */	cprint(LINE_CPU+4, col, " "); col++;	if (ctrl.cap == ECC_UNKNOWN) {		return;	}	if (ctrl.cap & __ECC_DETECT) {		int on;		on = ctrl.mode & __ECC_DETECT;		cprint(LINE_CPU+4, col, "(ECC : ");		cprint(LINE_CPU+4, col +7, on?"Detect":"Disabled)");		on?(col += 13):(col += 16);	}	if (ctrl.mode & __ECC_CORRECT) {		int on;		on = ctrl.mode & __ECC_CORRECT;		cprint(LINE_CPU+4, col, " / ");		if (ctrl.cap & __ECC_CHIPKILL) {		cprint(LINE_CPU+4, col +3, on?"Correct -":"");		on?(col += 12):(col +=3);		} else {			cprint(LINE_CPU+4, col +3, on?"Correct)":"");			on?(col += 11):(col +=3);		}	}	if (ctrl.mode & __ECC_DETECT) {	if (ctrl.cap & __ECC_CHIPKILL) {		int on;		on = ctrl.mode & __ECC_CHIPKILL;		cprint(LINE_CPU+4, col, " Chipkill : ");		cprint(LINE_CPU+4, col +12, on?"On)":"Off)");		on?(col += 15):(col +=16);	}}	if (ctrl.mode & __ECC_SCRUB) {		int on;		on = ctrl.mode & __ECC_SCRUB;		cprint(LINE_CPU+4, col, " Scrub");		cprint(LINE_CPU+4, col +6, on?"+ ":"- ");		col += 7;	}	if (ctrl.cap & __ECC_UNEXPECTED) {		int on;		on = ctrl.mode & __ECC_UNEXPECTED;		cprint(LINE_CPU+4, col, "Unknown");		cprint(LINE_CPU+4, col +7, on?"+ ":"- ");		col += 9;	}				/* Print advanced caracteristics  */	col2 = 0;	d = get_key();	/* if F1 is pressed, disable advanced detection */	if (d != 0x3B) {	controllers[ctrl.index].poll_fsb();	controllers[ctrl.index].poll_timings();	}}void find_controller(void){	unsigned long vendor;	unsigned long device;	int i;	int result;	result = pci_conf_read(ctrl.bus, ctrl.dev, ctrl.fn, PCI_VENDOR_ID, 2, &vendor);	result = pci_conf_read(ctrl.bus, ctrl.dev, ctrl.fn, PCI_DEVICE_ID, 2, &device);	ctrl.index = 0;	if (result == 0) {		for(i = 1; i < sizeof(controllers)/sizeof(controllers[0]); i++) {			if ((controllers[i].vendor == vendor) &&				(controllers[i].device == device)) {				ctrl.index = i;				break;			}		}	}	controllers[ctrl.index].setup_ecc();	/* Don't enable ECC polling by default unless it has	 * been well tested.	 */	set_ecc_polling(-1);	print_memory_controller();}void poll_errors(void){	if (ctrl.poll) {		controllers[ctrl.index].poll_errors();	}}void set_ecc_polling(int val){	int tested = controllers[ctrl.index].tested;	if (val == -1) {		val = tested;	}	if (val && (ctrl.mode & __ECC_DETECT)) {		ctrl.poll = 1;		cprint(LINE_INFO, COL_ECC, tested? " on": " ON");	} else {		ctrl.poll = 0;		cprint(LINE_INFO, COL_ECC, "off");	}}

⌨️ 快捷键说明

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