cloudinit/vendor/github.com/sigma/vmw-guestinfo/include/hostinfo.h

235 lines
6.8 KiB
C
Raw Normal View History

/*********************************************************
* 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.
*
*********************************************************/
/*
* hostinfo.h --
*
* Interface to host-specific information functions
*
*/
#if !defined(_HOSTINFO_H_)
#define _HOSTINFO_H_
#include "vm_basic_types.h"
#include "vm_basic_defs.h"
#include "x86cpuid.h"
#include "unicodeTypes.h"
typedef enum {
HOSTINFO_PROCESS_QUERY_DEAD, // Procss is dead (does not exist)
HOSTINFO_PROCESS_QUERY_ALIVE, // Process is alive (does exist)
HOSTINFO_PROCESS_QUERY_UNKNOWN // Process existence cannot be determined
} HostinfoProcessQuery;
HostinfoProcessQuery Hostinfo_QueryProcessExistence(int pid);
Unicode Hostinfo_NameGet(void); /* don't free result */
Unicode Hostinfo_HostName(void); /* free result */
void Hostinfo_MachineID(uint32 *hostNameHash,
uint64 *hostHardwareID);
Bool Hostinfo_GetMemoryInfoInPages(unsigned int *minSize,
unsigned int *maxSize,
unsigned int *currentSize);
#ifdef __linux__
Bool Hostinfo_GetSwapInfoInPages(unsigned int *totalSwap,
unsigned int *freeSwap);
#endif
Bool Hostinfo_GetRatedCpuMhz(int32 cpuNumber,
uint32 *mHz);
char *Hostinfo_GetCpuDescription(uint32 cpuNumber);
void Hostinfo_GetTimeOfDay(VmTimeType *time);
VmTimeType Hostinfo_SystemUpTime(void);
VmTimeType Hostinfo_SystemTimerNS(void);
static INLINE VmTimeType
Hostinfo_SystemTimerUS(void)
{
return Hostinfo_SystemTimerNS() / 1000ULL;
}
static INLINE VmTimeType
Hostinfo_SystemTimerMS(void)
{
return Hostinfo_SystemTimerNS() / 1000000ULL;
}
int Hostinfo_OSVersion(unsigned int i);
int Hostinfo_GetSystemBitness(void);
const char *Hostinfo_OSVersionString(void);
char *Hostinfo_GetOSName(void);
char *Hostinfo_GetOSGuestString(void);
Bool Hostinfo_OSIsSMP(void);
#if defined(_WIN32)
Bool Hostinfo_OSIsWinNT(void);
Bool Hostinfo_OSIsWow64(void);
Bool Hostinfo_TSCInvariant(void);
DWORD Hostinfo_OpenProcessBits(void);
DWORD Hostinfo_OpenThreadBits(void);
#else
void Hostinfo_ResetProcessState(const int *keepFds,
size_t numKeepFds);
int Hostinfo_Execute(const char *path,
char * const *args,
Bool wait,
const int *keepFds,
size_t numKeepFds);
typedef enum HostinfoDaemonizeFlags {
HOSTINFO_DAEMONIZE_DEFAULT = 0,
HOSTINFO_DAEMONIZE_NOCHDIR = (1 << 0),
HOSTINFO_DAEMONIZE_NOCLOSE = (1 << 1),
HOSTINFO_DAEMONIZE_EXIT = (1 << 2),
HOSTINFO_DAEMONIZE_LOCKPID = (1 << 3),
} HostinfoDaemonizeFlags;
Bool Hostinfo_Daemonize(const char *path,
char * const *args,
HostinfoDaemonizeFlags flags,
const char *pidPath,
const int *keepFds,
size_t numKeepFds);
#endif
Bool Hostinfo_NestingSupported(void);
Bool Hostinfo_VCPUInfoBackdoor(unsigned bit);
Bool Hostinfo_SLC64Supported(void);
Bool Hostinfo_SynchronizedVTSCs(void);
Bool Hostinfo_NestedHVReplaySupported(void);
Bool Hostinfo_TouchBackDoor(void);
Bool Hostinfo_TouchVirtualPC(void);
Bool Hostinfo_TouchXen(void);
char *Hostinfo_HypervisorCPUIDSig(void);
#define HGMP_PRIVILEGE 0
#define HGMP_NO_PRIVILEGE 1
Unicode Hostinfo_GetModulePath(uint32 priv);
char *Hostinfo_GetLibraryPath(void *addr);
Unicode Hostinfo_GetUser(void);
void Hostinfo_LogMemUsage(void);
/*
* HostInfoCpuIdInfo --
*
* Contains cpuid information for a CPU.
*/
typedef struct {
CpuidVendor vendor;
uint32 version;
uint8 family;
uint8 model;
uint8 stepping;
uint8 type;
uint32 features;
uint32 extfeatures;
} HostinfoCpuIdInfo;
uint32 Hostinfo_NumCPUs(void);
char *Hostinfo_GetCpuidStr(void);
Bool Hostinfo_GetCpuid(HostinfoCpuIdInfo *info);
#if !defined(VMX86_SERVER)
Bool Hostinfo_CPUCounts(uint32 *logical,
uint32 *cores,
uint32 *pkgs);
#endif
#if defined(_WIN32)
typedef enum {
OS_WIN95 = 1,
OS_WIN98 = 2,
OS_WINME = 3,
OS_WINNT = 4,
OS_WIN2K = 5,
OS_WINXP = 6,
OS_WIN2K3 = 7,
OS_VISTA = 8,
OS_WINSEVEN = 9,
OS_WIN8 = 10,
OS_WIN10 = 11,
OS_UNKNOWN = 99999 // last, highest value
} OS_TYPE;
typedef enum {
OS_DETAIL_WIN95 = 1,
OS_DETAIL_WIN98 = 2,
OS_DETAIL_WINME = 3,
OS_DETAIL_WINNT = 4,
OS_DETAIL_WIN2K = 5,
OS_DETAIL_WIN2K_PRO = 6,
OS_DETAIL_WIN2K_SERV = 7,
OS_DETAIL_WIN2K_ADV_SERV = 8,
OS_DETAIL_WINXP = 9,
OS_DETAIL_WINXP_HOME = 10,
OS_DETAIL_WINXP_PRO = 11,
OS_DETAIL_WINXP_X64_PRO = 12,
OS_DETAIL_WIN2K3 = 13,
OS_DETAIL_WIN2K3_WEB = 14,
OS_DETAIL_WIN2K3_ST = 15,
OS_DETAIL_WIN2K3_EN = 16,
OS_DETAIL_WIN2K3_BUS = 17,
OS_DETAIL_VISTA = 18,
OS_DETAIL_WIN2K8 = 19,
OS_DETAIL_WINSEVEN = 20,
OS_DETAIL_WIN2K8R2 = 21,
OS_DETAIL_WIN8 = 22,
OS_DETAIL_WIN8SERVER = 23,
OS_DETAIL_WIN10 = 24,
OS_DETAIL_WIN10SERVER = 25,
OS_DETAIL_UNKNOWN = 99999 // last, highest value
} OS_DETAIL_TYPE;
/* generic names (to protect the future) but Windows specific for now */
OS_TYPE Hostinfo_GetOSType(void);
OS_DETAIL_TYPE Hostinfo_GetOSDetailType(void);
Bool Hostinfo_GetPCFrequency(uint64 *pcHz);
Bool Hostinfo_GetMhzOfProcessor(int32 processorNumber,
uint32 *currentMhz,
uint32 *maxMhz);
uint64 Hostinfo_SystemIdleTime(void);
Bool Hostinfo_GetAllCpuid(CPUIDQuery *query);
static INLINE Bool
Hostinfo_AtLeastVista(void)
{
return (Hostinfo_GetOSType() >= OS_VISTA);
}
#endif
void Hostinfo_LogLoadAverage(void);
Bool Hostinfo_GetLoadAverage(uint32 *l);
#ifdef __APPLE__
size_t Hostinfo_GetKernelZoneElemSize(char const *name);
char *Hostinfo_GetHardwareModel(void);
#endif
#endif /* ifndef _HOSTINFO_H_ */