2012-07-04 23:28:43 +08:00
|
|
|
/*
|
|
|
|
* Copyright 2012, Haiku, Inc. All Rights Reserved.
|
|
|
|
* Distributed under the terms of the MIT License.
|
|
|
|
*/
|
|
|
|
#ifndef _CPUIDLE_MODULE_H
|
|
|
|
#define _CPUIDLE_MODULE_H
|
|
|
|
|
|
|
|
|
|
|
|
#include <module.h>
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define CPUIDLE_CSTATE_MAX 8
|
|
|
|
#define CSTATE_NAME_LENGTH 32
|
|
|
|
#define B_CPUIDLE_MODULE_NAME "idle/generic/cpuidle/v1"
|
|
|
|
|
|
|
|
|
2012-07-07 19:41:27 +08:00
|
|
|
struct CpuidleStat {
|
2012-07-04 23:28:43 +08:00
|
|
|
uint64 usageCount;
|
|
|
|
bigtime_t usageTime;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct CpuidleInfo {
|
2012-07-07 19:41:27 +08:00
|
|
|
int32 cstateSleep;
|
|
|
|
CpuidleStat stats[CPUIDLE_CSTATE_MAX];
|
2012-07-04 23:28:43 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct CpuidleCstate {
|
|
|
|
char name[CSTATE_NAME_LENGTH];
|
|
|
|
int32 latency;
|
|
|
|
int32 (*EnterIdle)(int32 state, CpuidleCstate *cstate);
|
|
|
|
void *pData;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct CpuidleModuleInfo {
|
|
|
|
module_info info;
|
|
|
|
CpuidleCstate cStates[CPUIDLE_CSTATE_MAX];
|
|
|
|
int32 cStateCount;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2012-07-07 21:52:56 +08:00
|
|
|
struct GenCpuidle {
|
|
|
|
module_info info;
|
|
|
|
int32 (*GetIdleStateCount)(void);
|
|
|
|
char * (*GetIdleStateName)(int32 state);
|
|
|
|
void (*GetIdleStateInfo)(int32 cpu, int32 state,
|
|
|
|
CpuidleStat *stat);
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2012-07-04 23:28:43 +08:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif // _CPUIDLE_MODULE_H
|