diff --git a/api.cpp b/api.cpp index cd3f3b0..b913dd9 100644 --- a/api.cpp +++ b/api.cpp @@ -109,6 +109,7 @@ extern uint32_t rejected_count; extern int device_map[8]; extern char *device_name[8]; extern int num_cpus; +extern char driver_version[32]; // sysinfos.cpp extern float cpu_temp(int); @@ -245,10 +246,10 @@ static void gpuhwinfos(int gpu_id) snprintf(buf, sizeof(buf), "GPU=%d;BUS=%hd;CARD=%s;MEM=%lu;" "TEMP=%.1f;FAN=%d;FREQ=%d;MEMFREQ=%d;PST=%s;" - "VID=%hx;PID=%hx;NVML=%d;NVAPI=%d;BIOS=%s|", + "VID=%hx;PID=%hx;NVML=%d;NVAPI=%d;DRIVER=%s|", gpu_id, cgpu->gpu_bus, card, cgpu->gpu_mem, cgpu->gpu_temp, cgpu->gpu_fan, cgpu->gpu_clock, cgpu->gpu_memclock, - pstate, cgpu->gpu_vid, cgpu->gpu_pid, cgpu->nvml_id, cgpu->nvapi_id, cgpu->gpu_desc); + pstate, cgpu->gpu_vid, cgpu->gpu_pid, cgpu->nvml_id, cgpu->nvapi_id, driver_version); strcat(buffer, buf); } diff --git a/nvml.cpp b/nvml.cpp index 9a5888f..843d7e8 100644 --- a/nvml.cpp +++ b/nvml.cpp @@ -28,6 +28,9 @@ // cuda.cpp int cuda_num_devices(); +// geforce driver version +char driver_version[32] = { 0 }; + #ifdef USE_WRAPNVML #include "nvml.h" @@ -460,22 +463,26 @@ int nvapi_getusage(unsigned int devNum, unsigned int *pct) return 0; } -int nvapi_getinfo(unsigned int devNum, char *desc) +int nvapi_getinfo(unsigned int devNum, uint16_t *vid, uint16_t *pid) { NvAPI_Status ret; + NvU32 pDeviceId, pSubSystemId, pRevisionId, pExtDeviceId; if (devNum >= nvapi_dev_cnt) return -1; - // bios rev - ret = NvAPI_GPU_GetVbiosVersionString(phys[devNum], desc); + ret = NvAPI_GPU_GetPCIIdentifiers(phys[devNum], &pDeviceId, &pSubSystemId, &pRevisionId, &pExtDeviceId); if (ret != NVAPI_OK) { NvAPI_ShortString string; NvAPI_GetErrorMessage(ret, string); if (opt_debug) - applog(LOG_DEBUG, "NVAPI GetVbiosVersionString: %s", string); + applog(LOG_DEBUG, "NVAPI GetPCIIdentifiers: %s", string); return -1; } + + (*pid) = pDeviceId >> 16; + (*vid) = pDeviceId & 0xFFFF; + return 0; } @@ -536,6 +543,13 @@ int wrap_nvapi_init() applog(LOG_DEBUG, "NVAPI Version: %s", ver); #endif + NvU32 udv; + NvAPI_ShortString str; + ret = NvAPI_SYS_GetDriverAndBranchVersion(&udv, str); + if (ret == NVAPI_OK) { + sprintf(driver_version,"%d.%d", udv/100, udv % 100); + } + return 0; } #endif @@ -638,7 +652,7 @@ int gpu_info(struct cgpu_info *gpu) wrap_nvml_get_info(hnvml, gpu->gpu_id, &gpu->gpu_vid, &gpu->gpu_pid); } #ifdef WIN32 - nvapi_getinfo(nvapi_dev_map[gpu->gpu_id], &gpu->gpu_desc[0]); + nvapi_getinfo(nvapi_dev_map[gpu->gpu_id], &gpu->gpu_vid, &gpu->gpu_pid); #endif return 0; }