Enabling Temperature for Windows.

Change-Id: I0a4e51448d56a083ae5ecbda5106db981f5cd028
This commit is contained in:
Daniel Enriquez
2020-08-12 21:50:27 -07:00
parent d71e2e3b22
commit c24c629cfc
13 changed files with 428 additions and 17 deletions

View File

@@ -5,6 +5,8 @@
#
set(L0_SRCS_TOOLS_SYSMAN_TEMPERATURE_WINDOWS
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
${CMAKE_CURRENT_SOURCE_DIR}/os_temperature_imp.h
${CMAKE_CURRENT_SOURCE_DIR}/os_temperature_imp.cpp
)

View File

@@ -5,26 +5,143 @@
*
*/
#include "sysman/temperature/os_temperature.h"
#include "sysman/temperature/windows/os_temperature_imp.h"
namespace L0 {
class WddmTemperatureImp : public OsTemperature {
public:
ze_result_t getSensorTemperature(double *pTemperature) override;
bool isTempModuleSupported() override;
};
ze_result_t WddmTemperatureImp::getProperties(zes_temp_properties_t *pProperties) {
ze_result_t status = ZE_RESULT_SUCCESS;
uint32_t value = 0;
KmdSysman::RequestProperty request;
KmdSysman::ResponseProperty response;
pProperties->type = this->type;
pProperties->onSubdevice = false;
pProperties->subdeviceId = 0;
request.commandId = KmdSysman::Command::Get;
request.componentId = KmdSysman::Component::TemperatureComponent;
switch (this->type) {
case ZES_TEMP_SENSORS_GLOBAL:
request.paramInfo = KmdSysman::TemperatureDomainsType::TemperatureDomainPackage;
break;
case ZES_TEMP_SENSORS_GPU:
request.paramInfo = KmdSysman::TemperatureDomainsType::TemperatureDomainDGPU;
break;
case ZES_TEMP_SENSORS_MEMORY:
request.paramInfo = KmdSysman::TemperatureDomainsType::TemperatureDomainPackage;
break;
default:
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
break;
}
request.requestId = KmdSysman::Requests::Temperature::TempCriticalEventSupported;
status = pKmdSysManager->requestSingle(request, response);
if (status != ZE_RESULT_SUCCESS) {
return status;
}
memcpy_s(&pProperties->isCriticalTempSupported, sizeof(ze_bool_t), response.dataBuffer, sizeof(ze_bool_t));
request.requestId = KmdSysman::Requests::Temperature::TempThreshold1EventSupported;
status = pKmdSysManager->requestSingle(request, response);
if (status != ZE_RESULT_SUCCESS) {
return status;
}
memcpy_s(&pProperties->isThreshold1Supported, sizeof(ze_bool_t), response.dataBuffer, sizeof(ze_bool_t));
request.requestId = KmdSysman::Requests::Temperature::TempThreshold2EventSupported;
status = pKmdSysManager->requestSingle(request, response);
if (status != ZE_RESULT_SUCCESS) {
return status;
}
memcpy_s(&pProperties->isThreshold2Supported, sizeof(ze_bool_t), response.dataBuffer, sizeof(ze_bool_t));
request.requestId = KmdSysman::Requests::Temperature::MaxTempSupported;
status = pKmdSysManager->requestSingle(request, response);
if (status != ZE_RESULT_SUCCESS) {
return status;
}
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
pProperties->maxTemperature = static_cast<double>(value);
return status;
}
ze_result_t WddmTemperatureImp::getSensorTemperature(double *pTemperature) {
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
ze_result_t status = ZE_RESULT_SUCCESS;
KmdSysman::RequestProperty request;
KmdSysman::ResponseProperty response;
request.commandId = KmdSysman::Command::Get;
request.componentId = KmdSysman::Component::TemperatureComponent;
request.requestId = KmdSysman::Requests::Temperature::CurrentTemperature;
switch (type) {
case ZES_TEMP_SENSORS_GLOBAL:
request.paramInfo = KmdSysman::TemperatureDomainsType::TemperatureDomainPackage;
break;
case ZES_TEMP_SENSORS_GPU:
request.paramInfo = KmdSysman::TemperatureDomainsType::TemperatureDomainDGPU;
break;
case ZES_TEMP_SENSORS_MEMORY:
request.paramInfo = KmdSysman::TemperatureDomainsType::TemperatureDomainHBM;
break;
default:
*pTemperature = 0;
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
break;
}
status = pKmdSysManager->requestSingle(request, response);
if (status != ZE_RESULT_SUCCESS) {
return status;
}
uint32_t value = 0;
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
*pTemperature = static_cast<double>(value);
return status;
}
bool WddmTemperatureImp::isTempModuleSupported() {
return false;
KmdSysman::RequestProperty request;
KmdSysman::ResponseProperty response;
request.commandId = KmdSysman::Command::Get;
request.componentId = KmdSysman::Component::TemperatureComponent;
request.requestId = KmdSysman::Requests::Temperature::CurrentTemperature;
return (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS);
}
void WddmTemperatureImp::setSensorType(zes_temp_sensors_t sensorType) {
type = sensorType;
}
WddmTemperatureImp::WddmTemperatureImp(OsSysman *pOsSysman) {
WddmSysmanImp *pWddmSysmanImp = static_cast<WddmSysmanImp *>(pOsSysman);
pKmdSysManager = &pWddmSysmanImp->getKmdSysManager();
}
OsTemperature *OsTemperature::create(OsSysman *pOsSysman, zes_temp_sensors_t sensorType) {
WddmTemperatureImp *pWddmTemperatureImp = new WddmTemperatureImp();
WddmTemperatureImp *pWddmTemperatureImp = new WddmTemperatureImp(pOsSysman);
pWddmTemperatureImp->setSensorType(sensorType);
return static_cast<OsTemperature *>(pWddmTemperatureImp);
}

View File

@@ -0,0 +1,32 @@
/*
* Copyright (C) 2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "shared/source/helpers/non_copyable_or_moveable.h"
#include "sysman/temperature/os_temperature.h"
#include "sysman/windows/os_sysman_imp.h"
namespace L0 {
class KmdSysManager;
class WddmTemperatureImp : public OsTemperature, NEO::NonCopyableOrMovableClass {
public:
ze_result_t getProperties(zes_temp_properties_t *pProperties) override;
ze_result_t getSensorTemperature(double *pTemperature) override;
bool isTempModuleSupported() override;
void setSensorType(zes_temp_sensors_t sensorType);
WddmTemperatureImp(OsSysman *pOsSysman);
WddmTemperatureImp() = default;
~WddmTemperatureImp() override = default;
protected:
KmdSysManager *pKmdSysManager = nullptr;
zes_temp_sensors_t type = ZES_TEMP_SENSORS_GLOBAL;
};
} // namespace L0