Bug #557 » acpi-test-4.diff
| acpi_cpu.c 4 Mar 2007 16:51:20 -0000 | ||
|---|---|---|
|
DRIVER_MODULE(cpu, acpi, acpi_cpu_driver, acpi_cpu_devclass, 0, 0);
|
||
|
MODULE_DEPEND(cpu, acpi, 1, 1, 1);
|
||
|
static int acpi_cpu_probe_debug_knob = 0;
|
||
|
TUNABLE_INT("debug.acpi.cpu.knob", &acpi_cpu_probe_debug_knob);
|
||
|
#define DEBUG_KNOB(n) \
|
||
|
if (acpi_cpu_probe_debug_knob == (n)) return(ENXIO)
|
||
|
static int
|
||
|
acpi_cpu_probe(device_t dev)
|
||
|
{
|
||
|
int acpi_id, cpu_id, cx_count;
|
||
|
int acpi_id, cpu_id, proc_id, cx_count;
|
||
|
ACPI_BUFFER buf;
|
||
|
ACPI_HANDLE handle;
|
||
|
char msg[32];
|
||
| ... | ... | |
|
* ProcId as a key, however, some boxes do not have the same values
|
||
|
* in their Processor object as the ProcId values in the MADT.
|
||
|
*/
|
||
|
acpi_id = obj->Processor.ProcId;
|
||
|
acpi_id = proc_id = obj->Processor.ProcId;
|
||
|
AcpiOsFree(obj);
|
||
|
if (acpi_pcpu_get_id(device_get_unit(dev), &acpi_id, &cpu_id) != 0)
|
||
|
if (acpi_pcpu_get_id(device_get_unit(dev), &acpi_id, &cpu_id) != 0) {
|
||
|
if (bootverbose)
|
||
|
device_printf(dev, "ProcId %d: can't find cpu_id\n", proc_id);
|
||
|
return (ENXIO);
|
||
|
}
|
||
|
if (bootverbose) {
|
||
|
device_printf(dev, "ProcId %d: acpi_id=%d, cpu_id=%d\n", proc_id,
|
||
|
acpi_id, cpu_id);
|
||
|
}
|
||
|
/*
|
||
|
* Check if we already probed this processor. We scan the bus twice
|
||
|
* so it's possible we've already seen this one.
|
||
| ... | ... | |
|
* Probe for throttling and Cx state support.
|
||
|
* If none of these is present, free up unused resources.
|
||
|
*/
|
||
|
DEBUG_KNOB(1);
|
||
|
thr_ret = acpi_cpu_throttle_probe(sc);
|
||
|
DEBUG_KNOB(2);
|
||
|
cx_ret = acpi_cpu_cx_probe(sc);
|
||
|
DEBUG_KNOB(3);
|
||
|
if (thr_ret == 0 || cx_ret == 0) {
|
||
|
status = AcpiInstallNotifyHandler(sc->cpu_handle, ACPI_DEVICE_NOTIFY,
|
||
|
acpi_cpu_notify, sc);
|
||
|
DEBUG_KNOB(4);
|
||
|
if (device_get_unit(dev) == 0)
|
||
|
AcpiOsExecute(OSL_NOTIFY_HANDLER, acpi_cpu_startup, NULL);
|
||
|
} else {
|
||
|
sysctl_ctx_free(&acpi_cpu_sysctl_ctx);
|
||
|
}
|
||
|
DEBUG_KNOB(5);
|
||
|
return_VALUE (0);
|
||
|
}
|
||
|
#undef DEBUG_KNOB
|
||
|
/*
|
||
|
* Find the nth present CPU and return its pc_cpuid as well as set the
|
||
- « Previous
- 1
- …
- 6
- 7
- 8
- Next »