1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
/*
* $Id: features.c,v 1.14 2001/12/10 23:56:15 davej Exp $
* This file is part of x86info
* (C) 2001 Dave Jones.
*
* Licensed under the terms of the GNU GPL License version 2.
*
* Feature flag decoding.
*/
#include <stdio.h>
#include "x86info.h"
void decode_feature_flags (struct cpudata *cpu, int flags, int eflags)
{
const char *generic_cap_flags[] = {
"fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce",
"cx8", "apic", NULL, "sep", "mtrr", "pge", "mca", "cmov",
"pat", "pse36", "psn", "clflsh", NULL, "dtes", "acpi", "mmx",
"fxsr", "xmm", "xmm2", "selfsnoop", "ht", "acc", "ia64", NULL
};
const char *amd_cap_flags[] = {
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, "syscall", NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, "mmxext", NULL,
NULL, NULL, NULL, NULL, NULL, "lm", "3dnowext", "3dnow"
};
const char *centaur_cap_flags[] = {
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, "mmxext", NULL,
NULL, NULL, NULL, NULL, NULL, NULL, "3dnowext", "3dnow"
};
const char *transmeta_cap_flags[] = {
"recovery", "longrun", NULL, "lrti", NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};
int i;
if (show_flags == 0)
return;
printf ("Feature flags:\n");
for (i = 0; i < 32; i++)
if (flags & (1 << i))
printf (" %s", generic_cap_flags[i]);
printf ("\n");
if (eflags == 0) {
printf ("\n");
return;
}
/* Vendor specific extensions. */
switch (cpu->vendor) {
case VENDOR_AMD:
printf ("Extended feature flags:\n");
for (i = 0; i < 32; i++) {
if (eflags & (1 << i) && amd_cap_flags[i])
printf (" %s", amd_cap_flags[i]);
}
break;
case VENDOR_CENTAUR:
printf ("Extended feature flags:\n");
for (i = 0; i < 32; i++) {
if (eflags & (1 << i) && centaur_cap_flags[i])
printf (" %s", centaur_cap_flags[i]);
}
break;
case VENDOR_TRANSMETA:
printf ("Extended feature flags:\n");
for (i = 0; i < 32; i++) {
if (eflags & (1 << i) && transmeta_cap_flags[i])
printf (" %s", transmeta_cap_flags[i]);
}
break;
case VENDOR_CYRIX:
case VENDOR_INTEL:
default:
/* Unknown CPU manufacturer or no special handling needed */
break;
}
printf ("\n\n");
}
|