static int __init init_acpi_pm_clocksource(void) { u32 value1, value2; unsigned int i; if (!pmtmr_ioport) return -ENODEV; clocksource_acpi_pm.mult = clocksource_hz2mult(PMTMR_TICKS_PER_SEC, clocksource_acpi_pm.shift); /* "verify" this timing source: */ value1 = read_pmtmr(); for (i = 0; i < 10000; i++) { value2 = read_pmtmr(); if (value2 == value1) continue; if (value2 > value1) goto pm_good; if ((value2 < value1) && ((value2) < 0xFFF)) goto pm_good; printk(KERN_INFO "PM-Timer had inconsistent results:" " 0x%#x, 0x%#x - aborting.\n", value1, value2); return -EINVAL; } printk(KERN_INFO "PM-Timer had no reasonable result:" " 0x%#x - aborting.\n", value1); return -ENODEV; pm_good: if (verify_pmtmr_rate() != 0) return -ENODEV; return clocksource_register(&clocksource_acpi_pm); }
static int __init init_acpi_pm_clocksource(void) { cycle_t value1, value2; unsigned int i, j = 0; if (!pmtmr_ioport) return -ENODEV; /* "verify" this timing source: */ for (j = 0; j < ACPI_PM_MONOTONICITY_CHECKS; j++) { udelay(100 * j); value1 = clocksource_acpi_pm.read(&clocksource_acpi_pm); for (i = 0; i < ACPI_PM_READ_CHECKS; i++) { value2 = clocksource_acpi_pm.read(&clocksource_acpi_pm); if (value2 == value1) continue; if (value2 > value1) break; if ((value2 < value1) && ((value2) < 0xFFF)) break; #ifdef CONFIG_DEBUG_PRINTK printk(KERN_INFO "PM-Timer had inconsistent results:" " 0x%#llx, 0x%#llx - aborting.\n", value1, value2); #else ; #endif pmtmr_ioport = 0; return -EINVAL; } if (i == ACPI_PM_READ_CHECKS) { #ifdef CONFIG_DEBUG_PRINTK printk(KERN_INFO "PM-Timer failed consistency check " " (0x%#llx) - aborting.\n", value1); #else ; #endif pmtmr_ioport = 0; return -ENODEV; } } if (verify_pmtmr_rate() != 0){ pmtmr_ioport = 0; return -ENODEV; } return clocksource_register_hz(&clocksource_acpi_pm, PMTMR_TICKS_PER_SEC); }
static int __init init_acpi_pm_clocksource(void) { cycle_t value1, value2; unsigned int i, j = 0; if (!pmtmr_ioport) return -ENODEV; clocksource_acpi_pm.mult = clocksource_hz2mult(PMTMR_TICKS_PER_SEC, clocksource_acpi_pm.shift); for (j = 0; j < ACPI_PM_MONOTONICITY_CHECKS; j++) { udelay(100 * j); value1 = clocksource_acpi_pm.read(&clocksource_acpi_pm); for (i = 0; i < ACPI_PM_READ_CHECKS; i++) { value2 = clocksource_acpi_pm.read(&clocksource_acpi_pm); if (value2 == value1) continue; if (value2 > value1) break; if ((value2 < value1) && ((value2) < 0xFFF)) break; printk(KERN_INFO "PM-Timer had inconsistent results:" " 0x%#llx, 0x%#llx - aborting.\n", value1, value2); return -EINVAL; } if (i == ACPI_PM_READ_CHECKS) { printk(KERN_INFO "PM-Timer failed consistency check " " (0x%#llx) - aborting.\n", value1); return -ENODEV; } } if (verify_pmtmr_rate() != 0) return -ENODEV; return clocksource_register(&clocksource_acpi_pm); }