use status::NvAPI_Status;
use handles::NvPhysicalGpuHandle;
use types;
pub mod cooler;
pub mod pstate;
pub mod clock;
pub mod thermal;
pub mod power;
pub mod display;
nvapi! {
pub type EnumPhysicalGPUsFn = extern "C" fn(nvGPUHandle: *mut [NvPhysicalGpuHandle; types::NVAPI_MAX_PHYSICAL_GPUS], pGpuCount: *mut u32) -> NvAPI_Status;
pub unsafe fn NvAPI_EnumPhysicalGPUs;
}
nvapi! {
pub type GPU_GetFullNameFn = extern "C" fn(hPhysicalGPU: NvPhysicalGpuHandle, szName: *mut types::NvAPI_ShortString) -> NvAPI_Status;
pub unsafe fn NvAPI_GPU_GetFullName;
}
nvapi! {
pub type GPU_GetPhysicalFrameBufferSizeFn = extern "C" fn(hPhysicalGPU: NvPhysicalGpuHandle, pSize: *mut u32) -> NvAPI_Status;
pub unsafe fn NvAPI_GPU_GetPhysicalFrameBufferSize;
}
nvapi! {
pub type GPU_GetVbiosVersionStringFn = extern "C" fn(hPhysicalGPU: NvPhysicalGpuHandle, szBiosRevision: *mut types::NvAPI_ShortString) -> NvAPI_Status;
pub unsafe fn NvAPI_GPU_GetVbiosVersionString;
}
nvapi! {
pub type GPU_GetPCIIdentifiersFn = extern "C" fn(hPhysicalGPU: NvPhysicalGpuHandle, pDeviceId: *mut u32, pSubSystemId: *mut u32, pRevisionId: *mut u32, pExtDeviceId: *mut u32) -> NvAPI_Status;
pub unsafe fn NvAPI_GPU_GetPCIIdentifiers;
}
nvenum! {
pub enum NV_SYSTEM_TYPE / SystemType {
NV_SYSTEM_TYPE_UNKNOWN / Unknown = 0,
NV_SYSTEM_TYPE_LAPTOP / Laptop = 1,
NV_SYSTEM_TYPE_DESKTOP / Desktop = 2,
}
}
nvenum_display! {
SystemType => _
}
nvapi! {
pub type GPU_GetSystemTypeFn = extern "C" fn(hPhysicalGPU: NvPhysicalGpuHandle, pSystemType: *mut NV_SYSTEM_TYPE) -> NvAPI_Status;
pub unsafe fn NvAPI_GPU_GetSystemType;
}
nvapi! {
pub type GPU_GetShaderSubPipeCountFn = extern "C" fn(hPhysicalGPU: NvPhysicalGpuHandle, pCount: *mut u32) -> NvAPI_Status;
pub unsafe fn NvAPI_GPU_GetShaderSubPipeCount;
}
nvapi! {
pub type GPU_GetGpuCoreCountFn = extern "C" fn(hPhysicalGPU: NvPhysicalGpuHandle, pCount: *mut u32) -> NvAPI_Status;
pub unsafe fn NvAPI_GPU_GetGpuCoreCount;
}
nvstruct! {
pub struct NV_BOARD_INFO_V1 {
pub version: u32,
pub BoardNum: [u8; 16],
}
}
nvversion! { NV_BOARD_INFO_VER1(NV_BOARD_INFO_V1 = 4+16, 1) }
nvversion! { NV_BOARD_INFO_VER = NV_BOARD_INFO_VER1 }
pub type NV_BOARD_INFO = NV_BOARD_INFO_V1;
nvapi! {
pub unsafe fn NvAPI_GPU_GetBoardInfo(hPhysicalGpu: NvPhysicalGpuHandle, pBoardInfo: *mut NV_BOARD_INFO) -> NvAPI_Status;
}
nvbits! {
pub enum NVAPI_GPU_PERF_DECREASE / PerformanceDecreaseReason {
NV_GPU_PERF_DECREASE_NONE / NONE = 0x00,
NV_GPU_PERF_DECREASE_REASON_THERMAL_PROTECTION / THERMAL_PROTECTION = 0x01,
NV_GPU_PERF_DECREASE_REASON_POWER_CONTROL / POWER_CONTROL = 0x02,
NV_GPU_PERF_DECREASE_REASON_AC_BATT / AC_BATTERY = 0x04,
NV_GPU_PERF_DECREASE_REASON_API_TRIGGERED / API_TRIGGERED = 0x08,
NV_GPU_PERF_DECREASE_REASON_INSUFFICIENT_POWER / INSUFFICIENT_POWER = 0x10,
NV_GPU_PERF_DECREASE_REASON_UNKNOWN / UNKNOWN = 0x00,
}
}
nvapi! {
pub unsafe fn NvAPI_GPU_GetPerfDecreaseInfo(hPhysicalGpu: NvPhysicalGpuHandle, pPerfDecrInfo: *mut NVAPI_GPU_PERF_DECREASE) -> NvAPI_Status;
}
pub mod private {
use status::NvAPI_Status;
use handles::NvPhysicalGpuHandle;
use types;
pub const NVAPI_MAX_PROCESSES: usize = 128;
nvapi! {
pub type GPU_GetShaderPipeCountFn = extern "C" fn(hPhysicalGPU: NvPhysicalGpuHandle, pCount: *mut u32) -> NvAPI_Status;
pub unsafe fn NvAPI_GPU_GetShaderPipeCount;
}
nvenum! {
pub enum NV_GPU_RAM_TYPE / RamType {
NV_GPU_RAM_UNKNOWN / Unknown = 0,
NV_GPU_RAM_SDRAM / SDRAM = 1,
NV_GPU_RAM_DDR1 / DDR1 = 2,
NV_GPU_RAM_DDR2 / DDR2 = 3,
NV_GPU_RAM_GDDR2 / GDDR2 = 4,
NV_GPU_RAM_GDDR3 / GDDR3 = 5,
NV_GPU_RAM_GDDR4 / GDDR4 = 6,
NV_GPU_RAM_DDR3 / DDR3 = 7,
NV_GPU_RAM_GDDR5 / GDDR5 = 8,
NV_GPU_RAM_LPDDR2 / LPDDR2 = 9,
NV_GPU_RAM_GDDR5X / GDDR5X = 10,
}
}
nvenum_display! {
RamType => _
}
nvapi! {
pub type GPU_GetRamTypeFn = extern "C" fn(hPhysicalGPU: NvPhysicalGpuHandle, pMemType: *mut NV_GPU_RAM_TYPE) -> NvAPI_Status;
pub unsafe fn NvAPI_GPU_GetRamType;
}
nvenum! {
pub enum NV_GPU_RAM_MAKER / RamMaker {
NV_GPU_RAM_MAKER_UNKNOWN / Unknown = 0,
NV_GPU_RAM_MAKER_SAMSUNG / Samsung = 1,
NV_GPU_RAM_MAKER_QIMONDA / Qimonda = 2,
NV_GPU_RAM_MAKER_ELPIDA / Elpida = 3,
NV_GPU_RAM_MAKER_ETRON / Etron = 4,
NV_GPU_RAM_MAKER_NANYA / Nanya = 5,
NV_GPU_RAM_MAKER_HYNIX / Hynix = 6,
NV_GPU_RAM_MAKER_MOSEL / Mosel = 7,
NV_GPU_RAM_MAKER_WINBOND / Winbond = 8,
NV_GPU_RAM_MAKER_ELITE / Elite = 9,
NV_GPU_RAM_MAKER_MICRON / Micron = 10,
}
}
nvenum_display! {
RamMaker => _
}
nvapi! {
pub type GPU_GetRamMakerFn = extern "C" fn(hPhysicalGPU: NvPhysicalGpuHandle, pRamMaker: *mut NV_GPU_RAM_MAKER) -> NvAPI_Status;
pub unsafe fn NvAPI_GPU_GetRamMaker;
}
nvapi! {
pub type GPU_GetRamBusWidthFn = extern "C" fn(hPhysicalGPU: NvPhysicalGpuHandle, pRamBusWidth: *mut u32) -> NvAPI_Status;
pub unsafe fn NvAPI_GPU_GetRamBusWidth;
}
nvapi! {
pub type GPU_GetRamBankCountFn = extern "C" fn(hPhysicalGPU: NvPhysicalGpuHandle, pRamBankCount: *mut u32) -> NvAPI_Status;
pub unsafe fn NvAPI_GPU_GetRamBankCount;
}
nvenum! {
pub enum NV_GPU_FOUNDRY / Foundry {
NV_GPU_FOUNDRY_UNKNOWN / Unknown = 0,
NV_GPU_FOUNDRY_TSMC / TSMC = 1,
NV_GPU_FOUNDRY_UMC / UMC = 2,
NV_GPU_FOUNDRY_IBM / IBM = 3,
NV_GPU_FOUNDRY_SMIC / SMIC = 4,
NV_GPU_FOUNDRY_CSM / CSM = 5,
NV_GPU_FOUNDRY_TOSHIBA / Toshiba = 6,
}
}
nvenum_display! {
Foundry => {
TSMC = "Taiwan Semiconductor Manufacturing Company (TSMC)",
UMC = "United Microelectronics Corporation (UMC)",
IBM = "IBM Microelectronics",
SMIC = "Semiconductor Manufacturing International Corporation (SMIC)",
CSM = "Chartered Semiconductor Manufacturing (CSM)",
Toshiba = "Toshiba Corporation",
_ = _,
}
}
nvapi! {
pub type GPU_GetFoundryFn = extern "C" fn(hPhysicalGPU: NvPhysicalGpuHandle, pFoundry: *mut NV_GPU_FOUNDRY) -> NvAPI_Status;
pub unsafe fn NvAPI_GPU_GetFoundry;
}
nvapi! {
pub unsafe fn NvAPI_GPU_GetFBWidthAndLocation(hPhysicalGpu: NvPhysicalGpuHandle, pWidth: *mut u32, pLocation: *mut u32) -> NvAPI_Status;
}
nvenum! {
pub enum NV_GPU_VENDOR / VendorId {
NV_GPU_VENDOR_UNKNOWN / Unknown = 0,
NV_GPU_VENDOR_ASUS / ASUS = 0x1043,
NV_GPU_VENDOR_ELSA / Elsa = 0x1048,
NV_GPU_VENDOR_LEADTEK / Leadtek = 0x107d,
NV_GPU_VENDOR_GAINWARD / Gainward = 0x10b0,
NV_GPU_VENDOR_NVIDIA / NVIDIA = 0x10de,
NV_GPU_VENDOR_GIGABYTE / Gigabyte = 0x1458,
NV_GPU_VENDOR_MSI / MSI = 0x1462,
NV_GPU_VENDOR_PNY_ / PNY_ = 0x154b,
NV_GPU_VENDOR_PALIT / Palit = 0x1569,
NV_GPU_VENDOR_XFX / XFX = 0x1682,
NV_GPU_VENDOR_CLUB3D / Club3D = 0x196d,
NV_GPU_VENDOR_PNY / PNY = 0x196e,
NV_GPU_VENDOR_ZOTAC / Zotac = 0x19da,
NV_GPU_VENDOR_BFG / BFG = 0x19f1,
NV_GPU_VENDOR_POV / PoV = 0x1acc,
NV_GPU_VENDOR_GALAX / Galax = 0x1b4c,
NV_GPU_VENDOR_EVGA / EVGA = 0x3842,
NV_GPU_VENDOR_COLORFUL / Colorful = 0x7377,
}
}
nvenum_display! {
VendorId => {
ASUS = "ASUSTeK Computer Inc.",
Gigabyte = "Gigabyte Technology",
MSI = "Micro-Star International",
PNY_ = "PNY",
Galax = "Galax / KFA2",
_ = _,
}
}
nvapi! {
pub unsafe fn NvAPI_GetGPUIDFromPhysicalGPU(hPhysicalGpu: NvPhysicalGpuHandle, gpuid: *mut u32) -> NvAPI_Status;
}
nvapi! {
pub unsafe fn NvAPI_GPU_GetShortName(hPhysicalGpu: NvPhysicalGpuHandle, pName: *mut types::NvAPI_ShortString) -> NvAPI_Status;
}
nvapi! {
pub unsafe fn NvAPI_GPU_GetPartitionCount(hPhysicalGpu: NvPhysicalGpuHandle, pPartitionCount: *mut u32) -> NvAPI_Status;
}
nvapi! {
pub unsafe fn NvAPI_GetDriverModel(hPhysicalGpu: NvPhysicalGpuHandle, pDriverModel: *mut u32) -> NvAPI_Status;
}
}