opendir change: refinement
[minix.git] / servers / procfs / cpuinfo.c
blobcdf28ac9d01b5cfc6aa13e9fff81d6e20f708956
1 #include "inc.h"
2 #include "../../kernel/arch/i386/include/archconst.h"
4 #ifndef CONFIG_MAX_CPUS
5 #define CONFIG_MAX_CPUS 1
6 #endif
8 static const char * x86_flag[] = {
9 "fpu",
10 "vme",
11 "de",
12 "pse",
13 "tsc",
14 "msr",
15 "pae",
16 "mce",
17 "cx8",
18 "apic",
19 "",
20 "sep",
21 "mtrr",
22 "pge",
23 "mca",
24 "cmov",
25 "pat",
26 "pse36",
27 "psn",
28 "clfsh",
29 "",
30 "dts",
31 "acpi",
32 "mmx",
33 "fxsr",
34 "sse",
35 "sse2",
36 "ss",
37 "ht",
38 "tm",
39 "",
40 "pbe",
41 "pni",
42 "",
43 "",
44 "monitor",
45 "ds_cpl",
46 "vmx",
47 "smx",
48 "est",
49 "tm2",
50 "ssse3",
51 "cid",
52 "",
53 "",
54 "cx16",
55 "xtpr",
56 "pdcm",
57 "",
58 "",
59 "dca",
60 "sse4_1",
61 "sse4_2",
62 "x2apic",
63 "movbe",
64 "popcnt",
65 "",
66 "",
67 "xsave",
68 "osxsave",
69 "",
70 "",
71 "",
72 "",
75 static void print_cpu_flags(u32_t * flags)
77 int i, j;
79 for (i = 0; i < 2; i++) {
80 for (j = 0; j < 32; j++) {
81 if (flags[i] & (1 << j) &&
82 x86_flag[i * 32 + j][0])
83 buf_printf("%s ", x86_flag[i * 32 + j]);
86 buf_printf("\n");
89 static void print_cpu(struct cpu_info * cpu_info, unsigned id)
91 buf_printf("%-16s: %d\n", "processor", id);
93 #if defined(__i386__)
94 switch (cpu_info->vendor) {
95 case CPU_VENDOR_INTEL:
96 buf_printf("%-16s: %s\n", "vendor_id", "GenuineIntel");
97 buf_printf("%-16s: %s\n", "model name", "Intel");
98 break;
99 case CPU_VENDOR_AMD:
100 buf_printf("%-16s: %s\n", "vendor_id", "AuthenticAMD");
101 buf_printf("%-16s: %s\n", "model name", "AMD");
102 break;
103 default:
104 buf_printf("%-16: %s\n", "vendor_id", "unknown");
107 buf_printf("%-16s: %d\n", "cpu family", cpu_info->family);
108 buf_printf("%-16s: %d\n", "model", cpu_info->model);
109 buf_printf("%-16s: %d\n", "stepping", cpu_info->stepping);
110 buf_printf("%-16s: %d\n", "cpu MHz", cpu_info->freq);
111 buf_printf("%-16s: ", "flags");
112 print_cpu_flags(cpu_info->flags);
113 buf_printf("\n");
114 #endif
117 void root_cpuinfo(void)
119 struct cpu_info cpu_info[CONFIG_MAX_CPUS];
120 struct machine machine;
121 unsigned c;
123 if (sys_getmachine(&machine)) {
124 printf("PROCFS: cannot get machine\n");
125 return;
127 if (sys_getcpuinfo(&cpu_info)) {
128 printf("PROCFS: cannot get cpu info\n");
129 return;
132 for (c = 0; c < machine.processors_count; c++)
133 print_cpu(&cpu_info[c], c);