From ff3764ce28e0672d8290e925d13a34ddbf38c984 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sat, 19 Jun 2021 08:11:21 +0200 Subject: device: move hotplug handling logic from system-linux.c to device.c Preparation for dealing with wifi per-station devices Signed-off-by: Felix Fietkau --- device.c | 11 +++++++++++ device.h | 1 + system-linux.c | 40 ++++++---------------------------------- 3 files changed, 18 insertions(+), 34 deletions(-) diff --git a/device.c b/device.c index 9bad507..d8617fc 100644 --- a/device.c +++ b/device.c @@ -1208,3 +1208,14 @@ static void __init simple_device_type_init(void) { device_type_add(&simple_device_type); } + +void device_hotplug_event(const char *name, bool add) +{ + struct device *dev; + + dev = device_find(name); + if (!dev || dev->type != &simple_device_type) + return; + + device_set_present(dev, add); +} diff --git a/device.h b/device.h index db6dc33..7d6c48b 100644 --- a/device.h +++ b/device.h @@ -356,5 +356,6 @@ device_link_active(struct device *dev) } bool device_check_ip6segmentrouting(void); +void device_hotplug_event(const char *name, bool add); #endif diff --git a/system-linux.c b/system-linux.c index b9e440e..d914a20 100644 --- a/system-linux.c +++ b/system-linux.c @@ -678,18 +678,13 @@ handle_hotplug_msg(char *data, int size) { const char *subsystem = NULL, *interface = NULL, *interface_old = NULL; char *cur, *end, *sep; - struct device *dev; int skip; - bool add, move = false; + bool add; - if (!strncmp(data, "add@", 4)) + if (!strncmp(data, "add@", 4) || !strncmp(data, "move@", 5)) add = true; else if (!strncmp(data, "remove@", 7)) add = false; - else if (!strncmp(data, "move@", 5)) { - add = true; - move = true; - } else return; @@ -717,36 +712,13 @@ handle_hotplug_msg(char *data, int size) } } - if (subsystem && interface) { - if (move && interface_old) - goto move; - else - goto found; - } - - return; - -move: - dev = device_find(interface_old); - if (!dev) + if (!subsystem || !interface) return; - if (dev->type != &simple_device_type) - goto found; - - device_set_present(dev, false); - - return; - -found: - dev = device_find(interface); - if (!dev) - return; - - if (dev->type != &simple_device_type) - return; + if (interface_old) + device_hotplug_event(interface_old, false); - device_set_present(dev, add); + device_hotplug_event(interface, add); } static void -- cgit v1.2.1