int geode_mfgpt_alloc_timer(int timer, int domain) { int i; if (timers == -1) { /* timers haven't been detected yet */ geode_mfgpt_detect(); } if (!timers) return -1; if (timer >= MFGPT_MAX_TIMERS) return -1; if (timer < 0) { /* Try to find an available timer */ for (i = 0; i < MFGPT_MAX_TIMERS; i++) { if (mfgpt_timers[i].avail) return mfgpt_get(i); if (i == 5 && domain == MFGPT_DOMAIN_WORKING) break; } } else { /* If they requested a specific timer, try to honor that */ if (mfgpt_timers[timer].avail) return mfgpt_get(timer); } /* No timers available - too bad */ return -1; }
static int __init geode_southbridge_init(void) { int timers; if (!is_geode()) return -ENODEV; init_lbars(); timers = geode_mfgpt_detect(); printk(KERN_INFO "geode: %d MFGPT timers available.\n", timers); return 0; }