in svc.c [943:989]
static void gb_svc_process_module_inserted(struct gb_operation *operation)
{
struct gb_svc_module_inserted_request *request;
struct gb_connection *connection = operation->connection;
struct gb_svc *svc = gb_connection_get_data(connection);
struct gb_host_device *hd = svc->hd;
struct gb_module *module;
size_t num_interfaces;
u8 module_id;
u16 flags;
int ret;
/* The request message size has already been verified. */
request = operation->request->payload;
module_id = request->primary_intf_id;
num_interfaces = request->intf_count;
flags = le16_to_cpu(request->flags);
dev_dbg(&svc->dev, "%s - id = %u, num_interfaces = %zu, flags = 0x%04x\n",
__func__, module_id, num_interfaces, flags);
if (flags & GB_SVC_MODULE_INSERTED_FLAG_NO_PRIMARY) {
dev_warn(&svc->dev, "no primary interface detected on module %u\n",
module_id);
}
module = gb_svc_module_lookup(svc, module_id);
if (module) {
dev_warn(&svc->dev, "unexpected module-inserted event %u\n",
module_id);
return;
}
module = gb_module_create(hd, module_id, num_interfaces);
if (!module) {
dev_err(&svc->dev, "failed to create module\n");
return;
}
ret = gb_module_add(module);
if (ret) {
gb_module_put(module);
return;
}
list_add(&module->hd_node, &hd->modules);
}