1 /*
2  * Copyright (C) 2020-2021 Intel Corporation
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  */
7 
8 #pragma once
9 #include "level_zero/core/test/unit_tests/mock.h"
10 #include "level_zero/tools/test/unit_tests/sources/sysman/windows/mock_kmd_sys_manager.h"
11 
12 #include "sysman/fan/fan_imp.h"
13 
14 namespace L0 {
15 namespace ult {
16 
17 class FanKmdSysManager : public Mock<MockKmdSysManager> {};
18 
19 template <>
20 struct Mock<FanKmdSysManager> : public FanKmdSysManager {
21 
22     uint32_t mockFanMaxPoints = 10;
23     uint32_t mockFanCurrentPulses = 523436;
24     uint32_t mockFanCurrentFanPoints = 0;
25 
26     void getFanProperty(KmdSysman::GfxSysmanReqHeaderIn *pRequest, KmdSysman::GfxSysmanReqHeaderOut *pResponse) override {
27         uint8_t *pBuffer = reinterpret_cast<uint8_t *>(pResponse);
28         pBuffer += sizeof(KmdSysman::GfxSysmanReqHeaderOut);
29 
30         switch (pRequest->inRequestId) {
31         case KmdSysman::Requests::Fans::MaxFanControlPointsSupported: {
32             uint32_t *pValue = reinterpret_cast<uint32_t *>(pBuffer);
33             *pValue = mockFanMaxPoints;
34             pResponse->outReturnCode = KmdSysman::KmdSysmanSuccess;
35             pResponse->outDataSize = sizeof(uint32_t);
36         } break;
37         case KmdSysman::Requests::Fans::CurrentFanSpeed: {
38             if (fanSupported) {
39                 uint32_t *pValue = reinterpret_cast<uint32_t *>(pBuffer);
40                 *pValue = mockFanCurrentPulses;
41                 pResponse->outReturnCode = KmdSysman::KmdSysmanSuccess;
42                 pResponse->outDataSize = sizeof(uint32_t);
43             } else {
44                 pResponse->outDataSize = 0;
45                 pResponse->outReturnCode = KmdSysman::KmdSysmanFail;
46             }
47         } break;
48         default: {
49             pResponse->outDataSize = 0;
50             pResponse->outReturnCode = KmdSysman::KmdSysmanFail;
51         } break;
52         }
53     }
54 
55     void setFanProperty(KmdSysman::GfxSysmanReqHeaderIn *pRequest, KmdSysman::GfxSysmanReqHeaderOut *pResponse) override {
56         uint8_t *pBuffer = reinterpret_cast<uint8_t *>(pRequest);
57         pBuffer += sizeof(KmdSysman::GfxSysmanReqHeaderIn);
58 
59         switch (pRequest->inRequestId) {
60         case KmdSysman::Requests::Fans::CurrentNumOfControlPoints: {
61             uint32_t *pValue = reinterpret_cast<uint32_t *>(pBuffer);
62             mockFanCurrentFanPoints = *pValue;
63             pResponse->outDataSize = 0;
64             pResponse->outReturnCode = KmdSysman::KmdSysmanSuccess;
65         } break;
66         default: {
67             pResponse->outDataSize = 0;
68             pResponse->outReturnCode = KmdSysman::KmdSysmanFail;
69         } break;
70         }
71     }
72 
73     Mock() = default;
74     ~Mock() = default;
75 };
76 
77 } // namespace ult
78 } // namespace L0
79