lsflib/tools/cpuid.c
author Markus Bröker <mbroeker@largo.dyndns.tv>
Thu, 16 Apr 2009 12:49:13 +0200
changeset 65 76514757b0d6
parent 6 c3dc3eb3b541
child 77 49e0babccb23
permissions -rw-r--r--
GNU Indent cannot handle C++ Source Files... I like GNU indent. I like it so much that i use it for all my projects. But it doesn't work with C++ sources. To avoid further problems, all C++ Headers will be renamed from *.h to their *.hpp counterparts. mbroeker committer: Markus Bröker <mbroeker@largo.homelinux.org>

/*
 * cpuinfo.c
 */

#include <cpuid.h>

char *get_cpu_brand (int function)
{
    ULONG brand[4];

    static char s[48];

  __asm__ ("cpuid":"=a" (brand[0]), "=b" (brand[1]), "=c" (brand[2]), "=d" (brand[3])
  :         "a" (function)
        );

    memcpy (s, brand, sizeof (brand));
    return s;
}

char *get_cpu_vendor ()
{
    ULONG vendor[3];
    static char s[15];

    *s = 0;

  __asm__ ("cpuid":"=b" (vendor[0]), "=d" (vendor[1]), "=c" (vendor[2])
  :         "a" (0)
        );

    memcpy (s, vendor, sizeof (vendor));
    return s;
}

ULONG get_cpu_function (ULONG function, ULONG * ax, ULONG * bx, ULONG * cx, ULONG * dx)
{
  __asm__ ("cpuid":"=a" (*ax), "=b" (*bx), "=c" (*cx), "=d" (*dx)
  :         "a" (function)
        );

    return (ULONG) (*ax);
}