139 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include "inc.h"
 | 
						|
#if defined(__i386__)
 | 
						|
#include "../../kernel/arch/i386/include/archconst.h"
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef CONFIG_MAX_CPUS
 | 
						|
#define CONFIG_MAX_CPUS	1
 | 
						|
#endif
 | 
						|
 | 
						|
#if defined(__i386__)
 | 
						|
static const char * x86_flag[] = {
 | 
						|
	"fpu",
 | 
						|
	"vme",
 | 
						|
	"de",
 | 
						|
	"pse",
 | 
						|
	"tsc",
 | 
						|
	"msr",
 | 
						|
	"pae",
 | 
						|
	"mce",
 | 
						|
	"cx8",
 | 
						|
	"apic",
 | 
						|
	"",
 | 
						|
	"sep",
 | 
						|
	"mtrr",
 | 
						|
	"pge",
 | 
						|
	"mca",
 | 
						|
	"cmov",
 | 
						|
	"pat",
 | 
						|
	"pse36",
 | 
						|
	"psn",
 | 
						|
	"clfsh",
 | 
						|
	"",
 | 
						|
	"dts",
 | 
						|
	"acpi",
 | 
						|
	"mmx",
 | 
						|
	"fxsr",
 | 
						|
	"sse",
 | 
						|
	"sse2",
 | 
						|
	"ss",
 | 
						|
	"ht",
 | 
						|
	"tm",
 | 
						|
	"",
 | 
						|
	"pbe",
 | 
						|
	"pni",
 | 
						|
	"",
 | 
						|
	"",
 | 
						|
	"monitor",
 | 
						|
	"ds_cpl",
 | 
						|
	"vmx",
 | 
						|
	"smx",
 | 
						|
	"est",
 | 
						|
	"tm2",
 | 
						|
	"ssse3",
 | 
						|
	"cid",
 | 
						|
	"",
 | 
						|
	"",
 | 
						|
	"cx16",
 | 
						|
	"xtpr",
 | 
						|
	"pdcm",
 | 
						|
	"",
 | 
						|
	"",
 | 
						|
	"dca",
 | 
						|
	"sse4_1",
 | 
						|
	"sse4_2",
 | 
						|
	"x2apic",
 | 
						|
	"movbe",
 | 
						|
	"popcnt",
 | 
						|
	"",
 | 
						|
	"",
 | 
						|
	"xsave",
 | 
						|
	"osxsave",
 | 
						|
	"",
 | 
						|
	"",
 | 
						|
	"",
 | 
						|
	"",
 | 
						|
};
 | 
						|
 | 
						|
static void print_x86_cpu_flags(u32_t * flags)
 | 
						|
{
 | 
						|
	int i, j;
 | 
						|
 | 
						|
	for (i = 0; i < 2; i++) {
 | 
						|
		for (j = 0; j < 32; j++) {
 | 
						|
			if (flags[i] & (1 << j) &&
 | 
						|
					x86_flag[i * 32 + j][0])
 | 
						|
				buf_printf("%s ", x86_flag[i * 32 + j]);
 | 
						|
		}
 | 
						|
	}
 | 
						|
	buf_printf("\n");
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
static void print_cpu(struct cpu_info * cpu_info, unsigned id)
 | 
						|
{
 | 
						|
	buf_printf("%-16s: %d\n", "processor", id);
 | 
						|
 | 
						|
#if defined(__i386__)
 | 
						|
	switch (cpu_info->vendor) {
 | 
						|
		case CPU_VENDOR_INTEL:
 | 
						|
			buf_printf("%-16s: %s\n", "vendor_id", "GenuineIntel");
 | 
						|
			buf_printf("%-16s: %s\n", "model name", "Intel");
 | 
						|
			break;
 | 
						|
		case CPU_VENDOR_AMD:
 | 
						|
			buf_printf("%-16s: %s\n", "vendor_id", "AuthenticAMD");
 | 
						|
			buf_printf("%-16s: %s\n", "model name", "AMD");
 | 
						|
			break;
 | 
						|
		default:
 | 
						|
			buf_printf("%-16: %s\n", "vendor_id", "unknown");
 | 
						|
	}
 | 
						|
 | 
						|
	buf_printf("%-16s: %d\n", "cpu family", cpu_info->family);
 | 
						|
	buf_printf("%-16s: %d\n", "model", cpu_info->model);
 | 
						|
	buf_printf("%-16s: %d\n", "stepping", cpu_info->stepping);
 | 
						|
	buf_printf("%-16s: %d\n", "cpu MHz", cpu_info->freq);
 | 
						|
	buf_printf("%-16s: ", "flags");
 | 
						|
	print_x86_cpu_flags(cpu_info->flags);
 | 
						|
	buf_printf("\n");
 | 
						|
#endif
 | 
						|
}
 | 
						|
 | 
						|
void root_cpuinfo(void)
 | 
						|
{
 | 
						|
	struct cpu_info cpu_info[CONFIG_MAX_CPUS];
 | 
						|
	struct machine machine;
 | 
						|
	unsigned c;
 | 
						|
 | 
						|
	if (sys_getmachine(&machine)) {
 | 
						|
		printf("PROCFS: cannot get machine\n");
 | 
						|
		return;
 | 
						|
	}
 | 
						|
	if (sys_getcpuinfo(&cpu_info)) {
 | 
						|
		printf("PROCFS: cannot get cpu info\n");
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	for (c = 0; c < machine.processors_count; c++)
 | 
						|
		print_cpu(&cpu_info[c], c);
 | 
						|
}
 |