Lines Matching refs:dev
97 static int __clockevents_set_state(struct clock_event_device *dev, in __clockevents_set_state() argument
101 if (dev->set_mode) { in __clockevents_set_state()
109 dev->set_mode((enum clock_event_mode)state, dev); in __clockevents_set_state()
110 dev->mode = (enum clock_event_mode)state; in __clockevents_set_state()
114 if (dev->features & CLOCK_EVT_FEAT_DUMMY) in __clockevents_set_state()
123 return dev->set_state_shutdown(dev); in __clockevents_set_state()
127 if (!(dev->features & CLOCK_EVT_FEAT_PERIODIC)) in __clockevents_set_state()
129 return dev->set_state_periodic(dev); in __clockevents_set_state()
133 if (!(dev->features & CLOCK_EVT_FEAT_ONESHOT)) in __clockevents_set_state()
135 return dev->set_state_oneshot(dev); in __clockevents_set_state()
149 void clockevents_set_state(struct clock_event_device *dev, in clockevents_set_state() argument
152 if (dev->state != state) { in clockevents_set_state()
153 if (__clockevents_set_state(dev, state)) in clockevents_set_state()
156 dev->state = state; in clockevents_set_state()
163 if (unlikely(!dev->mult)) { in clockevents_set_state()
164 dev->mult = 1; in clockevents_set_state()
175 void clockevents_shutdown(struct clock_event_device *dev) in clockevents_shutdown() argument
177 clockevents_set_state(dev, CLOCK_EVT_STATE_SHUTDOWN); in clockevents_shutdown()
178 dev->next_event.tv64 = KTIME_MAX; in clockevents_shutdown()
185 int clockevents_tick_resume(struct clock_event_device *dev) in clockevents_tick_resume() argument
189 if (dev->set_mode) { in clockevents_tick_resume()
190 dev->set_mode(CLOCK_EVT_MODE_RESUME, dev); in clockevents_tick_resume()
191 dev->mode = CLOCK_EVT_MODE_RESUME; in clockevents_tick_resume()
192 } else if (dev->tick_resume) { in clockevents_tick_resume()
193 ret = dev->tick_resume(dev); in clockevents_tick_resume()
210 static int clockevents_increase_min_delta(struct clock_event_device *dev) in clockevents_increase_min_delta() argument
213 if (dev->min_delta_ns >= MIN_DELTA_LIMIT) { in clockevents_increase_min_delta()
216 dev->next_event.tv64 = KTIME_MAX; in clockevents_increase_min_delta()
220 if (dev->min_delta_ns < 5000) in clockevents_increase_min_delta()
221 dev->min_delta_ns = 5000; in clockevents_increase_min_delta()
223 dev->min_delta_ns += dev->min_delta_ns >> 1; in clockevents_increase_min_delta()
225 if (dev->min_delta_ns > MIN_DELTA_LIMIT) in clockevents_increase_min_delta()
226 dev->min_delta_ns = MIN_DELTA_LIMIT; in clockevents_increase_min_delta()
230 dev->name ? dev->name : "?", in clockevents_increase_min_delta()
231 (unsigned long long) dev->min_delta_ns); in clockevents_increase_min_delta()
241 static int clockevents_program_min_delta(struct clock_event_device *dev) in clockevents_program_min_delta() argument
248 delta = dev->min_delta_ns; in clockevents_program_min_delta()
249 dev->next_event = ktime_add_ns(ktime_get(), delta); in clockevents_program_min_delta()
251 if (dev->state == CLOCK_EVT_STATE_SHUTDOWN) in clockevents_program_min_delta()
254 dev->retries++; in clockevents_program_min_delta()
255 clc = ((unsigned long long) delta * dev->mult) >> dev->shift; in clockevents_program_min_delta()
256 if (dev->set_next_event((unsigned long) clc, dev) == 0) in clockevents_program_min_delta()
265 if (clockevents_increase_min_delta(dev)) in clockevents_program_min_delta()
280 static int clockevents_program_min_delta(struct clock_event_device *dev) in clockevents_program_min_delta() argument
285 delta = dev->min_delta_ns; in clockevents_program_min_delta()
286 dev->next_event = ktime_add_ns(ktime_get(), delta); in clockevents_program_min_delta()
288 if (dev->state == CLOCK_EVT_STATE_SHUTDOWN) in clockevents_program_min_delta()
291 dev->retries++; in clockevents_program_min_delta()
292 clc = ((unsigned long long) delta * dev->mult) >> dev->shift; in clockevents_program_min_delta()
293 return dev->set_next_event((unsigned long) clc, dev); in clockevents_program_min_delta()
306 int clockevents_program_event(struct clock_event_device *dev, ktime_t expires, in clockevents_program_event() argument
318 dev->next_event = expires; in clockevents_program_event()
320 if (dev->state == CLOCK_EVT_STATE_SHUTDOWN) in clockevents_program_event()
324 if (dev->features & CLOCK_EVT_FEAT_KTIME) in clockevents_program_event()
325 return dev->set_next_ktime(expires, dev); in clockevents_program_event()
329 return force ? clockevents_program_min_delta(dev) : -ETIME; in clockevents_program_event()
331 delta = min(delta, (int64_t) dev->max_delta_ns); in clockevents_program_event()
332 delta = max(delta, (int64_t) dev->min_delta_ns); in clockevents_program_event()
334 clc = ((unsigned long long) delta * dev->mult) >> dev->shift; in clockevents_program_event()
335 rc = dev->set_next_event((unsigned long) clc, dev); in clockevents_program_event()
337 return (rc && force) ? clockevents_program_min_delta(dev) : rc; in clockevents_program_event()
346 struct clock_event_device *dev; in clockevents_notify_released() local
349 dev = list_entry(clockevents_released.next, in clockevents_notify_released()
351 list_del(&dev->list); in clockevents_notify_released()
352 list_add(&dev->list, &clockevent_devices); in clockevents_notify_released()
353 tick_check_new_device(dev); in clockevents_notify_released()
362 struct clock_event_device *dev, *newdev = NULL; in clockevents_replace() local
364 list_for_each_entry(dev, &clockevent_devices, list) { in clockevents_replace()
365 if (dev == ced || dev->state != CLOCK_EVT_STATE_DETACHED) in clockevents_replace()
368 if (!tick_check_replacement(newdev, dev)) in clockevents_replace()
371 if (!try_module_get(dev->owner)) in clockevents_replace()
376 newdev = dev; in clockevents_replace()
442 static int clockevents_sanity_check(struct clock_event_device *dev) in clockevents_sanity_check() argument
445 if (dev->set_mode) { in clockevents_sanity_check()
447 WARN_ON(dev->set_state_periodic || dev->set_state_oneshot || in clockevents_sanity_check()
448 dev->set_state_shutdown || dev->tick_resume); in clockevents_sanity_check()
450 BUG_ON(dev->mode != CLOCK_EVT_MODE_UNUSED); in clockevents_sanity_check()
454 if (dev->features & CLOCK_EVT_FEAT_DUMMY) in clockevents_sanity_check()
458 if (!dev->set_state_shutdown) in clockevents_sanity_check()
461 if ((dev->features & CLOCK_EVT_FEAT_PERIODIC) && in clockevents_sanity_check()
462 !dev->set_state_periodic) in clockevents_sanity_check()
465 if ((dev->features & CLOCK_EVT_FEAT_ONESHOT) && in clockevents_sanity_check()
466 !dev->set_state_oneshot) in clockevents_sanity_check()
476 void clockevents_register_device(struct clock_event_device *dev) in clockevents_register_device() argument
480 BUG_ON(clockevents_sanity_check(dev)); in clockevents_register_device()
483 dev->state = CLOCK_EVT_STATE_DETACHED; in clockevents_register_device()
485 if (!dev->cpumask) { in clockevents_register_device()
487 dev->cpumask = cpumask_of(smp_processor_id()); in clockevents_register_device()
492 list_add(&dev->list, &clockevent_devices); in clockevents_register_device()
493 tick_check_new_device(dev); in clockevents_register_device()
500 void clockevents_config(struct clock_event_device *dev, u32 freq) in clockevents_config() argument
504 if (!(dev->features & CLOCK_EVT_FEAT_ONESHOT)) in clockevents_config()
512 sec = dev->max_delta_ticks; in clockevents_config()
516 else if (sec > 600 && dev->max_delta_ticks > UINT_MAX) in clockevents_config()
519 clockevents_calc_mult_shift(dev, freq, sec); in clockevents_config()
520 dev->min_delta_ns = cev_delta2ns(dev->min_delta_ticks, dev, false); in clockevents_config()
521 dev->max_delta_ns = cev_delta2ns(dev->max_delta_ticks, dev, true); in clockevents_config()
533 void clockevents_config_and_register(struct clock_event_device *dev, in clockevents_config_and_register() argument
537 dev->min_delta_ticks = min_delta; in clockevents_config_and_register()
538 dev->max_delta_ticks = max_delta; in clockevents_config_and_register()
539 clockevents_config(dev, freq); in clockevents_config_and_register()
540 clockevents_register_device(dev); in clockevents_config_and_register()
544 int __clockevents_update_freq(struct clock_event_device *dev, u32 freq) in __clockevents_update_freq() argument
546 clockevents_config(dev, freq); in __clockevents_update_freq()
548 if (dev->state == CLOCK_EVT_STATE_ONESHOT) in __clockevents_update_freq()
549 return clockevents_program_event(dev, dev->next_event, false); in __clockevents_update_freq()
551 if (dev->state == CLOCK_EVT_STATE_PERIODIC) in __clockevents_update_freq()
552 return __clockevents_set_state(dev, CLOCK_EVT_STATE_PERIODIC); in __clockevents_update_freq()
569 int clockevents_update_freq(struct clock_event_device *dev, u32 freq) in clockevents_update_freq() argument
575 ret = tick_broadcast_update_freq(dev, freq); in clockevents_update_freq()
577 ret = __clockevents_update_freq(dev, freq); in clockevents_update_freq()
585 void clockevents_handle_noop(struct clock_event_device *dev) in clockevents_handle_noop() argument
622 struct clock_event_device *dev; in clockevents_suspend() local
624 list_for_each_entry_reverse(dev, &clockevent_devices, list) in clockevents_suspend()
625 if (dev->suspend) in clockevents_suspend()
626 dev->suspend(dev); in clockevents_suspend()
634 struct clock_event_device *dev; in clockevents_resume() local
636 list_for_each_entry(dev, &clockevent_devices, list) in clockevents_resume()
637 if (dev->resume) in clockevents_resume()
638 dev->resume(dev); in clockevents_resume()
647 struct clock_event_device *dev, *tmp; in tick_cleanup_dead_cpu() local
659 list_for_each_entry_safe(dev, tmp, &clockevents_released, list) in tick_cleanup_dead_cpu()
660 list_del(&dev->list); in tick_cleanup_dead_cpu()
664 list_for_each_entry_safe(dev, tmp, &clockevent_devices, list) { in tick_cleanup_dead_cpu()
665 if (cpumask_test_cpu(cpu, dev->cpumask) && in tick_cleanup_dead_cpu()
666 cpumask_weight(dev->cpumask) == 1 && in tick_cleanup_dead_cpu()
667 !tick_is_broadcast_device(dev)) { in tick_cleanup_dead_cpu()
668 BUG_ON(dev->state != CLOCK_EVT_STATE_DETACHED); in tick_cleanup_dead_cpu()
669 list_del(&dev->list); in tick_cleanup_dead_cpu()
683 static struct tick_device *tick_get_tick_dev(struct device *dev);
685 static ssize_t sysfs_show_current_tick_dev(struct device *dev, in sysfs_show_current_tick_dev() argument
693 td = tick_get_tick_dev(dev); in sysfs_show_current_tick_dev()
702 static ssize_t sysfs_unbind_tick_dev(struct device *dev, in sysfs_unbind_tick_dev() argument
718 ret = __clockevents_try_unbind(ce, dev->id); in sysfs_unbind_tick_dev()
727 ret = clockevents_unbind(ce, dev->id); in sysfs_unbind_tick_dev()
740 static struct tick_device *tick_get_tick_dev(struct device *dev) in tick_get_tick_dev() argument
742 return dev == &tick_bc_dev ? tick_get_broadcast_device() : in tick_get_tick_dev()
743 &per_cpu(tick_cpu_device, dev->id); in tick_get_tick_dev()
755 static struct tick_device *tick_get_tick_dev(struct device *dev) in tick_get_tick_dev() argument
757 return &per_cpu(tick_cpu_device, dev->id); in tick_get_tick_dev()
767 struct device *dev = &per_cpu(tick_percpu_dev, cpu); in tick_init_sysfs() local
770 dev->id = cpu; in tick_init_sysfs()
771 dev->bus = &clockevents_subsys; in tick_init_sysfs()
772 err = device_register(dev); in tick_init_sysfs()
774 err = device_create_file(dev, &dev_attr_current_device); in tick_init_sysfs()
776 err = device_create_file(dev, &dev_attr_unbind_device); in tick_init_sysfs()