Lines Matching refs:trigger_data

64 static void set_baseline_state(struct led_netdev_data *trigger_data)  in set_baseline_state()  argument
67 struct led_classdev *led_cdev = trigger_data->led_cdev; in set_baseline_state()
70 if (trigger_data->hw_control) { in set_baseline_state()
71 led_cdev->hw_control_set(led_cdev, trigger_data->mode); in set_baseline_state()
82 if (!trigger_data->carrier_link_up) { in set_baseline_state()
87 if (test_bit(TRIGGER_NETDEV_LINK, &trigger_data->mode)) in set_baseline_state()
90 if (test_bit(TRIGGER_NETDEV_LINK_10, &trigger_data->mode) && in set_baseline_state()
91 trigger_data->link_speed == SPEED_10) in set_baseline_state()
94 if (test_bit(TRIGGER_NETDEV_LINK_100, &trigger_data->mode) && in set_baseline_state()
95 trigger_data->link_speed == SPEED_100) in set_baseline_state()
98 if (test_bit(TRIGGER_NETDEV_LINK_1000, &trigger_data->mode) && in set_baseline_state()
99 trigger_data->link_speed == SPEED_1000) in set_baseline_state()
102 if (test_bit(TRIGGER_NETDEV_HALF_DUPLEX, &trigger_data->mode) && in set_baseline_state()
103 trigger_data->duplex == DUPLEX_HALF) in set_baseline_state()
106 if (test_bit(TRIGGER_NETDEV_FULL_DUPLEX, &trigger_data->mode) && in set_baseline_state()
107 trigger_data->duplex == DUPLEX_FULL) in set_baseline_state()
119 if (test_bit(TRIGGER_NETDEV_TX, &trigger_data->mode) || in set_baseline_state()
120 test_bit(TRIGGER_NETDEV_RX, &trigger_data->mode)) in set_baseline_state()
121 schedule_delayed_work(&trigger_data->work, 0); in set_baseline_state()
152 static bool can_hw_control(struct led_netdev_data *trigger_data) in can_hw_control() argument
155 unsigned int interval = atomic_read(&trigger_data->interval); in can_hw_control()
156 struct led_classdev *led_cdev = trigger_data->led_cdev; in can_hw_control()
177 if (!validate_net_dev(led_cdev, trigger_data->net_dev)) in can_hw_control()
181 ret = led_cdev->hw_control_is_supported(led_cdev, trigger_data->mode); in can_hw_control()
194 static void get_device_state(struct led_netdev_data *trigger_data) in get_device_state() argument
198 trigger_data->carrier_link_up = netif_carrier_ok(trigger_data->net_dev); in get_device_state()
199 if (!trigger_data->carrier_link_up) in get_device_state()
202 if (!__ethtool_get_link_ksettings(trigger_data->net_dev, &cmd)) { in get_device_state()
203 trigger_data->link_speed = cmd.base.speed; in get_device_state()
204 trigger_data->duplex = cmd.base.duplex; in get_device_state()
211 struct led_netdev_data *trigger_data = led_trigger_get_drvdata(dev); in device_name_show() local
214 mutex_lock(&trigger_data->lock); in device_name_show()
215 len = sprintf(buf, "%s\n", trigger_data->device_name); in device_name_show()
216 mutex_unlock(&trigger_data->lock); in device_name_show()
221 static int set_device_name(struct led_netdev_data *trigger_data, in set_device_name() argument
224 cancel_delayed_work_sync(&trigger_data->work); in set_device_name()
226 mutex_lock(&trigger_data->lock); in set_device_name()
228 if (trigger_data->net_dev) { in set_device_name()
229 dev_put(trigger_data->net_dev); in set_device_name()
230 trigger_data->net_dev = NULL; in set_device_name()
233 memcpy(trigger_data->device_name, name, size); in set_device_name()
234 trigger_data->device_name[size] = 0; in set_device_name()
235 if (size > 0 && trigger_data->device_name[size - 1] == '\n') in set_device_name()
236 trigger_data->device_name[size - 1] = 0; in set_device_name()
238 if (trigger_data->device_name[0] != 0) in set_device_name()
239 trigger_data->net_dev = in set_device_name()
240 dev_get_by_name(&init_net, trigger_data->device_name); in set_device_name()
242 trigger_data->carrier_link_up = false; in set_device_name()
243 trigger_data->link_speed = SPEED_UNKNOWN; in set_device_name()
244 trigger_data->duplex = DUPLEX_UNKNOWN; in set_device_name()
245 if (trigger_data->net_dev != NULL) { in set_device_name()
247 get_device_state(trigger_data); in set_device_name()
251 trigger_data->last_activity = 0; in set_device_name()
253 set_baseline_state(trigger_data); in set_device_name()
254 mutex_unlock(&trigger_data->lock); in set_device_name()
263 struct led_netdev_data *trigger_data = led_trigger_get_drvdata(dev); in device_name_store() local
269 ret = set_device_name(trigger_data, buf, size); in device_name_store()
281 struct led_netdev_data *trigger_data = led_trigger_get_drvdata(dev); in netdev_led_attr_show() local
299 return sprintf(buf, "%u\n", test_bit(bit, &trigger_data->mode)); in netdev_led_attr_show()
305 struct led_netdev_data *trigger_data = led_trigger_get_drvdata(dev); in netdev_led_attr_store() local
306 unsigned long state, mode = trigger_data->mode; in netdev_led_attr_store()
340 cancel_delayed_work_sync(&trigger_data->work); in netdev_led_attr_store()
342 trigger_data->mode = mode; in netdev_led_attr_store()
343 trigger_data->hw_control = can_hw_control(trigger_data); in netdev_led_attr_store()
345 set_baseline_state(trigger_data); in netdev_led_attr_store()
375 struct led_netdev_data *trigger_data = led_trigger_get_drvdata(dev); in interval_show() local
378 jiffies_to_msecs(atomic_read(&trigger_data->interval))); in interval_show()
385 struct led_netdev_data *trigger_data = led_trigger_get_drvdata(dev); in interval_store() local
389 if (trigger_data->hw_control) in interval_store()
398 cancel_delayed_work_sync(&trigger_data->work); in interval_store()
400 atomic_set(&trigger_data->interval, msecs_to_jiffies(value)); in interval_store()
401 set_baseline_state(trigger_data); /* resets timer */ in interval_store()
412 struct led_netdev_data *trigger_data = led_trigger_get_drvdata(dev); in offloaded_show() local
414 return sprintf(buf, "%d\n", trigger_data->hw_control); in offloaded_show()
440 struct led_netdev_data *trigger_data = in netdev_trig_notify() local
448 if (!(dev == trigger_data->net_dev || in netdev_trig_notify()
449 (evt == NETDEV_CHANGENAME && !strcmp(dev->name, trigger_data->device_name)) || in netdev_trig_notify()
450 (evt == NETDEV_REGISTER && !strcmp(dev->name, trigger_data->device_name)))) in netdev_trig_notify()
453 cancel_delayed_work_sync(&trigger_data->work); in netdev_trig_notify()
455 mutex_lock(&trigger_data->lock); in netdev_trig_notify()
457 trigger_data->carrier_link_up = false; in netdev_trig_notify()
458 trigger_data->link_speed = SPEED_UNKNOWN; in netdev_trig_notify()
459 trigger_data->duplex = DUPLEX_UNKNOWN; in netdev_trig_notify()
462 get_device_state(trigger_data); in netdev_trig_notify()
465 dev_put(trigger_data->net_dev); in netdev_trig_notify()
467 trigger_data->net_dev = dev; in netdev_trig_notify()
470 dev_put(trigger_data->net_dev); in netdev_trig_notify()
471 trigger_data->net_dev = NULL; in netdev_trig_notify()
475 get_device_state(trigger_data); in netdev_trig_notify()
479 set_baseline_state(trigger_data); in netdev_trig_notify()
481 mutex_unlock(&trigger_data->lock); in netdev_trig_notify()
489 struct led_netdev_data *trigger_data = in netdev_trig_work() local
498 if (!trigger_data->net_dev) { in netdev_trig_work()
499 led_set_brightness(trigger_data->led_cdev, LED_OFF); in netdev_trig_work()
504 if (!test_bit(TRIGGER_NETDEV_TX, &trigger_data->mode) && in netdev_trig_work()
505 !test_bit(TRIGGER_NETDEV_RX, &trigger_data->mode)) in netdev_trig_work()
508 dev_stats = dev_get_stats(trigger_data->net_dev, &temp); in netdev_trig_work()
510 (test_bit(TRIGGER_NETDEV_TX, &trigger_data->mode) ? in netdev_trig_work()
512 (test_bit(TRIGGER_NETDEV_RX, &trigger_data->mode) ? in netdev_trig_work()
515 if (trigger_data->last_activity != new_activity) { in netdev_trig_work()
516 led_stop_software_blink(trigger_data->led_cdev); in netdev_trig_work()
518 invert = test_bit(TRIGGER_NETDEV_LINK, &trigger_data->mode) || in netdev_trig_work()
519 test_bit(TRIGGER_NETDEV_LINK_10, &trigger_data->mode) || in netdev_trig_work()
520 test_bit(TRIGGER_NETDEV_LINK_100, &trigger_data->mode) || in netdev_trig_work()
521 test_bit(TRIGGER_NETDEV_LINK_1000, &trigger_data->mode) || in netdev_trig_work()
522 test_bit(TRIGGER_NETDEV_HALF_DUPLEX, &trigger_data->mode) || in netdev_trig_work()
523 test_bit(TRIGGER_NETDEV_FULL_DUPLEX, &trigger_data->mode); in netdev_trig_work()
525 atomic_read(&trigger_data->interval)); in netdev_trig_work()
527 led_blink_set_oneshot(trigger_data->led_cdev, in netdev_trig_work()
531 trigger_data->last_activity = new_activity; in netdev_trig_work()
534 schedule_delayed_work(&trigger_data->work, in netdev_trig_work()
535 (atomic_read(&trigger_data->interval)*2)); in netdev_trig_work()
540 struct led_netdev_data *trigger_data; in netdev_trig_activate() local
545 trigger_data = kzalloc(sizeof(struct led_netdev_data), GFP_KERNEL); in netdev_trig_activate()
546 if (!trigger_data) in netdev_trig_activate()
549 mutex_init(&trigger_data->lock); in netdev_trig_activate()
551 trigger_data->notifier.notifier_call = netdev_trig_notify; in netdev_trig_activate()
552 trigger_data->notifier.priority = 10; in netdev_trig_activate()
554 INIT_DELAYED_WORK(&trigger_data->work, netdev_trig_work); in netdev_trig_activate()
556 trigger_data->led_cdev = led_cdev; in netdev_trig_activate()
557 trigger_data->net_dev = NULL; in netdev_trig_activate()
558 trigger_data->device_name[0] = 0; in netdev_trig_activate()
560 trigger_data->mode = 0; in netdev_trig_activate()
561 atomic_set(&trigger_data->interval, msecs_to_jiffies(NETDEV_LED_DEFAULT_INTERVAL)); in netdev_trig_activate()
562 trigger_data->last_activity = 0; in netdev_trig_activate()
572 set_device_name(trigger_data, name, strlen(name)); in netdev_trig_activate()
573 trigger_data->hw_control = true; in netdev_trig_activate()
577 trigger_data->mode = mode; in netdev_trig_activate()
581 led_set_trigger_data(led_cdev, trigger_data); in netdev_trig_activate()
583 rc = register_netdevice_notifier(&trigger_data->notifier); in netdev_trig_activate()
585 kfree(trigger_data); in netdev_trig_activate()
592 struct led_netdev_data *trigger_data = led_get_trigger_data(led_cdev); in netdev_trig_deactivate() local
594 unregister_netdevice_notifier(&trigger_data->notifier); in netdev_trig_deactivate()
596 cancel_delayed_work_sync(&trigger_data->work); in netdev_trig_deactivate()
600 dev_put(trigger_data->net_dev); in netdev_trig_deactivate()
602 kfree(trigger_data); in netdev_trig_deactivate()