2 * Initial implementation:
3 * Copyright (c) 2001 Robert Drehmel
6 * As long as the above copyright statement and this notice remain
7 * unchanged, you can do what ever you want with this file.
10 #include <sys/cdefs.h>
11 __FBSDID("$FreeBSD$");
13 #include <sys/param.h>
14 #include <sys/systm.h>
15 #include <sys/kernel.h>
16 #include <sys/sysctl.h>
18 #include <machine/cpufunc.h>
19 #include <machine/md_var.h>
20 #include <machine/ver.h>
22 char machine[] = MACHINE;
23 SYSCTL_STRING(_hw, HW_MACHINE, machine, CTLFLAG_RD,
24 machine, 0, "Machine class");
26 static char cpu_model[128];
27 SYSCTL_STRING(_hw, HW_MODEL, model, CTLFLAG_RD,
28 cpu_model, 0, "Machine model");
33 cpu_identify(u_long vers, u_int freq, u_int id)
38 switch (VER_MANUF(vers)) {
46 manus = "Sun Microsystems";
52 switch (VER_IMPL(vers)) {
53 case CPU_IMPL_SPARC64:
56 case CPU_IMPL_ULTRASPARCI:
57 impls = "UltraSparc-I";
59 case CPU_IMPL_ULTRASPARCII:
60 impls = "UltraSparc-II";
62 case CPU_IMPL_ULTRASPARCIIi:
63 impls = "UltraSparc-IIi";
65 case CPU_IMPL_ULTRASPARCIIe:
66 /* V9 Manual says `UltraSparc-e'. I assume this is wrong. */
67 impls = "UltraSparc-IIe";
69 case CPU_IMPL_ULTRASPARCIII:
70 impls = "UltraSparc-III";
72 case CPU_IMPL_ULTRASPARCIIIp:
73 impls = "UltraSparc-III+";
75 case CPU_IMPL_ULTRASPARCIIIi:
76 impls = "UltraSparc-IIIi";
78 case CPU_IMPL_ULTRASPARCIV:
79 impls = "UltraSparc-IV";
81 case CPU_IMPL_ULTRASPARCIVp:
82 impls = "UltraSparc-IV+";
84 case CPU_IMPL_ULTRASPARCIIIip:
85 impls = "UltraSparc-IIIi+";
91 if (manus == NULL || impls == NULL) {
93 "CPU: unknown; please e-mail the following value together\n"
94 " with the exact name of your processor to "
95 "<freebsd-sparc64@FreeBSD.org>.\n"
96 " version register: <0x%lx>\n", vers);
100 snprintf(cpu_model, sizeof(cpu_model), "%s %s", manus, impls);
101 printf("cpu%d: %s %s Processor (%d.%02d MHz CPU)\n", id, manus, impls,
102 (freq + 4999) / 1000000, ((freq + 4999) / 10000) % 100);
104 printf(" mask=0x%lx maxtl=%ld maxwin=%ld\n", VER_MASK(vers),
105 VER_MAXTL(vers), VER_MAXWIN(vers));