| // Copyright 2021 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_POWER_METRICS_SMC_INTERNAL_TYPES_MAC_H_ |
| #define COMPONENTS_POWER_METRICS_SMC_INTERNAL_TYPES_MAC_H_ |
| |
| #import <Foundation/Foundation.h> |
| #include <stdint.h> |
| |
| // List of known SMC key identifiers. |
| // |
| // This is a good reference: https://logi.wiki/index.php/SMC_Sensor_Codes |
| // Additional keys can be discovered with |
| // https://github.com/theopolis/smc-fuzzer |
| enum class SMCKeyIdentifier : uint32_t { |
| TotalPower = 'PSTR', // Power: System Total Rail (watts) |
| CPUPower = 'PCPC', // Power: CPU Package CPU (watts) |
| iGPUPower = 'PCPG', // Power: CPU Package GPU (watts) |
| GPU0Power = 'PG0R', // Power: GPU 0 Rail (watts) |
| GPU1Power = 'PG1R', // Power: GPU 1 Rail (watts) |
| CPUTemperature = 'TC0F', // Temperature: CPU Die PECI (Celsius) |
| }; |
| |
| // Types from PowerManagement/pmconfigd/PrivateLib.c |
| // (https://opensource.apple.com/source/PowerManagement/PowerManagement-494.1.2/pmconfigd/PrivateLib.c.auto.html) |
| struct SMCVersion { |
| unsigned char major; |
| unsigned char minor; |
| unsigned char build; |
| unsigned char reserved; |
| unsigned short release; |
| }; |
| |
| struct SMCPLimitData { |
| uint16_t version; |
| uint16_t length; |
| uint32_t cpuPLimit; |
| uint32_t gpuPLimit; |
| uint32_t memPLimit; |
| }; |
| |
| enum class SMCDataType : uint32_t { |
| flt = 'flt ', // Floating point |
| sp78 = 'sp78', // Fixed point: SIIIIIIIFFFFFFFF |
| sp87 = 'sp87', // Fixed point: SIIIIIIIIFFFFFFF |
| spa5 = 'spa5', // Fixed point: SIIIIIIIIIIFFFFF |
| }; |
| |
| struct SMCKeyInfoData { |
| IOByteCount dataSize; |
| SMCDataType dataType; |
| uint8_t dataAttributes; |
| }; |
| |
| struct SMCParamStruct { |
| SMCKeyIdentifier key; |
| SMCVersion vers; |
| SMCPLimitData pLimitData; |
| SMCKeyInfoData keyInfo; |
| uint8_t result; |
| uint8_t status; |
| uint8_t data8; |
| uint32_t data32; |
| uint8_t bytes[32]; |
| }; |
| |
| enum { |
| kSMCUserClientOpen = 0, |
| kSMCUserClientClose = 1, |
| kSMCHandleYPCEvent = 2, |
| kSMCReadKey = 5, |
| kSMCWriteKey = 6, |
| kSMCGetKeyCount = 7, |
| kSMCGetKeyFromIndex = 8, |
| kSMCGetKeyInfo = 9 |
| }; |
| |
| #endif // COMPONENTS_POWER_METRICS_SMC_INTERNAL_TYPES_MAC_H_ |