in svc.c [837:875]
static int gb_svc_hello(struct gb_operation *op)
{
struct gb_connection *connection = op->connection;
struct gb_svc *svc = gb_connection_get_data(connection);
struct gb_svc_hello_request *hello_request;
int ret;
if (op->request->payload_size < sizeof(*hello_request)) {
dev_warn(&svc->dev, "short hello request (%zu < %zu)\n",
op->request->payload_size,
sizeof(*hello_request));
return -EINVAL;
}
hello_request = op->request->payload;
svc->endo_id = le16_to_cpu(hello_request->endo_id);
svc->ap_intf_id = hello_request->interface_id;
ret = device_add(&svc->dev);
if (ret) {
dev_err(&svc->dev, "failed to register svc device: %d\n", ret);
return ret;
}
ret = gb_svc_watchdog_create(svc);
if (ret) {
dev_err(&svc->dev, "failed to create watchdog: %d\n", ret);
goto err_unregister_device;
}
gb_svc_debugfs_init(svc);
return gb_svc_queue_deferred_request(op);
err_unregister_device:
gb_svc_watchdog_destroy(svc);
device_del(&svc->dev);
return ret;
}