Lines Matching +full:dont +full:- +full:validate
1 // SPDX-License-Identifier: GPL-2.0
9 // Derived from ledtrig-timer.c which is:
10 // Copyright 2005-2006 Openedhand Ltd.
34 * device_name - network device name to monitor
35 * interval - duration of LED blink, in milliseconds
36 * link - LED's normal state reflects whether the link is up
38 * tx - LED blinks on transmitted data
39 * rx - LED blinks on receive data
68 struct led_classdev *led_cdev = trigger_data->led_cdev; in set_baseline_state()
71 if (trigger_data->hw_control) { in set_baseline_state()
72 led_cdev->hw_control_set(led_cdev, trigger_data->mode); in set_baseline_state()
73 if (led_cdev->blink_set) { in set_baseline_state()
74 led_cdev->blink_set(led_cdev, &trigger_data->blink_delay, in set_baseline_state()
75 &trigger_data->blink_delay); in set_baseline_state()
81 current_brightness = led_cdev->brightness; in set_baseline_state()
83 led_cdev->blink_brightness = current_brightness; in set_baseline_state()
84 if (!led_cdev->blink_brightness) in set_baseline_state()
85 led_cdev->blink_brightness = led_cdev->max_brightness; in set_baseline_state()
87 if (!trigger_data->carrier_link_up) { in set_baseline_state()
92 if (test_bit(TRIGGER_NETDEV_LINK, &trigger_data->mode)) in set_baseline_state()
95 if (test_bit(TRIGGER_NETDEV_LINK_10, &trigger_data->mode) && in set_baseline_state()
96 trigger_data->link_speed == SPEED_10) in set_baseline_state()
99 if (test_bit(TRIGGER_NETDEV_LINK_100, &trigger_data->mode) && in set_baseline_state()
100 trigger_data->link_speed == SPEED_100) in set_baseline_state()
103 if (test_bit(TRIGGER_NETDEV_LINK_1000, &trigger_data->mode) && in set_baseline_state()
104 trigger_data->link_speed == SPEED_1000) in set_baseline_state()
107 if (test_bit(TRIGGER_NETDEV_HALF_DUPLEX, &trigger_data->mode) && in set_baseline_state()
108 trigger_data->duplex == DUPLEX_HALF) in set_baseline_state()
111 if (test_bit(TRIGGER_NETDEV_FULL_DUPLEX, &trigger_data->mode) && in set_baseline_state()
112 trigger_data->duplex == DUPLEX_FULL) in set_baseline_state()
117 led_cdev->blink_brightness); in set_baseline_state()
124 if (test_bit(TRIGGER_NETDEV_TX, &trigger_data->mode) || in set_baseline_state()
125 test_bit(TRIGGER_NETDEV_RX, &trigger_data->mode)) in set_baseline_state()
126 schedule_delayed_work(&trigger_data->work, 0); in set_baseline_state()
132 if (!led_cdev->hw_control_get || !led_cdev->hw_control_set || in supports_hw_control()
133 !led_cdev->hw_control_is_supported) in supports_hw_control()
136 return !strcmp(led_cdev->hw_control_trigger, led_cdev->trigger->name); in supports_hw_control()
140 * Validate the configured netdev is the same as the one associated with
146 struct device *dev = led_cdev->hw_control_get_device(led_cdev); in validate_net_dev()
160 unsigned int interval = atomic_read(&trigger_data->interval); in can_hw_control()
161 struct led_classdev *led_cdev = trigger_data->led_cdev; in can_hw_control()
182 if (!validate_net_dev(led_cdev, trigger_data->net_dev)) in can_hw_control()
186 ret = led_cdev->hw_control_is_supported(led_cdev, trigger_data->mode); in can_hw_control()
188 if (ret == -EOPNOTSUPP) in can_hw_control()
191 dev_warn(led_cdev->dev, in can_hw_control()
203 trigger_data->carrier_link_up = netif_carrier_ok(trigger_data->net_dev); in get_device_state()
204 if (!trigger_data->carrier_link_up) in get_device_state()
207 if (!__ethtool_get_link_ksettings(trigger_data->net_dev, &cmd)) { in get_device_state()
208 trigger_data->link_speed = cmd.base.speed; in get_device_state()
209 trigger_data->duplex = cmd.base.duplex; in get_device_state()
219 mutex_lock(&trigger_data->lock); in device_name_show()
220 len = sprintf(buf, "%s\n", trigger_data->device_name); in device_name_show()
221 mutex_unlock(&trigger_data->lock); in device_name_show()
230 return -EINVAL; in set_device_name()
232 cancel_delayed_work_sync(&trigger_data->work); in set_device_name()
239 mutex_lock(&trigger_data->lock); in set_device_name()
241 if (trigger_data->net_dev) { in set_device_name()
242 dev_put(trigger_data->net_dev); in set_device_name()
243 trigger_data->net_dev = NULL; in set_device_name()
246 memcpy(trigger_data->device_name, name, size); in set_device_name()
247 trigger_data->device_name[size] = 0; in set_device_name()
248 if (size > 0 && trigger_data->device_name[size - 1] == '\n') in set_device_name()
249 trigger_data->device_name[size - 1] = 0; in set_device_name()
251 if (trigger_data->device_name[0] != 0) in set_device_name()
252 trigger_data->net_dev = in set_device_name()
253 dev_get_by_name(&init_net, trigger_data->device_name); in set_device_name()
255 trigger_data->carrier_link_up = false; in set_device_name()
256 trigger_data->link_speed = SPEED_UNKNOWN; in set_device_name()
257 trigger_data->duplex = DUPLEX_UNKNOWN; in set_device_name()
258 if (trigger_data->net_dev) in set_device_name()
261 trigger_data->last_activity = 0; in set_device_name()
264 mutex_unlock(&trigger_data->lock); in set_device_name()
304 return -EINVAL; in netdev_led_attr_show()
307 return sprintf(buf, "%u\n", test_bit(bit, &trigger_data->mode)); in netdev_led_attr_show()
314 unsigned long state, mode = trigger_data->mode; in netdev_led_attr_store()
334 return -EINVAL; in netdev_led_attr_store()
346 return -EINVAL; in netdev_led_attr_store()
348 cancel_delayed_work_sync(&trigger_data->work); in netdev_led_attr_store()
350 trigger_data->mode = mode; in netdev_led_attr_store()
351 trigger_data->hw_control = can_hw_control(trigger_data); in netdev_led_attr_store()
386 jiffies_to_msecs(atomic_read(&trigger_data->interval))); in interval_show()
394 struct led_classdev *led_cdev = trigger_data->led_cdev; in interval_store()
398 if (trigger_data->hw_control && !led_cdev->blink_set) in interval_store()
399 return -EINVAL; in interval_store()
407 if (trigger_data->hw_control) { in interval_store()
408 trigger_data->blink_delay = value; in interval_store()
410 cancel_delayed_work_sync(&trigger_data->work); in interval_store()
412 atomic_set(&trigger_data->interval, msecs_to_jiffies(value)); in interval_store()
427 return sprintf(buf, "%d\n", trigger_data->hw_control); in offloaded_show()
461 if (!(dev == trigger_data->net_dev || in netdev_trig_notify()
462 (evt == NETDEV_CHANGENAME && !strcmp(dev->name, trigger_data->device_name)) || in netdev_trig_notify()
463 (evt == NETDEV_REGISTER && !strcmp(dev->name, trigger_data->device_name)))) in netdev_trig_notify()
466 cancel_delayed_work_sync(&trigger_data->work); in netdev_trig_notify()
468 mutex_lock(&trigger_data->lock); in netdev_trig_notify()
470 trigger_data->carrier_link_up = false; in netdev_trig_notify()
471 trigger_data->link_speed = SPEED_UNKNOWN; in netdev_trig_notify()
472 trigger_data->duplex = DUPLEX_UNKNOWN; in netdev_trig_notify()
476 dev_put(trigger_data->net_dev); in netdev_trig_notify()
478 trigger_data->net_dev = dev; in netdev_trig_notify()
483 dev_put(trigger_data->net_dev); in netdev_trig_notify()
484 trigger_data->net_dev = NULL; in netdev_trig_notify()
494 mutex_unlock(&trigger_data->lock); in netdev_trig_notify()
510 /* If we dont have a device, insure we are off */ in netdev_trig_work()
511 if (!trigger_data->net_dev) { in netdev_trig_work()
512 led_set_brightness(trigger_data->led_cdev, LED_OFF); in netdev_trig_work()
517 if (!test_bit(TRIGGER_NETDEV_TX, &trigger_data->mode) && in netdev_trig_work()
518 !test_bit(TRIGGER_NETDEV_RX, &trigger_data->mode)) in netdev_trig_work()
521 dev_stats = dev_get_stats(trigger_data->net_dev, &temp); in netdev_trig_work()
523 (test_bit(TRIGGER_NETDEV_TX, &trigger_data->mode) ? in netdev_trig_work()
524 dev_stats->tx_packets : 0) + in netdev_trig_work()
525 (test_bit(TRIGGER_NETDEV_RX, &trigger_data->mode) ? in netdev_trig_work()
526 dev_stats->rx_packets : 0); in netdev_trig_work()
528 if (trigger_data->last_activity != new_activity) { in netdev_trig_work()
529 led_stop_software_blink(trigger_data->led_cdev); in netdev_trig_work()
531 invert = test_bit(TRIGGER_NETDEV_LINK, &trigger_data->mode) || in netdev_trig_work()
532 test_bit(TRIGGER_NETDEV_LINK_10, &trigger_data->mode) || in netdev_trig_work()
533 test_bit(TRIGGER_NETDEV_LINK_100, &trigger_data->mode) || in netdev_trig_work()
534 test_bit(TRIGGER_NETDEV_LINK_1000, &trigger_data->mode) || in netdev_trig_work()
535 test_bit(TRIGGER_NETDEV_HALF_DUPLEX, &trigger_data->mode) || in netdev_trig_work()
536 test_bit(TRIGGER_NETDEV_FULL_DUPLEX, &trigger_data->mode); in netdev_trig_work()
538 atomic_read(&trigger_data->interval)); in netdev_trig_work()
540 led_blink_set_oneshot(trigger_data->led_cdev, in netdev_trig_work()
544 trigger_data->last_activity = new_activity; in netdev_trig_work()
547 schedule_delayed_work(&trigger_data->work, in netdev_trig_work()
548 (atomic_read(&trigger_data->interval)*2)); in netdev_trig_work()
560 return -ENOMEM; in netdev_trig_activate()
562 mutex_init(&trigger_data->lock); in netdev_trig_activate()
564 trigger_data->notifier.notifier_call = netdev_trig_notify; in netdev_trig_activate()
565 trigger_data->notifier.priority = 10; in netdev_trig_activate()
567 INIT_DELAYED_WORK(&trigger_data->work, netdev_trig_work); in netdev_trig_activate()
569 trigger_data->led_cdev = led_cdev; in netdev_trig_activate()
570 trigger_data->net_dev = NULL; in netdev_trig_activate()
571 trigger_data->device_name[0] = 0; in netdev_trig_activate()
573 trigger_data->mode = 0; in netdev_trig_activate()
574 atomic_set(&trigger_data->interval, msecs_to_jiffies(NETDEV_LED_DEFAULT_INTERVAL)); in netdev_trig_activate()
575 trigger_data->last_activity = 0; in netdev_trig_activate()
581 dev = led_cdev->hw_control_get_device(led_cdev); in netdev_trig_activate()
586 trigger_data->hw_control = true; in netdev_trig_activate()
588 rc = led_cdev->hw_control_get(led_cdev, &mode); in netdev_trig_activate()
590 trigger_data->mode = mode; in netdev_trig_activate()
596 rc = register_netdevice_notifier(&trigger_data->notifier); in netdev_trig_activate()
607 unregister_netdevice_notifier(&trigger_data->notifier); in netdev_trig_deactivate()
609 cancel_delayed_work_sync(&trigger_data->work); in netdev_trig_deactivate()
613 dev_put(trigger_data->net_dev); in netdev_trig_deactivate()