Lines Matching refs:trigger_data
64 static void set_baseline_state(struct led_netdev_data *trigger_data)
67 struct led_classdev *led_cdev = trigger_data->led_cdev;
70 if (trigger_data->hw_control) {
71 led_cdev->hw_control_set(led_cdev, trigger_data->mode);
82 if (!trigger_data->carrier_link_up) {
87 if (test_bit(TRIGGER_NETDEV_LINK, &trigger_data->mode))
90 if (test_bit(TRIGGER_NETDEV_LINK_10, &trigger_data->mode) &&
91 trigger_data->link_speed == SPEED_10)
94 if (test_bit(TRIGGER_NETDEV_LINK_100, &trigger_data->mode) &&
95 trigger_data->link_speed == SPEED_100)
98 if (test_bit(TRIGGER_NETDEV_LINK_1000, &trigger_data->mode) &&
99 trigger_data->link_speed == SPEED_1000)
102 if (test_bit(TRIGGER_NETDEV_HALF_DUPLEX, &trigger_data->mode) &&
103 trigger_data->duplex == DUPLEX_HALF)
106 if (test_bit(TRIGGER_NETDEV_FULL_DUPLEX, &trigger_data->mode) &&
107 trigger_data->duplex == DUPLEX_FULL)
119 if (test_bit(TRIGGER_NETDEV_TX, &trigger_data->mode) ||
120 test_bit(TRIGGER_NETDEV_RX, &trigger_data->mode))
121 schedule_delayed_work(&trigger_data->work, 0);
152 static bool can_hw_control(struct led_netdev_data *trigger_data)
155 unsigned int interval = atomic_read(&trigger_data->interval);
156 struct led_classdev *led_cdev = trigger_data->led_cdev;
177 if (!validate_net_dev(led_cdev, trigger_data->net_dev))
181 ret = led_cdev->hw_control_is_supported(led_cdev, trigger_data->mode);
194 static void get_device_state(struct led_netdev_data *trigger_data)
198 trigger_data->carrier_link_up = netif_carrier_ok(trigger_data->net_dev);
199 if (!trigger_data->carrier_link_up)
202 if (!__ethtool_get_link_ksettings(trigger_data->net_dev, &cmd)) {
203 trigger_data->link_speed = cmd.base.speed;
204 trigger_data->duplex = cmd.base.duplex;
211 struct led_netdev_data *trigger_data = led_trigger_get_drvdata(dev);
214 mutex_lock(&trigger_data->lock);
215 len = sprintf(buf, "%s\n", trigger_data->device_name);
216 mutex_unlock(&trigger_data->lock);
221 static int set_device_name(struct led_netdev_data *trigger_data,
227 cancel_delayed_work_sync(&trigger_data->work);
230 * Take RTNL lock before trigger_data lock to prevent potential
234 mutex_lock(&trigger_data->lock);
236 if (trigger_data->net_dev) {
237 dev_put(trigger_data->net_dev);
238 trigger_data->net_dev = NULL;
241 memcpy(trigger_data->device_name, name, size);
242 trigger_data->device_name[size] = 0;
243 if (size > 0 && trigger_data->device_name[size - 1] == '\n')
244 trigger_data->device_name[size - 1] = 0;
246 if (trigger_data->device_name[0] != 0)
247 trigger_data->net_dev =
248 dev_get_by_name(&init_net, trigger_data->device_name);
250 trigger_data->carrier_link_up = false;
251 trigger_data->link_speed = SPEED_UNKNOWN;
252 trigger_data->duplex = DUPLEX_UNKNOWN;
253 if (trigger_data->net_dev)
254 get_device_state(trigger_data);
256 trigger_data->last_activity = 0;
258 set_baseline_state(trigger_data);
259 mutex_unlock(&trigger_data->lock);
269 struct led_netdev_data *trigger_data = led_trigger_get_drvdata(dev);
272 ret = set_device_name(trigger_data, buf, size);
284 struct led_netdev_data *trigger_data = led_trigger_get_drvdata(dev);
302 return sprintf(buf, "%u\n", test_bit(bit, &trigger_data->mode));
308 struct led_netdev_data *trigger_data = led_trigger_get_drvdata(dev);
309 unsigned long state, mode = trigger_data->mode;
343 cancel_delayed_work_sync(&trigger_data->work);
345 trigger_data->mode = mode;
346 trigger_data->hw_control = can_hw_control(trigger_data);
348 set_baseline_state(trigger_data);
378 struct led_netdev_data *trigger_data = led_trigger_get_drvdata(dev);
381 jiffies_to_msecs(atomic_read(&trigger_data->interval)));
388 struct led_netdev_data *trigger_data = led_trigger_get_drvdata(dev);
392 if (trigger_data->hw_control)
401 cancel_delayed_work_sync(&trigger_data->work);
403 atomic_set(&trigger_data->interval, msecs_to_jiffies(value));
404 set_baseline_state(trigger_data); /* resets timer */
415 struct led_netdev_data *trigger_data = led_trigger_get_drvdata(dev);
417 return sprintf(buf, "%d\n", trigger_data->hw_control);
443 struct led_netdev_data *trigger_data =
451 if (!(dev == trigger_data->net_dev ||
452 (evt == NETDEV_CHANGENAME && !strcmp(dev->name, trigger_data->device_name)) ||
453 (evt == NETDEV_REGISTER && !strcmp(dev->name, trigger_data->device_name))))
456 cancel_delayed_work_sync(&trigger_data->work);
458 mutex_lock(&trigger_data->lock);
460 trigger_data->carrier_link_up = false;
461 trigger_data->link_speed = SPEED_UNKNOWN;
462 trigger_data->duplex = DUPLEX_UNKNOWN;
466 dev_put(trigger_data->net_dev);
468 trigger_data->net_dev = dev;
470 get_device_state(trigger_data);
473 dev_put(trigger_data->net_dev);
474 trigger_data->net_dev = NULL;
478 get_device_state(trigger_data);
482 set_baseline_state(trigger_data);
484 mutex_unlock(&trigger_data->lock);
492 struct led_netdev_data *trigger_data =
501 if (!trigger_data->net_dev) {
502 led_set_brightness(trigger_data->led_cdev, LED_OFF);
507 if (!test_bit(TRIGGER_NETDEV_TX, &trigger_data->mode) &&
508 !test_bit(TRIGGER_NETDEV_RX, &trigger_data->mode))
511 dev_stats = dev_get_stats(trigger_data->net_dev, &temp);
513 (test_bit(TRIGGER_NETDEV_TX, &trigger_data->mode) ?
515 (test_bit(TRIGGER_NETDEV_RX, &trigger_data->mode) ?
518 if (trigger_data->last_activity != new_activity) {
519 led_stop_software_blink(trigger_data->led_cdev);
521 invert = test_bit(TRIGGER_NETDEV_LINK, &trigger_data->mode) ||
522 test_bit(TRIGGER_NETDEV_LINK_10, &trigger_data->mode) ||
523 test_bit(TRIGGER_NETDEV_LINK_100, &trigger_data->mode) ||
524 test_bit(TRIGGER_NETDEV_LINK_1000, &trigger_data->mode) ||
525 test_bit(TRIGGER_NETDEV_HALF_DUPLEX, &trigger_data->mode) ||
526 test_bit(TRIGGER_NETDEV_FULL_DUPLEX, &trigger_data->mode);
528 atomic_read(&trigger_data->interval));
530 led_blink_set_oneshot(trigger_data->led_cdev,
534 trigger_data->last_activity = new_activity;
537 schedule_delayed_work(&trigger_data->work,
538 (atomic_read(&trigger_data->interval)*2));
543 struct led_netdev_data *trigger_data;
548 trigger_data = kzalloc(sizeof(struct led_netdev_data), GFP_KERNEL);
549 if (!trigger_data)
552 mutex_init(&trigger_data->lock);
554 trigger_data->notifier.notifier_call = netdev_trig_notify;
555 trigger_data->notifier.priority = 10;
557 INIT_DELAYED_WORK(&trigger_data->work, netdev_trig_work);
559 trigger_data->led_cdev = led_cdev;
560 trigger_data->net_dev = NULL;
561 trigger_data->device_name[0] = 0;
563 trigger_data->mode = 0;
564 atomic_set(&trigger_data->interval, msecs_to_jiffies(NETDEV_LED_DEFAULT_INTERVAL));
565 trigger_data->last_activity = 0;
575 set_device_name(trigger_data, name, strlen(name));
576 trigger_data->hw_control = true;
580 trigger_data->mode = mode;
584 led_set_trigger_data(led_cdev, trigger_data);
586 rc = register_netdevice_notifier(&trigger_data->notifier);
588 kfree(trigger_data);
595 struct led_netdev_data *trigger_data = led_get_trigger_data(led_cdev);
597 unregister_netdevice_notifier(&trigger_data->notifier);
599 cancel_delayed_work_sync(&trigger_data->work);
603 dev_put(trigger_data->net_dev);
605 kfree(trigger_data);