Lines Matching refs:dev

91 static int __clockevents_switch_state(struct clock_event_device *dev,  in __clockevents_switch_state()  argument
94 if (dev->features & CLOCK_EVT_FEAT_DUMMY) in __clockevents_switch_state()
103 if (dev->set_state_shutdown) in __clockevents_switch_state()
104 return dev->set_state_shutdown(dev); in __clockevents_switch_state()
109 if (!(dev->features & CLOCK_EVT_FEAT_PERIODIC)) in __clockevents_switch_state()
111 if (dev->set_state_periodic) in __clockevents_switch_state()
112 return dev->set_state_periodic(dev); in __clockevents_switch_state()
117 if (!(dev->features & CLOCK_EVT_FEAT_ONESHOT)) in __clockevents_switch_state()
119 if (dev->set_state_oneshot) in __clockevents_switch_state()
120 return dev->set_state_oneshot(dev); in __clockevents_switch_state()
125 if (WARN_ONCE(!clockevent_state_oneshot(dev), in __clockevents_switch_state()
127 clockevent_get_state(dev))) in __clockevents_switch_state()
130 if (dev->set_state_oneshot_stopped) in __clockevents_switch_state()
131 return dev->set_state_oneshot_stopped(dev); in __clockevents_switch_state()
147 void clockevents_switch_state(struct clock_event_device *dev, in clockevents_switch_state() argument
150 if (clockevent_get_state(dev) != state) { in clockevents_switch_state()
151 if (__clockevents_switch_state(dev, state)) in clockevents_switch_state()
154 clockevent_set_state(dev, state); in clockevents_switch_state()
160 if (clockevent_state_oneshot(dev)) { in clockevents_switch_state()
161 if (WARN_ON(!dev->mult)) in clockevents_switch_state()
162 dev->mult = 1; in clockevents_switch_state()
171 void clockevents_shutdown(struct clock_event_device *dev) in clockevents_shutdown() argument
173 clockevents_switch_state(dev, CLOCK_EVT_STATE_SHUTDOWN); in clockevents_shutdown()
174 dev->next_event = KTIME_MAX; in clockevents_shutdown()
181 int clockevents_tick_resume(struct clock_event_device *dev) in clockevents_tick_resume() argument
185 if (dev->tick_resume) in clockevents_tick_resume()
186 ret = dev->tick_resume(dev); in clockevents_tick_resume()
202 static int clockevents_increase_min_delta(struct clock_event_device *dev) in clockevents_increase_min_delta() argument
205 if (dev->min_delta_ns >= MIN_DELTA_LIMIT) { in clockevents_increase_min_delta()
208 dev->next_event = KTIME_MAX; in clockevents_increase_min_delta()
212 if (dev->min_delta_ns < 5000) in clockevents_increase_min_delta()
213 dev->min_delta_ns = 5000; in clockevents_increase_min_delta()
215 dev->min_delta_ns += dev->min_delta_ns >> 1; in clockevents_increase_min_delta()
217 if (dev->min_delta_ns > MIN_DELTA_LIMIT) in clockevents_increase_min_delta()
218 dev->min_delta_ns = MIN_DELTA_LIMIT; in clockevents_increase_min_delta()
222 dev->name ? dev->name : "?", in clockevents_increase_min_delta()
223 (unsigned long long) dev->min_delta_ns); in clockevents_increase_min_delta()
233 static int clockevents_program_min_delta(struct clock_event_device *dev) in clockevents_program_min_delta() argument
240 delta = dev->min_delta_ns; in clockevents_program_min_delta()
241 dev->next_event = ktime_add_ns(ktime_get(), delta); in clockevents_program_min_delta()
243 if (clockevent_state_shutdown(dev)) in clockevents_program_min_delta()
246 dev->retries++; in clockevents_program_min_delta()
247 clc = ((unsigned long long) delta * dev->mult) >> dev->shift; in clockevents_program_min_delta()
248 if (dev->set_next_event((unsigned long) clc, dev) == 0) in clockevents_program_min_delta()
257 if (clockevents_increase_min_delta(dev)) in clockevents_program_min_delta()
272 static int clockevents_program_min_delta(struct clock_event_device *dev) in clockevents_program_min_delta() argument
279 delta += dev->min_delta_ns; in clockevents_program_min_delta()
280 dev->next_event = ktime_add_ns(ktime_get(), delta); in clockevents_program_min_delta()
282 if (clockevent_state_shutdown(dev)) in clockevents_program_min_delta()
285 dev->retries++; in clockevents_program_min_delta()
286 clc = ((unsigned long long) delta * dev->mult) >> dev->shift; in clockevents_program_min_delta()
287 if (dev->set_next_event((unsigned long) clc, dev) == 0) in clockevents_program_min_delta()
303 int clockevents_program_event(struct clock_event_device *dev, ktime_t expires, in clockevents_program_event() argument
313 dev->next_event = expires; in clockevents_program_event()
315 if (clockevent_state_shutdown(dev)) in clockevents_program_event()
319 WARN_ONCE(!clockevent_state_oneshot(dev), "Current state: %d\n", in clockevents_program_event()
320 clockevent_get_state(dev)); in clockevents_program_event()
323 if (dev->features & CLOCK_EVT_FEAT_KTIME) in clockevents_program_event()
324 return dev->set_next_ktime(expires, dev); in clockevents_program_event()
328 return force ? clockevents_program_min_delta(dev) : -ETIME; in clockevents_program_event()
330 delta = min(delta, (int64_t) dev->max_delta_ns); in clockevents_program_event()
331 delta = max(delta, (int64_t) dev->min_delta_ns); in clockevents_program_event()
333 clc = ((unsigned long long) delta * dev->mult) >> dev->shift; in clockevents_program_event()
334 rc = dev->set_next_event((unsigned long) clc, dev); in clockevents_program_event()
336 return (rc && force) ? clockevents_program_min_delta(dev) : rc; in clockevents_program_event()
345 struct clock_event_device *dev; in clockevents_notify_released() local
348 dev = list_entry(clockevents_released.next, in clockevents_notify_released()
350 list_move(&dev->list, &clockevent_devices); in clockevents_notify_released()
351 tick_check_new_device(dev); in clockevents_notify_released()
360 struct clock_event_device *dev, *newdev = NULL; in clockevents_replace() local
362 list_for_each_entry(dev, &clockevent_devices, list) { in clockevents_replace()
363 if (dev == ced || !clockevent_state_detached(dev)) in clockevents_replace()
366 if (!tick_check_replacement(newdev, dev)) in clockevents_replace()
369 if (!try_module_get(dev->owner)) in clockevents_replace()
374 newdev = dev; in clockevents_replace()
443 void clockevents_register_device(struct clock_event_device *dev) in clockevents_register_device() argument
448 clockevent_set_state(dev, CLOCK_EVT_STATE_DETACHED); in clockevents_register_device()
450 if (!dev->cpumask) { in clockevents_register_device()
452 dev->cpumask = cpumask_of(smp_processor_id()); in clockevents_register_device()
455 if (dev->cpumask == cpu_all_mask) { in clockevents_register_device()
457 dev->name); in clockevents_register_device()
458 dev->cpumask = cpu_possible_mask; in clockevents_register_device()
463 list_add(&dev->list, &clockevent_devices); in clockevents_register_device()
464 tick_check_new_device(dev); in clockevents_register_device()
471 static void clockevents_config(struct clock_event_device *dev, u32 freq) in clockevents_config() argument
475 if (!(dev->features & CLOCK_EVT_FEAT_ONESHOT)) in clockevents_config()
483 sec = dev->max_delta_ticks; in clockevents_config()
487 else if (sec > 600 && dev->max_delta_ticks > UINT_MAX) in clockevents_config()
490 clockevents_calc_mult_shift(dev, freq, sec); in clockevents_config()
491 dev->min_delta_ns = cev_delta2ns(dev->min_delta_ticks, dev, false); in clockevents_config()
492 dev->max_delta_ns = cev_delta2ns(dev->max_delta_ticks, dev, true); in clockevents_config()
504 void clockevents_config_and_register(struct clock_event_device *dev, in clockevents_config_and_register() argument
508 dev->min_delta_ticks = min_delta; in clockevents_config_and_register()
509 dev->max_delta_ticks = max_delta; in clockevents_config_and_register()
510 clockevents_config(dev, freq); in clockevents_config_and_register()
511 clockevents_register_device(dev); in clockevents_config_and_register()
515 int __clockevents_update_freq(struct clock_event_device *dev, u32 freq) in __clockevents_update_freq() argument
517 clockevents_config(dev, freq); in __clockevents_update_freq()
519 if (clockevent_state_oneshot(dev)) in __clockevents_update_freq()
520 return clockevents_program_event(dev, dev->next_event, false); in __clockevents_update_freq()
522 if (clockevent_state_periodic(dev)) in __clockevents_update_freq()
523 return __clockevents_switch_state(dev, CLOCK_EVT_STATE_PERIODIC); in __clockevents_update_freq()
540 int clockevents_update_freq(struct clock_event_device *dev, u32 freq) in clockevents_update_freq() argument
546 ret = tick_broadcast_update_freq(dev, freq); in clockevents_update_freq()
548 ret = __clockevents_update_freq(dev, freq); in clockevents_update_freq()
556 void clockevents_handle_noop(struct clock_event_device *dev) in clockevents_handle_noop() argument
592 struct clock_event_device *dev; in clockevents_suspend() local
594 list_for_each_entry_reverse(dev, &clockevent_devices, list) in clockevents_suspend()
595 if (dev->suspend && !clockevent_state_detached(dev)) in clockevents_suspend()
596 dev->suspend(dev); in clockevents_suspend()
604 struct clock_event_device *dev; in clockevents_resume() local
606 list_for_each_entry(dev, &clockevent_devices, list) in clockevents_resume()
607 if (dev->resume && !clockevent_state_detached(dev)) in clockevents_resume()
608 dev->resume(dev); in clockevents_resume()
634 struct clock_event_device *dev, *tmp; in tick_cleanup_dead_cpu() local
644 list_for_each_entry_safe(dev, tmp, &clockevents_released, list) in tick_cleanup_dead_cpu()
645 list_del(&dev->list); in tick_cleanup_dead_cpu()
649 list_for_each_entry_safe(dev, tmp, &clockevent_devices, list) { in tick_cleanup_dead_cpu()
650 if (cpumask_test_cpu(cpu, dev->cpumask) && in tick_cleanup_dead_cpu()
651 cpumask_weight(dev->cpumask) == 1 && in tick_cleanup_dead_cpu()
652 !tick_is_broadcast_device(dev)) { in tick_cleanup_dead_cpu()
653 BUG_ON(!clockevent_state_detached(dev)); in tick_cleanup_dead_cpu()
654 list_del(&dev->list); in tick_cleanup_dead_cpu()
668 static struct tick_device *tick_get_tick_dev(struct device *dev);
670 static ssize_t current_device_show(struct device *dev, in current_device_show() argument
678 td = tick_get_tick_dev(dev); in current_device_show()
687 static ssize_t unbind_device_store(struct device *dev, in unbind_device_store() argument
703 ret = __clockevents_try_unbind(iter, dev->id); in unbind_device_store()
713 ret = clockevents_unbind(ce, dev->id); in unbind_device_store()
726 static struct tick_device *tick_get_tick_dev(struct device *dev) in tick_get_tick_dev() argument
728 return dev == &tick_bc_dev ? tick_get_broadcast_device() : in tick_get_tick_dev()
729 &per_cpu(tick_cpu_device, dev->id); in tick_get_tick_dev()
741 static struct tick_device *tick_get_tick_dev(struct device *dev) in tick_get_tick_dev() argument
743 return &per_cpu(tick_cpu_device, dev->id); in tick_get_tick_dev()
753 struct device *dev = &per_cpu(tick_percpu_dev, cpu); in tick_init_sysfs() local
756 dev->id = cpu; in tick_init_sysfs()
757 dev->bus = &clockevents_subsys; in tick_init_sysfs()
758 err = device_register(dev); in tick_init_sysfs()
760 err = device_create_file(dev, &dev_attr_current_device); in tick_init_sysfs()
762 err = device_create_file(dev, &dev_attr_unbind_device); in tick_init_sysfs()