89 lines
2.2 KiB
C
89 lines
2.2 KiB
C
|
/*********************************************************
|
||
|
* Copyright (C) 1998-2015 VMware, Inc. All rights reserved.
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify it
|
||
|
* under the terms of the GNU Lesser General Public License as published
|
||
|
* by the Free Software Foundation version 2.1 and no later version.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful, but
|
||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public
|
||
|
* License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU Lesser General Public License
|
||
|
* along with this program; if not, write to the Free Software Foundation, Inc.,
|
||
|
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||
|
*
|
||
|
*********************************************************/
|
||
|
|
||
|
#ifndef _CPUID_INFO_H
|
||
|
#define _CPUID_INFO_H
|
||
|
|
||
|
#include "vm_basic_asm.h"
|
||
|
#include "x86cpuid_asm.h"
|
||
|
|
||
|
|
||
|
typedef struct CPUID0 {
|
||
|
int numEntries;
|
||
|
char name[16]; // 4 extra bytes to null terminate
|
||
|
} CPUID0;
|
||
|
|
||
|
typedef struct CPUID1 {
|
||
|
uint32 version;
|
||
|
uint32 ebx;
|
||
|
uint32 ecxFeatures;
|
||
|
uint32 edxFeatures;
|
||
|
} CPUID1;
|
||
|
|
||
|
typedef struct CPUID80 {
|
||
|
uint32 numEntries;
|
||
|
uint32 ebx;
|
||
|
uint32 ecx;
|
||
|
uint32 edx;
|
||
|
} CPUID80;
|
||
|
|
||
|
typedef struct CPUID81 {
|
||
|
uint32 eax;
|
||
|
uint32 ebx;
|
||
|
uint32 ecxFeatures;
|
||
|
uint32 edxFeatures;
|
||
|
} CPUID81;
|
||
|
|
||
|
typedef struct CPUIDSummary {
|
||
|
CPUID0 id0;
|
||
|
CPUID1 id1;
|
||
|
CPUIDRegs ida;
|
||
|
CPUID80 id80;
|
||
|
CPUID81 id81;
|
||
|
CPUIDRegs id88, id8a;
|
||
|
} CPUIDSummary;
|
||
|
|
||
|
|
||
|
/*
|
||
|
*----------------------------------------------------------------------
|
||
|
*
|
||
|
* CPUIDSummary_RegsFromCpuid0 --
|
||
|
*
|
||
|
* Fills in the given CPUIDRegs struct with the values from the CPUID0 struct.
|
||
|
*
|
||
|
* Results:
|
||
|
* Returns the CPUIDRegs pointer passed in.
|
||
|
*
|
||
|
* Side effects:
|
||
|
* None.
|
||
|
*
|
||
|
*----------------------------------------------------------------------
|
||
|
*/
|
||
|
static INLINE CPUIDRegs*
|
||
|
CPUIDSummary_RegsFromCpuid0(CPUID0* id0In,
|
||
|
CPUIDRegs* id0Out)
|
||
|
{
|
||
|
id0Out->eax = id0In->numEntries;
|
||
|
id0Out->ebx = *(uint32 *) (id0In->name + 0);
|
||
|
id0Out->edx = *(uint32 *) (id0In->name + 4);
|
||
|
id0Out->ecx = *(uint32 *) (id0In->name + 8);
|
||
|
return id0Out;
|
||
|
}
|
||
|
|
||
|
#endif
|