mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 14:55:24 +08:00
Implement FanGetConfig sysman API for windows
Signed-off-by: Ezhilsivam Shanmugam <ezhilsivam.shanmugam@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
95c3ef28fc
commit
0a7166d10e
@@ -62,8 +62,45 @@ ze_result_t WddmFanImp::getProperties(zes_fan_properties_t *pProperties) {
|
||||
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
ze_result_t WddmFanImp::getConfig(zes_fan_config_t *pConfig) {
|
||||
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
|
||||
KmdSysman::RequestProperty request;
|
||||
KmdSysman::ResponseProperty response;
|
||||
|
||||
request.commandId = KmdSysman::Command::Get;
|
||||
request.componentId = KmdSysman::Component::FanComponent;
|
||||
request.requestId = KmdSysman::Requests::Fans::CurrentNumOfControlPoints;
|
||||
|
||||
ze_result_t status = pKmdSysManager->requestSingle(request, response);
|
||||
|
||||
if (status != ZE_RESULT_SUCCESS) {
|
||||
return status;
|
||||
} else {
|
||||
uint32_t value = 0;
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
if (value == 0) {
|
||||
pConfig->mode = ZES_FAN_SPEED_MODE_DEFAULT;
|
||||
} else {
|
||||
pConfig->mode = ZES_FAN_SPEED_MODE_TABLE;
|
||||
pConfig->speedTable.numPoints = value;
|
||||
|
||||
request.requestId = KmdSysman::Requests::Fans::CurrentFanPoint;
|
||||
|
||||
for (int32_t i = 0; i < pConfig->speedTable.numPoints; i++) {
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
|
||||
FanPoint point = {};
|
||||
memcpy_s(&point.data, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
|
||||
pConfig->speedTable.table[i].speed.speed = point.fanSpeedPercent;
|
||||
pConfig->speedTable.table[i].speed.units = ZES_FAN_SPEED_UNITS_PERCENT;
|
||||
pConfig->speedTable.table[i].temperature = point.temperatureDegreesCelsius;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
ze_result_t WddmFanImp::setDefaultMode() {
|
||||
@@ -120,7 +157,6 @@ ze_result_t WddmFanImp::setSpeedTableMode(const zes_fan_speed_table_t *pSpeedTab
|
||||
}
|
||||
|
||||
return pKmdSysManager->requestMultiple(vRequests, vResponses);
|
||||
;
|
||||
}
|
||||
|
||||
ze_result_t WddmFanImp::getState(zes_fan_speed_units_t units, int32_t *pSpeed) {
|
||||
|
||||
@@ -18,7 +18,14 @@ class FanKmdSysManager : public Mock<MockKmdSysManager> {};
|
||||
|
||||
template <>
|
||||
struct Mock<FanKmdSysManager> : public FanKmdSysManager {
|
||||
|
||||
union {
|
||||
struct
|
||||
{
|
||||
uint32_t TemperatureDegreesCelsius : 16;
|
||||
uint32_t FanSpeedPercent : 16;
|
||||
};
|
||||
uint32_t Data;
|
||||
} mockFanTempSpeed;
|
||||
uint32_t mockFanMaxPoints = 10;
|
||||
uint32_t mockFanCurrentPulses = 523436;
|
||||
uint32_t mockFanCurrentFanPoints = 0;
|
||||
@@ -45,6 +52,20 @@ struct Mock<FanKmdSysManager> : public FanKmdSysManager {
|
||||
pResponse->outReturnCode = KmdSysman::KmdSysmanFail;
|
||||
}
|
||||
} break;
|
||||
case KmdSysman::Requests::Fans::CurrentNumOfControlPoints: {
|
||||
uint32_t *pValue = reinterpret_cast<uint32_t *>(pBuffer);
|
||||
*pValue = mockFanCurrentFanPoints;
|
||||
pResponse->outReturnCode = KmdSysman::KmdSysmanSuccess;
|
||||
pResponse->outDataSize = sizeof(uint32_t);
|
||||
} break;
|
||||
case KmdSysman::Requests::Fans::CurrentFanPoint: {
|
||||
uint32_t *pValue = reinterpret_cast<uint32_t *>(pBuffer);
|
||||
mockFanTempSpeed.FanSpeedPercent = 25;
|
||||
mockFanTempSpeed.TemperatureDegreesCelsius = 50;
|
||||
*pValue = mockFanTempSpeed.Data;
|
||||
pResponse->outReturnCode = KmdSysman::KmdSysmanSuccess;
|
||||
pResponse->outDataSize = sizeof(uint32_t);
|
||||
} break;
|
||||
default: {
|
||||
pResponse->outDataSize = 0;
|
||||
pResponse->outReturnCode = KmdSysman::KmdSysmanFail;
|
||||
@@ -69,6 +90,12 @@ struct Mock<FanKmdSysManager> : public FanKmdSysManager {
|
||||
pResponse->outReturnCode = KmdSysman::KmdSysmanFail;
|
||||
}
|
||||
} break;
|
||||
case KmdSysman::Requests::Fans::CurrentFanPoint: {
|
||||
uint32_t *pValue = reinterpret_cast<uint32_t *>(pBuffer);
|
||||
mockFanTempSpeed.Data = *pValue;
|
||||
pResponse->outDataSize = 0;
|
||||
pResponse->outReturnCode = KmdSysman::KmdSysmanSuccess;
|
||||
} break;
|
||||
default: {
|
||||
pResponse->outDataSize = 0;
|
||||
pResponse->outReturnCode = KmdSysman::KmdSysmanFail;
|
||||
|
||||
@@ -160,7 +160,7 @@ TEST_F(SysmanDeviceFanFixture, GivenValidFanHandleWhenGettingFanPropertiesAllowS
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(SysmanDeviceFanFixture, GivenValidFanHandleWhenGettingFanConfigThenUnsupportedIsReturned) {
|
||||
TEST_F(SysmanDeviceFanFixture, GivenValidFanHandleWhenGettingFanConfigThenSuccessIsReturnedDefaultFanTable) {
|
||||
// Setting allow set calls or not
|
||||
init(true, true);
|
||||
|
||||
@@ -168,7 +168,62 @@ TEST_F(SysmanDeviceFanFixture, GivenValidFanHandleWhenGettingFanConfigThenUnsupp
|
||||
|
||||
for (auto handle : handles) {
|
||||
zes_fan_config_t fanConfig;
|
||||
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zesFanGetConfig(handle, &fanConfig));
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zesFanSetDefaultMode(handle));
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zesFanGetConfig(handle, &fanConfig));
|
||||
EXPECT_EQ(fanConfig.mode, ZES_FAN_SPEED_MODE_DEFAULT);
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(SysmanDeviceFanFixture, GivenValidFanHandleWhenGettingFanConfigThenFirstSingleRequestFails) {
|
||||
// Setting allow set calls or not
|
||||
init(true, true);
|
||||
|
||||
auto handles = getFanHandles();
|
||||
|
||||
pKmdSysManager->mockRequestSingle = TRUE;
|
||||
pKmdSysManager->mockRequestSingleResult = ZE_RESULT_ERROR_NOT_AVAILABLE;
|
||||
|
||||
for (auto handle : handles) {
|
||||
zes_fan_config_t fanConfig;
|
||||
EXPECT_EQ(ZE_RESULT_ERROR_NOT_AVAILABLE, zesFanGetConfig(handle, &fanConfig));
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(SysmanDeviceFanFixture, GivenValidFanHandleWhenGettingFanConfigWithValidFanPointsSuccessCustomFanTable) {
|
||||
// Setting allow set calls or not
|
||||
init(true, true);
|
||||
|
||||
auto handles = getFanHandles();
|
||||
|
||||
for (auto handle : handles) {
|
||||
zes_fan_speed_table_t fanSpeedTable = {0};
|
||||
fanSpeedTable.numPoints = 4;
|
||||
fanSpeedTable.table[0].speed.speed = 65;
|
||||
fanSpeedTable.table[0].speed.units = ZES_FAN_SPEED_UNITS_PERCENT;
|
||||
fanSpeedTable.table[0].temperature = 30;
|
||||
|
||||
fanSpeedTable.table[1].speed.speed = 75;
|
||||
fanSpeedTable.table[1].speed.units = ZES_FAN_SPEED_UNITS_PERCENT;
|
||||
fanSpeedTable.table[1].temperature = 45;
|
||||
|
||||
fanSpeedTable.table[2].speed.speed = 85;
|
||||
fanSpeedTable.table[2].speed.units = ZES_FAN_SPEED_UNITS_PERCENT;
|
||||
fanSpeedTable.table[2].temperature = 60;
|
||||
|
||||
fanSpeedTable.table[3].speed.speed = 100;
|
||||
fanSpeedTable.table[3].speed.units = ZES_FAN_SPEED_UNITS_PERCENT;
|
||||
fanSpeedTable.table[3].temperature = 90;
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zesFanSetSpeedTableMode(handle, &fanSpeedTable));
|
||||
|
||||
zes_fan_config_t fanConfig;
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zesFanGetConfig(handle, &fanConfig));
|
||||
EXPECT_EQ(fanConfig.mode, ZES_FAN_SPEED_MODE_TABLE);
|
||||
EXPECT_EQ(fanConfig.speedTable.numPoints, 4);
|
||||
EXPECT_EQ(fanConfig.speedTable.table[0].speed.units, ZES_FAN_SPEED_UNITS_PERCENT);
|
||||
EXPECT_EQ(fanConfig.speedTable.table[1].speed.units, ZES_FAN_SPEED_UNITS_PERCENT);
|
||||
EXPECT_EQ(fanConfig.speedTable.table[2].speed.units, ZES_FAN_SPEED_UNITS_PERCENT);
|
||||
EXPECT_EQ(fanConfig.speedTable.table[3].speed.units, ZES_FAN_SPEED_UNITS_PERCENT);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user