1 /* 2 * Copyright 2012, Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef _CPUIDLE_MODULE_H 6 #define _CPUIDLE_MODULE_H 7 8 9 #include <module.h> 10 11 #ifdef __cplusplus 12 extern "C" { 13 #endif 14 15 #define CPUIDLE_CSTATE_MAX 8 16 #define CSTATE_NAME_LENGTH 32 17 #define B_CPUIDLE_MODULE_NAME "generic/cpuidle/v1" 18 19 20 struct CpuidleStat { 21 uint64 usageCount; 22 bigtime_t usageTime; 23 }; 24 25 26 struct CpuidleInfo { 27 int32 cstateSleep; 28 CpuidleStat stats[CPUIDLE_CSTATE_MAX]; 29 }; 30 31 struct CpuidleDevice; 32 33 struct CpuidleCstate { 34 char name[CSTATE_NAME_LENGTH]; 35 int32 latency; 36 int32 (*EnterIdle)(int32 state, CpuidleDevice *device); 37 void *pData; 38 }; 39 40 41 struct CpuidleDevice { 42 CpuidleCstate cStates[CPUIDLE_CSTATE_MAX]; 43 int32 cStateCount; 44 }; 45 46 47 struct CpuidleModuleInfo { 48 module_info info; 49 status_t (*AddDevice)(CpuidleDevice *device); 50 }; 51 52 53 #ifdef __cplusplus 54 } 55 #endif 56 57 #endif // _CPUIDLE_MODULE_H 58