#include <mach/mach_types.h>
#include <mach/mach_host.h>
#include <kern/host.h>
#include <kern/processor.h>
#include <kern/cpu_data.h>
#include <kern/machine.h>
#include <machine/machine_routines.h>
#include <chud/chud_xnu.h>
#if 0
#pragma mark **** cpu count ****
#endif
__private_extern__ int
chudxnu_logical_cpu_count(void)
{
return machine_info.logical_cpu_max;
}
__private_extern__ int
chudxnu_phys_cpu_count(void)
{
host_basic_info_data_t hinfo;
kern_return_t kr;
mach_msg_type_number_t count = HOST_BASIC_INFO_COUNT;
kr = host_info(host_self(), HOST_BASIC_INFO, (integer_t *)&hinfo, &count);
if(kr == KERN_SUCCESS) {
return hinfo.max_cpus;
} else {
return 1; }
}
__private_extern__ int
chudxnu_cpu_number(void)
{
return cpu_number();
}
#if 0
#pragma mark **** interrupts enable/disable ****
#endif
__private_extern__ boolean_t
chudxnu_get_interrupts_enabled(void)
{
return ml_get_interrupts_enabled();
}
__private_extern__ boolean_t
chudxnu_set_interrupts_enabled(boolean_t enable)
{
return ml_set_interrupts_enabled(enable);
}
__private_extern__ boolean_t
chudxnu_at_interrupt_context(void)
{
return ml_at_interrupt_context();
}
__private_extern__ void
chudxnu_cause_interrupt(void)
{
ml_cause_interrupt();
}
#if 0
#pragma mark **** preemption enable/disable ****
#endif
__private_extern__ void
chudxnu_enable_preemption(void)
{
enable_preemption();
}
__private_extern__ void
chudxnu_disable_preemption(void)
{
disable_preemption();
}
__private_extern__ int
chudxnu_get_preemption_level(void)
{
return get_preemption_level();
}