#ifndef _SYS_CPUDRV_MACH_H
#define _SYS_CPUDRV_MACH_H
#include <sys/cpuvar.h>
#include <sys/cpupm.h>
#include <sys/cpu_acpi.h>
#include <sys/cpudrv.h>
#include <sys/ksynch.h>
#ifdef __cplusplus
extern "C" {
#endif
extern cpuset_t cpu_ready_set;
#define CPUDRV_XCALL_IS_READY(cpuid) CPU_IN_SET(cpu_ready_set, (cpuid))
#define CPUDRV_RESET_GOVERNOR_THREAD(cpupm) { \
if (curthread == cpupm->pm_governor_thread) \
cpupm->pm_governor_thread = NULL; \
}
#define CPUDRV_TOPSPEED(cpupm) (cpupm)->top_spd
#define CPUDRV_INSTALL_MAX_CHANGE_HANDLER(cpudsp) \
cpudrv_install_notify_handler(cpudsp);
#define CPUDRV_UNINSTALL_MAX_CHANGE_HANDLER(cpudsp) \
cpudrv_uninstall_notify_handler(cpudsp);
#define CPUDRV_REDEFINE_TOPSPEED(dip) cpudrv_redefine_topspeed(dip)
#define CPUDRV_SET_PPM_CALLBACKS() { \
cpupm_get_topspeed_callb = cpudrv_get_topspeed; \
cpupm_set_topspeed_callb = cpudrv_set_topspeed; \
}
#define CPUDRV_GET_SPEEDS(cpudsp, speeds, nspeeds) \
nspeeds = cpudrv_get_speeds(cpudsp, &speeds);
#define CPUDRV_FREE_SPEEDS(speeds, nspeeds) \
cpudrv_free_speeds(speeds, nspeeds);
#define CPUDRV_GET_MAX_CSTATES(handle) \
cpu_acpi_get_max_cstates(handle);
#define CPUDRV_IDLE_CNT_PERCENT(hwm, speeds, i) \
(100 - (((100 - hwm) * speeds[0]) / speeds[i]))
#define CPUDRV_USER_CNT_PERCENT(hwm, speeds, i) \
((hwm * speeds[i]) / speeds[i - 1]);
#define CPUDRV_COMP_SIZE() \
(CPUDRV_COMP_MAX_DIG + 1 + CPUDRV_COMP_MAX_DIG + 3 + 1);
#define CPUDRV_COMP_SPEED(cpupm, cur_spd) cur_spd->speed;
#define CPUDRV_COMP_SPRINT(pmc, cpupm, cur_spd, comp_spd) \
(void) sprintf(pmc, "%d=%dMHz", cur_spd->pm_level, comp_spd);
extern void cpudrv_set_topspeed(void *, int);
extern int cpudrv_get_topspeed(void *);
extern int cpudrv_get_topthrottle(cpu_t *);
extern void cpudrv_manage_throttling(void *);
extern void cpudrv_install_notify_handler(cpudrv_devstate_t *);
extern void cpudrv_uninstall_notify_handler(cpudrv_devstate_t *);
extern void cpudrv_redefine_topspeed(void *);
extern uint_t cpudrv_get_speeds(cpudrv_devstate_t *, int **);
extern void cpudrv_free_speeds(int *, uint_t);
#ifdef __cplusplus
}
#endif
#endif