/* */ #include #include #include #include #include #include #include #include #include #include #include #include struct acpi_processor_performance p; union powernow_acpi_control_t { struct { unsigned long fid:5, vid:5, sgtc:20, res1:2; } bits; unsigned long val; }; #define ACPI_PDC_REVISION_ID 0x1 #define ACPI_PDC_CAPABILITY_ENHANCED_SPEEDSTEP 0x1 static int __init acpi_cpufreq_init (void) { unsigned int i; struct acpi_pct_register *r; union powernow_acpi_control_t pc; if (acpi_processor_register_performance(&p, 0)) return -EIO; printk("number of states: %d\n", p.state_count); for (i=0; i< p.state_count; i++) { pc.val = (unsigned long) p.states[i].control; printk(KERN_INFO "powernow: %cP%d: %d MHz, %d mW, %d uS, control %08x, status %08x, vid: %02x fid: %02x SGTC: %d\n", (i == p.state?'*':' '), i, (u32) p.states[i].core_frequency, (u32) p.states[i].power, (u32) p.states[i].transition_latency, (u32) p.states[i].control, (u32) p.states[i].status, pc.bits.vid, pc.bits.fid, pc.bits.sgtc); } printk("control_register:\n"); r = &p.control_register; printk("%d %d %d %d %d %d %lld\n", r->descriptor, r->length, r->space_id, r->bit_width, r->bit_offset, r->reserved, r->address); printk("status_register:\n"); r = &p.status_register; printk("%d %d %d %d %d %d %lld\n", r->descriptor, r->length, r->space_id, r->bit_width, r->bit_offset, r->reserved, r->address); acpi_processor_unregister_performance(&p, 0); return -ENODEV; } static void __exit acpi_cpufreq_exit (void) { return; } late_initcall(acpi_cpufreq_init); module_exit(acpi_cpufreq_exit);