| // Copyright (C) 2014 The Android Open Source Project |
| // |
| // This software is licensed under the terms of the GNU General Public |
| // License version 2, as published by the Free Software Foundation, and |
| // may be copied, distributed, and modified under those terms. |
| // |
| // 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 |
| // GNU General Public License for more details. |
| |
| #pragma once |
| |
| #include <stdbool.h> |
| |
| #include "android/utils/compiler.h" |
| |
| ANDROID_BEGIN_HEADER |
| |
| // don't change these numbers |
| // Android Studio depends on them |
| typedef enum { |
| ANDROID_CPU_ACCELERATION_READY = 0, // Acceleration is available |
| ANDROID_CPU_ACCELERATION_NESTED_NOT_SUPPORTED = 1, // HAXM doesn't support nested VM |
| ANDROID_CPU_ACCELERATION_INTEL_REQUIRED = 2, // HAXM requires GeniuneIntel processor |
| ANDROID_CPU_ACCELERATION_NO_CPU_SUPPORT = 3, // CPU doesn't support required features (VT-x or SVM) |
| ANDROID_CPU_ACCELERATION_NO_CPU_VTX_SUPPORT = 4, // CPU doesn't support VT-x |
| ANDROID_CPU_ACCELERATION_NO_CPU_NX_SUPPORT = 5, // CPU doesn't support NX |
| ANDROID_CPU_ACCELERATION_ACCEL_NOT_INSTALLED = 6, // KVM/HAXM package not installed |
| ANDROID_CPU_ACCELERATION_ACCEL_OBSOLETE = 7, // HAXM package is obsolete |
| ANDROID_CPU_ACCELERATION_DEV_NOT_FOUND = 8, // /dev/kvm is not found: VT disabled in BIOS or KVM kernel module not loaded |
| ANDROID_CPU_ACCELERATION_VT_DISABLED = 9, // HAXM is installed but VT disabled in BIOS |
| ANDROID_CPU_ACCELERATION_NX_DISABLED = 10, // HAXM is installed but NX disabled in BIOS |
| ANDROID_CPU_ACCELERATION_DEV_PERMISSION = 11, // /dev/kvm or HAXM device: permission denied |
| ANDROID_CPU_ACCELERATION_DEV_OPEN_FAILED = 12, // /dev/kvm or HAXM device: open failed |
| ANDROID_CPU_ACCELERATION_DEV_IOCTL_FAILED = 13, // /dev/kvm or HAXM device: ioctl failed |
| ANDROID_CPU_ACCELERATION_DEV_OBSOLETE = 14, // KVM or HAXM supported API is too old |
| ANDROID_CPU_ACCELERATION_HYPERV_ENABLED = 15, // HyperV must be disabled |
| ANDROID_CPU_ACCELERATION_ERROR = 138, // Some other error occurred |
| } AndroidCpuAcceleration; |
| |
| // ditto |
| typedef enum { |
| ANDROID_HYPERV_ABSENT = 0, // No hyper-V found |
| ANDROID_HYPERV_INSTALLED = 1, // Hyper-V is installed but not running |
| ANDROID_HYPERV_RUNNING = 2, // Hyper-V is up and running |
| ANDROID_HYPERV_ERROR = 100, // Failed to detect status |
| } AndroidHyperVStatus; |
| |
| // +1, cpu info |
| typedef enum { |
| ANDROID_CPU_INFO_FAILED = 0, // this is the value to return if something |
| // went wrong |
| |
| ANDROID_CPU_INFO_AMD = 1 << 0, // AMD CPU |
| ANDROID_CPU_INFO_INTEL = 1 << 1, // Intel CPU |
| ANDROID_CPU_INFO_OTHER = 1 << 2, // Other CPU manufacturer |
| ANDROID_CPU_INFO_VM = 1 << 3, // Running in a VM |
| ANDROID_CPU_INFO_VIRT_SUPPORTED = 1 << 4, // CPU supports |
| // virtualization technologies |
| |
| ANDROID_CPU_INFO_32_BIT = 1 << 5, // 32-bit CPU, really! |
| ANDROID_CPU_INFO_64_BIT_32_BIT_OS = 1 << 6, // 32-bit OS on a 64-bit CPU |
| ANDROID_CPU_INFO_64_BIT = 1 << 7, // 64-bit CPU |
| |
| } AndroidCpuInfoFlags; |
| |
| /* Returns ANDROID_CPU_ACCELERATION_READY if CPU acceleration is |
| * possible on this machine. If |status| is not NULL, on exit, |
| * |*status| will be set to a heap-allocated string describing |
| * the status of acceleration, to be freed by the caller. |
| */ |
| AndroidCpuAcceleration androidCpuAcceleration_getStatus(char** status); |
| |
| ANDROID_END_HEADER |