summaryrefslogtreecommitdiffstats
path: root/sys/i386/i386/identcpu.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/i386/i386/identcpu.c')
-rw-r--r--sys/i386/i386/identcpu.c65
1 files changed, 41 insertions, 24 deletions
diff --git a/sys/i386/i386/identcpu.c b/sys/i386/i386/identcpu.c
index ec8ac90..ccf6824 100644
--- a/sys/i386/i386/identcpu.c
+++ b/sys/i386/i386/identcpu.c
@@ -86,6 +86,7 @@ static void print_INTEL_info(void);
static void print_INTEL_TLB(u_int data);
static void print_AMD_assoc(int i);
static void print_transmeta_info(void);
+static void print_via_padlock_info(void);
int cpu_class;
u_int cpu_exthigh; /* Highest arg to extended CPUID */
@@ -581,31 +582,10 @@ printcpuinfo(void)
break;
case 0x690:
strcpy(cpu_model, "VIA C3 Nehemiah");
- if ((cpu_id & 0xf) < 3)
- break;
- goto via_common;
+ break;
case 0x6a0:
case 0x6d0:
strcpy(cpu_model, "VIA C7 Esther");
- goto via_common;
-via_common:
- do_cpuid(0xc0000000, regs);
- i = regs[0];
- if (i >= 0xC0000001) {
- do_cpuid(0xc0000001, regs);
- i = regs[3];
- } else
- i = 0;
- if (i & VIA_CPUID_HAS_RNG)
- strcat(cpu_model, "+RNG");
- if (i & VIA_CPUID_HAS_ACE)
- strcat(cpu_model, "+AES");
- if (i & VIA_CPUID_HAS_ACE2)
- strcat(cpu_model, "+AES-CTR");
- if (i & VIA_CPUID_HAS_PHE)
- strcat(cpu_model, "+SHA1+SHA256");
- if (i & VIA_CPUID_HAS_PMM)
- strcat(cpu_model, "+RSA");
break;
default:
strcpy(cpu_model, "VIA/IDT Unknown");
@@ -892,6 +872,9 @@ via_common:
printf("\n CPU cache: write-through mode");
#endif
}
+ if (strcmp(cpu_vendor, "CentaurHauls") == 0)
+ print_via_padlock_info();
+
/* Avoid ugly blank lines: only print newline when we have to. */
if (*cpu_vendor || cpu_id)
printf("\n");
@@ -1476,7 +1459,8 @@ print_INTEL_TLB(u_int data)
static void
-setPQL2_AMD(int *const size, int *const ways) {
+setPQL2_AMD(int *const size, int *const ways)
+{
if (cpu_exthigh >= 0x80000006) {
u_int regs[4];
@@ -1768,7 +1752,7 @@ setPQL2(int *const size, int *const ways)
}
static void
-print_transmeta_info()
+print_transmeta_info(void)
{
u_int regs[4], nreg = 0;
@@ -1801,3 +1785,36 @@ print_transmeta_info()
printf(" %s\n", info);
}
}
+
+static void
+print_via_padlock_info(void)
+{
+ u_int regs[4];
+
+ /* Check for supported models. */
+ switch (cpu_id & 0xff0) {
+ case 0x690:
+ if ((cpu_id & 0xf) < 3)
+ return;
+ case 0x6a0:
+ case 0x6d0:
+ break;
+ default:
+ return;
+ }
+
+ do_cpuid(0xc0000000, regs);
+ if (regs[0] >= 0xc0000001)
+ do_cpuid(0xc0000001, regs);
+ else
+ return;
+
+ printf("\n VIA Padlock Features=0x%b", regs[3],
+ "\020"
+ "\003RNG" /* RNG */
+ "\007AES" /* ACE */
+ "\011AES-CTR" /* ACE2 */
+ "\013SHA1,SHA256" /* PHE */
+ "\015RSA" /* PMM */
+ );
+}
OpenPOWER on IntegriCloud