/** * connman_device_register: * @device: device structure * * Register device with the system */ int connman_device_register(struct connman_device *device) { GSList *list; DBG("device %p name %s", device, device->name); if (device->driver != NULL) return -EALREADY; for (list = driver_list; list; list = list->next) { struct connman_device_driver *driver = list->data; if (match_driver(device, driver) == FALSE) continue; DBG("driver %p name %s", driver, driver->name); if (driver->probe(device) == 0) { device->driver = driver; break; } } if (device->driver == NULL) return 0; return __connman_technology_add_device(device); }
/** * connman_technology_driver_register: * @driver: Technology driver definition * * Register a new technology driver * * Returns: %0 on success */ int connman_technology_driver_register(struct connman_technology_driver *driver) { GSList *list; struct connman_device *device; enum connman_service_type type; DBG("Registering %s driver", driver->name); driver_list = g_slist_insert_sorted(driver_list, driver, compare_priority); /* * Check for technology less devices if this driver * can service any of them. */ for (list = techless_device_list; list != NULL; list = list->next) { device = list->data; type = __connman_device_get_service_type(device); if (type != driver->type) continue; techless_device_list = g_slist_remove(techless_device_list, device); __connman_technology_add_device(device); } /* Check for orphaned rfkill switches. */ g_hash_table_foreach(rfkill_list, rfkill_check, GINT_TO_POINTER(driver->type)); return 0; }
static int setup_device(struct connman_device *device) { DBG("device %p", device); __connman_technology_add_device(device); if (device->offlinemode == FALSE && device->powered_persistent == TRUE) __connman_device_enable(device); return 0; }
static void probe_driver(struct connman_device_driver *driver) { GSList *list; DBG("driver %p name %s", driver, driver->name); for (list = device_list; list != NULL; list = list->next) { struct connman_device *device = list->data; if (device->driver != NULL) continue; if (driver->type != device->type) continue; if (driver->probe(device) < 0) continue; device->driver = driver; __connman_technology_add_device(device); } }