@@ -23,8 +23,9 @@ ze_result_t WddmFanImp::getProperties(zes_fan_properties_t *pProperties) {
2323 pProperties->onSubdevice = false ;
2424 pProperties->subdeviceId = 0 ;
2525
26- KmdSysman::RequestProperty request;
27- KmdSysman::ResponseProperty response;
26+ std::vector<KmdSysman::RequestProperty> vRequests = {};
27+ std::vector<KmdSysman::ResponseProperty> vResponses = {};
28+ KmdSysman::RequestProperty request = {};
2829
2930 request.commandId = KmdSysman::Command::Set;
3031 request.componentId = KmdSysman::Component::FanComponent;
@@ -34,23 +35,27 @@ ze_result_t WddmFanImp::getProperties(zes_fan_properties_t *pProperties) {
3435 uint32_t FanPoints = 2 ;
3536 memcpy_s (request.dataBuffer , sizeof (uint32_t ), &FanPoints, sizeof (uint32_t ));
3637
37- ze_result_t status = pKmdSysManager-> requestSingle (request, response );
38+ vRequests. push_back (request);
3839
39- pProperties->canControl = (status == ZE_RESULT_SUCCESS);
4040 request.dataSize = 0 ;
4141 memset (request.dataBuffer , request.dataSize , sizeof (request.dataBuffer ));
42-
4342 request.commandId = KmdSysman::Command::Get;
4443 request.requestId = KmdSysman::Requests::Fans::MaxFanControlPointsSupported;
4544
46- status = pKmdSysManager-> requestSingle (request, response );
45+ vRequests. push_back (request);
4746
48- if (status != ZE_RESULT_SUCCESS) {
47+ ze_result_t status = pKmdSysManager->requestMultiple (vRequests, vResponses);
48+
49+ if ((status != ZE_RESULT_SUCCESS) || (vResponses.size () != vRequests.size ())) {
4950 return status;
5051 }
5152
52- memcpy_s (&FanPoints, sizeof (uint32_t ), response.dataBuffer , sizeof (uint32_t ));
53- pProperties->maxPoints = maxPoints = static_cast <int32_t >(FanPoints);
53+ pProperties->canControl = (vResponses[0 ].returnCode == KmdSysman::Success);
54+
55+ if (vResponses[1 ].returnCode == KmdSysman::Success) {
56+ memcpy_s (&FanPoints, sizeof (uint32_t ), vResponses[1 ].dataBuffer , sizeof (uint32_t ));
57+ pProperties->maxPoints = maxPoints = static_cast <int32_t >(FanPoints);
58+ }
5459 pProperties->maxRPM = -1 ;
5560 pProperties->supportedModes = zes_fan_speed_mode_t ::ZES_FAN_SPEED_MODE_TABLE;
5661 pProperties->supportedUnits = zes_fan_speed_units_t ::ZES_FAN_SPEED_UNITS_PERCENT;
@@ -80,38 +85,31 @@ ze_result_t WddmFanImp::setSpeedTableMode(const zes_fan_speed_table_t *pSpeedTab
8085 }
8186 }
8287
83- KmdSysman::RequestProperty request;
84- KmdSysman::ResponseProperty response;
88+ std::vector<KmdSysman::RequestProperty> vRequests = {};
89+ std::vector<KmdSysman::ResponseProperty> vResponses = {};
90+ KmdSysman::RequestProperty request = {};
91+
8592 uint32_t value = pSpeedTable->numPoints ;
8693
8794 request.commandId = KmdSysman::Command::Set;
8895 request.componentId = KmdSysman::Component::FanComponent;
8996 request.requestId = KmdSysman::Requests::Fans::CurrentNumOfControlPoints;
9097 request.dataSize = sizeof (uint32_t );
91-
9298 memcpy_s (request.dataBuffer , sizeof (uint32_t ), &value, sizeof (uint32_t ));
93-
94- ze_result_t status = pKmdSysManager->requestSingle (request, response);
95-
96- if (status != ZE_RESULT_SUCCESS) {
97- return status;
98- }
99+ vRequests.push_back (request);
99100
100101 request.requestId = KmdSysman::Requests::Fans::CurrentFanPoint;
101-
102102 for (int32_t i = 0 ; i < pSpeedTable->numPoints ; i++) {
103- FanPoint point;
103+ FanPoint point = {} ;
104104 point.fanSpeedPercent = pSpeedTable->table [i].speed .speed ;
105105 point.temperatureDegreesCelsius = pSpeedTable->table [i].temperature ;
106106 value = point.data ;
107107 memcpy_s (request.dataBuffer , sizeof (uint32_t ), &value, sizeof (uint32_t ));
108- status = pKmdSysManager->requestSingle (request, response);
109- if (status != ZE_RESULT_SUCCESS) {
110- return status;
111- }
108+ vRequests.push_back (request);
112109 }
113110
114- return ZE_RESULT_SUCCESS;
111+ return pKmdSysManager->requestMultiple (vRequests, vResponses);
112+ ;
115113}
116114
117115ze_result_t WddmFanImp::getState (zes_fan_speed_units_t units, int32_t *pSpeed) {
@@ -141,7 +139,14 @@ ze_result_t WddmFanImp::getState(zes_fan_speed_units_t units, int32_t *pSpeed) {
141139}
142140
143141bool WddmFanImp::isFanModuleSupported () {
144- return true ;
142+ KmdSysman::RequestProperty request = {};
143+ KmdSysman::ResponseProperty response = {};
144+
145+ request.commandId = KmdSysman::Command::Get;
146+ request.componentId = KmdSysman::Component::FanComponent;
147+ request.requestId = KmdSysman::Requests::Fans::CurrentFanSpeed;
148+
149+ return (pKmdSysManager->requestSingle (request, response) == ZE_RESULT_SUCCESS);
145150}
146151
147152WddmFanImp::WddmFanImp (OsSysman *pOsSysman) {
0 commit comments