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.
37 * device_name - network device name to monitor
38 * interval - duration of LED blink, in milliseconds
39 * link - LED's normal state reflects whether the link is up
41 * tx - LED blinks on transmitted data
42 * rx - LED blinks on receive data
43 * tx_err - LED blinks on transmit error
44 * rx_err - LED blinks on receive error
53 * -EOPNOTSUPP to the user, but still store the selected mode. This is needed
85 struct led_classdev *led_cdev = trigger_data->led_cdev; in set_baseline_state()
88 if (trigger_data->hw_control) { in set_baseline_state()
89 led_cdev->hw_control_set(led_cdev, trigger_data->mode); in set_baseline_state()
94 current_brightness = led_cdev->brightness; in set_baseline_state()
96 led_cdev->blink_brightness = current_brightness; in set_baseline_state()
97 if (!led_cdev->blink_brightness) in set_baseline_state()
98 led_cdev->blink_brightness = led_cdev->max_brightness; in set_baseline_state()
100 if (!trigger_data->carrier_link_up) { in set_baseline_state()
105 if (test_bit(TRIGGER_NETDEV_LINK, &trigger_data->mode)) in set_baseline_state()
108 if (test_bit(TRIGGER_NETDEV_LINK_10, &trigger_data->mode) && in set_baseline_state()
109 trigger_data->link_speed == SPEED_10) in set_baseline_state()
112 if (test_bit(TRIGGER_NETDEV_LINK_100, &trigger_data->mode) && in set_baseline_state()
113 trigger_data->link_speed == SPEED_100) in set_baseline_state()
116 if (test_bit(TRIGGER_NETDEV_LINK_1000, &trigger_data->mode) && in set_baseline_state()
117 trigger_data->link_speed == SPEED_1000) in set_baseline_state()
120 if (test_bit(TRIGGER_NETDEV_LINK_2500, &trigger_data->mode) && in set_baseline_state()
121 trigger_data->link_speed == SPEED_2500) in set_baseline_state()
124 if (test_bit(TRIGGER_NETDEV_LINK_5000, &trigger_data->mode) && in set_baseline_state()
125 trigger_data->link_speed == SPEED_5000) in set_baseline_state()
128 if (test_bit(TRIGGER_NETDEV_LINK_10000, &trigger_data->mode) && in set_baseline_state()
129 trigger_data->link_speed == SPEED_10000) in set_baseline_state()
132 if (test_bit(TRIGGER_NETDEV_LINK_25000, &trigger_data->mode) && in set_baseline_state()
133 trigger_data->link_speed == SPEED_25000) in set_baseline_state()
136 if (test_bit(TRIGGER_NETDEV_LINK_40000, &trigger_data->mode) && in set_baseline_state()
137 trigger_data->link_speed == SPEED_40000) in set_baseline_state()
140 if (test_bit(TRIGGER_NETDEV_LINK_50000, &trigger_data->mode) && in set_baseline_state()
141 trigger_data->link_speed == SPEED_50000) in set_baseline_state()
144 if (test_bit(TRIGGER_NETDEV_LINK_100000, &trigger_data->mode) && in set_baseline_state()
145 trigger_data->link_speed == SPEED_100000) in set_baseline_state()
148 if (test_bit(TRIGGER_NETDEV_HALF_DUPLEX, &trigger_data->mode) && in set_baseline_state()
149 trigger_data->duplex == DUPLEX_HALF) in set_baseline_state()
152 if (test_bit(TRIGGER_NETDEV_FULL_DUPLEX, &trigger_data->mode) && in set_baseline_state()
153 trigger_data->duplex == DUPLEX_FULL) in set_baseline_state()
158 led_cdev->blink_brightness); in set_baseline_state()
165 if (test_bit(TRIGGER_NETDEV_TX, &trigger_data->mode) || in set_baseline_state()
166 test_bit(TRIGGER_NETDEV_RX, &trigger_data->mode) || in set_baseline_state()
167 test_bit(TRIGGER_NETDEV_TX_ERR, &trigger_data->mode) || in set_baseline_state()
168 test_bit(TRIGGER_NETDEV_RX_ERR, &trigger_data->mode)) in set_baseline_state()
169 schedule_delayed_work(&trigger_data->work, 0); in set_baseline_state()
175 if (!led_cdev->hw_control_get || !led_cdev->hw_control_set || in supports_hw_control()
176 !led_cdev->hw_control_is_supported) in supports_hw_control()
179 return !strcmp(led_cdev->hw_control_trigger, led_cdev->trigger->name); in supports_hw_control()
183 * Validate the configured netdev is the same as the one associated with
189 struct device *dev = led_cdev->hw_control_get_device(led_cdev); in validate_net_dev()
203 unsigned int interval = atomic_read(&trigger_data->interval); in can_hw_control()
204 struct led_classdev *led_cdev = trigger_data->led_cdev; in can_hw_control()
225 if (!validate_net_dev(led_cdev, trigger_data->net_dev)) in can_hw_control()
229 ret = led_cdev->hw_control_is_supported(led_cdev, trigger_data->mode); in can_hw_control()
231 if (ret == -EOPNOTSUPP) in can_hw_control()
234 dev_warn(led_cdev->dev, in can_hw_control()
246 trigger_data->carrier_link_up = netif_carrier_ok(trigger_data->net_dev); in get_device_state()
248 if (netif_get_link_ksettings(trigger_data->net_dev, &cmd)) in get_device_state()
251 if (trigger_data->carrier_link_up) { in get_device_state()
252 trigger_data->link_speed = cmd.base.speed; in get_device_state()
253 trigger_data->duplex = cmd.base.duplex; in get_device_state()
260 linkmode_copy(trigger_data->supported_link_modes, cmd.link_modes.supported); in get_device_state()
269 mutex_lock(&trigger_data->lock); in device_name_show()
270 len = sprintf(buf, "%s\n", trigger_data->device_name); in device_name_show()
271 mutex_unlock(&trigger_data->lock); in device_name_show()
283 return -EINVAL; in set_device_name()
285 cancel_delayed_work_sync(&trigger_data->work); in set_device_name()
289 if (size > 0 && device_name[size - 1] == '\n') in set_device_name()
290 device_name[size - 1] = 0; in set_device_name()
293 * Lock order: rtnl_lock -> netdev instance lock -> trigger_data lock. in set_device_name()
301 mutex_lock(&trigger_data->lock); in set_device_name()
303 dev_put(trigger_data->net_dev); in set_device_name()
304 trigger_data->net_dev = new_dev; in set_device_name()
305 strscpy(trigger_data->device_name, device_name); in set_device_name()
307 trigger_data->carrier_link_up = false; in set_device_name()
308 trigger_data->link_speed = SPEED_UNKNOWN; in set_device_name()
309 trigger_data->duplex = DUPLEX_UNKNOWN; in set_device_name()
310 if (trigger_data->net_dev) in set_device_name()
313 trigger_data->last_activity = 0; in set_device_name()
316 if (!trigger_data->hw_control || led_get_trigger_data(trigger_data->led_cdev)) in set_device_name()
319 mutex_unlock(&trigger_data->lock); in set_device_name()
340 sysfs_update_group(&dev->kobj, &netdev_trig_link_speed_attrs_group); in device_name_store()
374 return -EINVAL; in netdev_led_attr_show()
377 return sprintf(buf, "%u\n", test_bit(bit, &trigger_data->mode)); in netdev_led_attr_show()
384 struct led_classdev *led_cdev = trigger_data->led_cdev; in netdev_led_attr_store()
385 unsigned long state, mode = trigger_data->mode; in netdev_led_attr_store()
414 return -EINVAL; in netdev_led_attr_store()
433 return -EINVAL; in netdev_led_attr_store()
435 cancel_delayed_work_sync(&trigger_data->work); in netdev_led_attr_store()
437 trigger_data->mode = mode; in netdev_led_attr_store()
438 trigger_data->hw_control = can_hw_control(trigger_data); in netdev_led_attr_store()
440 if (!led_cdev->brightness_set && !led_cdev->brightness_set_blocking && in netdev_led_attr_store()
441 !trigger_data->hw_control) in netdev_led_attr_store()
442 return -EOPNOTSUPP; in netdev_led_attr_store()
486 jiffies_to_msecs(atomic_read(&trigger_data->interval))); in interval_show()
497 if (trigger_data->hw_control) in interval_store()
498 return -EINVAL; in interval_store()
506 cancel_delayed_work_sync(&trigger_data->work); in interval_store()
508 atomic_set(&trigger_data->interval, msecs_to_jiffies(value)); in interval_store()
522 return sprintf(buf, "%d\n", trigger_data->hw_control); in offloaded_show()
531 return attr->mode; \
543 supported_link_modes = trigger_data->supported_link_modes; in netdev_trig_link_speed_visible()
620 struct led_classdev *led_cdev = trigger_data->led_cdev; in netdev_trig_notify()
627 if (!(dev == trigger_data->net_dev || in netdev_trig_notify()
628 (evt == NETDEV_CHANGENAME && !strcmp(dev->name, trigger_data->device_name)) || in netdev_trig_notify()
629 (evt == NETDEV_REGISTER && !strcmp(dev->name, trigger_data->device_name)))) in netdev_trig_notify()
632 cancel_delayed_work_sync(&trigger_data->work); in netdev_trig_notify()
634 mutex_lock(&trigger_data->lock); in netdev_trig_notify()
636 trigger_data->carrier_link_up = false; in netdev_trig_notify()
637 trigger_data->link_speed = SPEED_UNKNOWN; in netdev_trig_notify()
638 trigger_data->duplex = DUPLEX_UNKNOWN; in netdev_trig_notify()
642 dev_put(trigger_data->net_dev); in netdev_trig_notify()
644 trigger_data->net_dev = dev; in netdev_trig_notify()
649 dev_put(trigger_data->net_dev); in netdev_trig_notify()
650 trigger_data->net_dev = NULL; in netdev_trig_notify()
653 trigger_data->hw_control = can_hw_control(trigger_data); in netdev_trig_notify()
659 sysfs_update_group(&led_cdev->dev->kobj, in netdev_trig_notify()
666 mutex_unlock(&trigger_data->lock); in netdev_trig_notify()
682 /* If we dont have a device, insure we are off */ in netdev_trig_work()
683 if (!trigger_data->net_dev) { in netdev_trig_work()
684 led_set_brightness(trigger_data->led_cdev, LED_OFF); in netdev_trig_work()
689 if (!test_bit(TRIGGER_NETDEV_TX, &trigger_data->mode) && in netdev_trig_work()
690 !test_bit(TRIGGER_NETDEV_RX, &trigger_data->mode) && in netdev_trig_work()
691 !test_bit(TRIGGER_NETDEV_TX_ERR, &trigger_data->mode) && in netdev_trig_work()
692 !test_bit(TRIGGER_NETDEV_RX_ERR, &trigger_data->mode)) in netdev_trig_work()
695 dev_stats = dev_get_stats(trigger_data->net_dev, &temp); in netdev_trig_work()
697 (test_bit(TRIGGER_NETDEV_TX, &trigger_data->mode) ? in netdev_trig_work()
698 dev_stats->tx_packets : 0) + in netdev_trig_work()
699 (test_bit(TRIGGER_NETDEV_RX, &trigger_data->mode) ? in netdev_trig_work()
700 dev_stats->rx_packets : 0) + in netdev_trig_work()
701 (test_bit(TRIGGER_NETDEV_TX_ERR, &trigger_data->mode) ? in netdev_trig_work()
702 dev_stats->tx_errors : 0) + in netdev_trig_work()
703 (test_bit(TRIGGER_NETDEV_RX_ERR, &trigger_data->mode) ? in netdev_trig_work()
704 dev_stats->rx_errors : 0); in netdev_trig_work()
706 if (trigger_data->last_activity != new_activity) { in netdev_trig_work()
707 led_stop_software_blink(trigger_data->led_cdev); in netdev_trig_work()
709 invert = test_bit(TRIGGER_NETDEV_LINK, &trigger_data->mode) || in netdev_trig_work()
710 test_bit(TRIGGER_NETDEV_LINK_10, &trigger_data->mode) || in netdev_trig_work()
711 test_bit(TRIGGER_NETDEV_LINK_100, &trigger_data->mode) || in netdev_trig_work()
712 test_bit(TRIGGER_NETDEV_LINK_1000, &trigger_data->mode) || in netdev_trig_work()
713 test_bit(TRIGGER_NETDEV_LINK_2500, &trigger_data->mode) || in netdev_trig_work()
714 test_bit(TRIGGER_NETDEV_LINK_5000, &trigger_data->mode) || in netdev_trig_work()
715 test_bit(TRIGGER_NETDEV_LINK_10000, &trigger_data->mode) || in netdev_trig_work()
716 test_bit(TRIGGER_NETDEV_LINK_25000, &trigger_data->mode) || in netdev_trig_work()
717 test_bit(TRIGGER_NETDEV_LINK_40000, &trigger_data->mode) || in netdev_trig_work()
718 test_bit(TRIGGER_NETDEV_LINK_50000, &trigger_data->mode) || in netdev_trig_work()
719 test_bit(TRIGGER_NETDEV_LINK_100000, &trigger_data->mode) || in netdev_trig_work()
720 test_bit(TRIGGER_NETDEV_HALF_DUPLEX, &trigger_data->mode) || in netdev_trig_work()
721 test_bit(TRIGGER_NETDEV_FULL_DUPLEX, &trigger_data->mode); in netdev_trig_work()
723 atomic_read(&trigger_data->interval)); in netdev_trig_work()
725 led_blink_set_oneshot(trigger_data->led_cdev, in netdev_trig_work()
729 trigger_data->last_activity = new_activity; in netdev_trig_work()
732 schedule_delayed_work(&trigger_data->work, in netdev_trig_work()
733 (atomic_read(&trigger_data->interval)*2)); in netdev_trig_work()
745 return -ENOMEM; in netdev_trig_activate()
747 mutex_init(&trigger_data->lock); in netdev_trig_activate()
749 trigger_data->notifier.notifier_call = netdev_trig_notify; in netdev_trig_activate()
750 trigger_data->notifier.priority = 10; in netdev_trig_activate()
752 INIT_DELAYED_WORK(&trigger_data->work, netdev_trig_work); in netdev_trig_activate()
754 trigger_data->led_cdev = led_cdev; in netdev_trig_activate()
755 trigger_data->net_dev = NULL; in netdev_trig_activate()
756 trigger_data->device_name[0] = 0; in netdev_trig_activate()
758 trigger_data->mode = 0; in netdev_trig_activate()
759 atomic_set(&trigger_data->interval, msecs_to_jiffies(NETDEV_LED_DEFAULT_INTERVAL)); in netdev_trig_activate()
760 trigger_data->last_activity = 0; in netdev_trig_activate()
766 dev = led_cdev->hw_control_get_device(led_cdev); in netdev_trig_activate()
770 trigger_data->hw_control = true; in netdev_trig_activate()
773 rc = led_cdev->hw_control_get(led_cdev, &mode); in netdev_trig_activate()
775 trigger_data->mode = mode; in netdev_trig_activate()
781 rc = register_netdevice_notifier(&trigger_data->notifier); in netdev_trig_activate()
792 unregister_netdevice_notifier(&trigger_data->notifier); in netdev_trig_deactivate()
794 cancel_delayed_work_sync(&trigger_data->work); in netdev_trig_deactivate()
796 dev_put(trigger_data->net_dev); in netdev_trig_deactivate()