qmi: assume version_list is up to date

The way things are currently coded, the gobi plugin calls
qmi_device_discover and does nothing else until it succeeds.  As such,
we can safely assume that the version_list is set up when we go to
create a service.
This commit is contained in:
Jonas Bonn 2018-04-03 16:50:54 +02:00 committed by Denis Kenzior
parent 81180147cf
commit 76471964e2
1 changed files with 19 additions and 37 deletions

View File

@ -1989,43 +1989,22 @@ done:
__qmi_device_discovery_complete(data->device, &data->super);
}
static void service_create_discover(uint8_t count,
const struct qmi_version *list, void *user_data)
{
struct service_create_data *data = user_data;
struct qmi_device *device = data->device;
struct qmi_request *req;
unsigned char client_req[] = { 0x01, 0x01, 0x00, data->type };
unsigned int i;
__debug_device(device, "service create [type=%d]", data->type);
for (i = 0; i < count; i++) {
if (list[i].type == data->type) {
data->major = list[i].major;
data->minor = list[i].minor;
break;
}
}
req = __request_alloc(QMI_SERVICE_CONTROL, 0x00,
QMI_CTL_GET_CLIENT_ID,
client_req, sizeof(client_req),
service_create_callback, data);
__request_submit(device, req);
}
static bool service_create(struct qmi_device *device, bool shared,
uint8_t type, qmi_create_func_t func,
void *user_data, qmi_destroy_func_t destroy)
{
struct service_create_data *data;
unsigned char client_req[] = { 0x01, 0x01, 0x00, type };
struct qmi_request *req;
int i;
data = g_try_new0(struct service_create_data, 1);
if (!data)
return false;
if (!device->version_list)
return false;
data->super.destroy = service_create_data_free;
data->device = device;
data->shared = shared;
@ -2034,20 +2013,23 @@ static bool service_create(struct qmi_device *device, bool shared,
data->user_data = user_data;
data->destroy = destroy;
if (device->version_list) {
service_create_discover(device->version_count,
device->version_list, data);
goto done;
__debug_device(device, "service create [type=%d]", type);
for (i = 0; i < device->version_count; i++) {
if (device->version_list[i].type == data->type) {
data->major = device->version_list[i].major;
data->minor = device->version_list[i].minor;
break;
}
}
if (qmi_device_discover(device, service_create_discover, data, NULL))
goto done;
req = __request_alloc(QMI_SERVICE_CONTROL, 0x00,
QMI_CTL_GET_CLIENT_ID,
client_req, sizeof(client_req),
service_create_callback, data);
g_free(data);
__request_submit(device, req);
return false;
done:
data->timeout = g_timeout_add_seconds(8, service_create_reply, data);
__qmi_device_discovery_started(device, &data->super);