Symbol: fw_mgmt
drivers/staging/greybus/fw-management.c
104
return fw_mgmt;
drivers/staging/greybus/fw-management.c
107
static int fw_mgmt_interface_fw_version_operation(struct fw_mgmt *fw_mgmt,
drivers/staging/greybus/fw-management.c
110
struct gb_connection *connection = fw_mgmt->connection;
drivers/staging/greybus/fw-management.c
118
dev_err(fw_mgmt->parent,
drivers/staging/greybus/fw-management.c
128
dev_err(fw_mgmt->parent,
drivers/staging/greybus/fw-management.c
135
static int fw_mgmt_load_and_validate_operation(struct fw_mgmt *fw_mgmt,
drivers/staging/greybus/fw-management.c
143
dev_err(fw_mgmt->parent,
drivers/staging/greybus/fw-management.c
152
dev_err(fw_mgmt->parent,
drivers/staging/greybus/fw-management.c
159
ret = ida_alloc_range(&fw_mgmt->id_map, 1, 255, GFP_KERNEL);
drivers/staging/greybus/fw-management.c
161
dev_err(fw_mgmt->parent, "failed to allocate request id (%d)\n",
drivers/staging/greybus/fw-management.c
166
fw_mgmt->intf_fw_request_id = ret;
drivers/staging/greybus/fw-management.c
167
fw_mgmt->intf_fw_loaded = false;
drivers/staging/greybus/fw-management.c
170
ret = gb_operation_sync(fw_mgmt->connection,
drivers/staging/greybus/fw-management.c
174
ida_free(&fw_mgmt->id_map, fw_mgmt->intf_fw_request_id);
drivers/staging/greybus/fw-management.c
175
fw_mgmt->intf_fw_request_id = 0;
drivers/staging/greybus/fw-management.c
176
dev_err(fw_mgmt->parent,
drivers/staging/greybus/fw-management.c
188
struct fw_mgmt *fw_mgmt = gb_connection_get_data(connection);
drivers/staging/greybus/fw-management.c
192
if (!fw_mgmt->intf_fw_request_id) {
drivers/staging/greybus/fw-management.c
193
dev_err(fw_mgmt->parent,
drivers/staging/greybus/fw-management.c
199
dev_err(fw_mgmt->parent, "illegal size of firmware loaded request (%zu != %zu)\n",
drivers/staging/greybus/fw-management.c
207
if (request->request_id != fw_mgmt->intf_fw_request_id) {
drivers/staging/greybus/fw-management.c
208
dev_err(fw_mgmt->parent, "invalid request id for firmware loaded request (%02u != %02u)\n",
drivers/staging/greybus/fw-management.c
209
fw_mgmt->intf_fw_request_id, request->request_id);
drivers/staging/greybus/fw-management.c
213
ida_free(&fw_mgmt->id_map, fw_mgmt->intf_fw_request_id);
drivers/staging/greybus/fw-management.c
214
fw_mgmt->intf_fw_request_id = 0;
drivers/staging/greybus/fw-management.c
215
fw_mgmt->intf_fw_status = request->status;
drivers/staging/greybus/fw-management.c
216
fw_mgmt->intf_fw_major = le16_to_cpu(request->major);
drivers/staging/greybus/fw-management.c
217
fw_mgmt->intf_fw_minor = le16_to_cpu(request->minor);
drivers/staging/greybus/fw-management.c
219
if (fw_mgmt->intf_fw_status == GB_FW_LOAD_STATUS_FAILED)
drivers/staging/greybus/fw-management.c
220
dev_err(fw_mgmt->parent,
drivers/staging/greybus/fw-management.c
222
fw_mgmt->intf_fw_status);
drivers/staging/greybus/fw-management.c
223
else if (fw_mgmt->intf_fw_status == GB_FW_LOAD_STATUS_VALIDATION_FAILED)
drivers/staging/greybus/fw-management.c
224
dev_err(fw_mgmt->parent,
drivers/staging/greybus/fw-management.c
226
fw_mgmt->intf_fw_status);
drivers/staging/greybus/fw-management.c
228
fw_mgmt->intf_fw_loaded = true;
drivers/staging/greybus/fw-management.c
230
complete(&fw_mgmt->completion);
drivers/staging/greybus/fw-management.c
235
static int fw_mgmt_backend_fw_version_operation(struct fw_mgmt *fw_mgmt,
drivers/staging/greybus/fw-management.c
238
struct gb_connection *connection = fw_mgmt->connection;
drivers/staging/greybus/fw-management.c
245
dev_err(fw_mgmt->parent,
drivers/staging/greybus/fw-management.c
255
dev_err(fw_mgmt->parent, "failed to get version of %s backend firmware (%d)\n",
drivers/staging/greybus/fw-management.c
275
dev_err(fw_mgmt->parent,
drivers/staging/greybus/fw-management.c
280
dev_err(fw_mgmt->parent, "Invalid status received: %u\n",
drivers/staging/greybus/fw-management.c
287
static int fw_mgmt_backend_fw_update_operation(struct fw_mgmt *fw_mgmt,
drivers/staging/greybus/fw-management.c
295
dev_err(fw_mgmt->parent,
drivers/staging/greybus/fw-management.c
302
ret = ida_alloc_range(&fw_mgmt->id_map, 1, 255, GFP_KERNEL);
drivers/staging/greybus/fw-management.c
304
dev_err(fw_mgmt->parent, "failed to allocate request id (%d)\n",
drivers/staging/greybus/fw-management.c
309
fw_mgmt->backend_fw_request_id = ret;
drivers/staging/greybus/fw-management.c
312
ret = gb_operation_sync(fw_mgmt->connection,
drivers/staging/greybus/fw-management.c
316
ida_free(&fw_mgmt->id_map, fw_mgmt->backend_fw_request_id);
drivers/staging/greybus/fw-management.c
317
fw_mgmt->backend_fw_request_id = 0;
drivers/staging/greybus/fw-management.c
318
dev_err(fw_mgmt->parent,
drivers/staging/greybus/fw-management.c
330
struct fw_mgmt *fw_mgmt = gb_connection_get_data(connection);
drivers/staging/greybus/fw-management.c
334
if (!fw_mgmt->backend_fw_request_id) {
drivers/staging/greybus/fw-management.c
335
dev_err(fw_mgmt->parent, "unexpected backend firmware updated request received\n");
drivers/staging/greybus/fw-management.c
340
dev_err(fw_mgmt->parent, "illegal size of backend firmware updated request (%zu != %zu)\n",
drivers/staging/greybus/fw-management.c
348
if (request->request_id != fw_mgmt->backend_fw_request_id) {
drivers/staging/greybus/fw-management.c
349
dev_err(fw_mgmt->parent, "invalid request id for backend firmware updated request (%02u != %02u)\n",
drivers/staging/greybus/fw-management.c
350
fw_mgmt->backend_fw_request_id, request->request_id);
drivers/staging/greybus/fw-management.c
354
ida_free(&fw_mgmt->id_map, fw_mgmt->backend_fw_request_id);
drivers/staging/greybus/fw-management.c
355
fw_mgmt->backend_fw_request_id = 0;
drivers/staging/greybus/fw-management.c
356
fw_mgmt->backend_fw_status = request->status;
drivers/staging/greybus/fw-management.c
358
if ((fw_mgmt->backend_fw_status != GB_FW_BACKEND_FW_STATUS_SUCCESS) &&
drivers/staging/greybus/fw-management.c
359
(fw_mgmt->backend_fw_status != GB_FW_BACKEND_FW_STATUS_RETRY))
drivers/staging/greybus/fw-management.c
360
dev_err(fw_mgmt->parent,
drivers/staging/greybus/fw-management.c
362
fw_mgmt->backend_fw_status);
drivers/staging/greybus/fw-management.c
364
complete(&fw_mgmt->completion);
drivers/staging/greybus/fw-management.c
373
struct fw_mgmt *fw_mgmt = get_fw_mgmt(inode->i_cdev);
drivers/staging/greybus/fw-management.c
376
if (fw_mgmt) {
drivers/staging/greybus/fw-management.c
377
file->private_data = fw_mgmt;
drivers/staging/greybus/fw-management.c
386
struct fw_mgmt *fw_mgmt = file->private_data;
drivers/staging/greybus/fw-management.c
388
put_fw_mgmt(fw_mgmt);
drivers/staging/greybus/fw-management.c
392
static int fw_mgmt_ioctl(struct fw_mgmt *fw_mgmt, unsigned int cmd,
drivers/staging/greybus/fw-management.c
403
if (fw_mgmt->mode_switch_started)
drivers/staging/greybus/fw-management.c
408
ret = fw_mgmt_interface_fw_version_operation(fw_mgmt,
drivers/staging/greybus/fw-management.c
422
ret = fw_mgmt_backend_fw_version_operation(fw_mgmt,
drivers/staging/greybus/fw-management.c
436
ret = fw_mgmt_load_and_validate_operation(fw_mgmt,
drivers/staging/greybus/fw-management.c
441
if (!wait_for_completion_timeout(&fw_mgmt->completion,
drivers/staging/greybus/fw-management.c
442
fw_mgmt->timeout_jiffies)) {
drivers/staging/greybus/fw-management.c
443
dev_err(fw_mgmt->parent, "timed out waiting for firmware load and validation to finish\n");
drivers/staging/greybus/fw-management.c
447
intf_load.status = fw_mgmt->intf_fw_status;
drivers/staging/greybus/fw-management.c
448
intf_load.major = fw_mgmt->intf_fw_major;
drivers/staging/greybus/fw-management.c
449
intf_load.minor = fw_mgmt->intf_fw_minor;
drivers/staging/greybus/fw-management.c
460
ret = fw_mgmt_backend_fw_update_operation(fw_mgmt,
drivers/staging/greybus/fw-management.c
465
if (!wait_for_completion_timeout(&fw_mgmt->completion,
drivers/staging/greybus/fw-management.c
466
fw_mgmt->timeout_jiffies)) {
drivers/staging/greybus/fw-management.c
467
dev_err(fw_mgmt->parent, "timed out waiting for backend firmware update to finish\n");
drivers/staging/greybus/fw-management.c
471
backend_update.status = fw_mgmt->backend_fw_status;
drivers/staging/greybus/fw-management.c
482
dev_err(fw_mgmt->parent, "timeout can't be zero\n");
drivers/staging/greybus/fw-management.c
486
fw_mgmt->timeout_jiffies = msecs_to_jiffies(timeout);
drivers/staging/greybus/fw-management.c
490
if (!fw_mgmt->intf_fw_loaded) {
drivers/staging/greybus/fw-management.c
491
dev_err(fw_mgmt->parent,
drivers/staging/greybus/fw-management.c
501
fw_mgmt->mode_switch_started = true;
drivers/staging/greybus/fw-management.c
503
ret = gb_interface_request_mode_switch(fw_mgmt->connection->intf);
drivers/staging/greybus/fw-management.c
505
dev_err(fw_mgmt->parent, "Mode-switch failed: %d\n",
drivers/staging/greybus/fw-management.c
507
fw_mgmt->mode_switch_started = false;
drivers/staging/greybus/fw-management.c
520
struct fw_mgmt *fw_mgmt = file->private_data;
drivers/staging/greybus/fw-management.c
521
struct gb_bundle *bundle = fw_mgmt->connection->bundle;
drivers/staging/greybus/fw-management.c
536
mutex_lock(&fw_mgmt->mutex);
drivers/staging/greybus/fw-management.c
537
if (!fw_mgmt->disabled) {
drivers/staging/greybus/fw-management.c
540
ret = fw_mgmt_ioctl(fw_mgmt, cmd, (void __user *)arg);
drivers/staging/greybus/fw-management.c
544
mutex_unlock(&fw_mgmt->mutex);
drivers/staging/greybus/fw-management.c
574
struct fw_mgmt *fw_mgmt;
drivers/staging/greybus/fw-management.c
580
fw_mgmt = kzalloc_obj(*fw_mgmt);
drivers/staging/greybus/fw-management.c
581
if (!fw_mgmt)
drivers/staging/greybus/fw-management.c
584
fw_mgmt->parent = &connection->bundle->dev;
drivers/staging/greybus/fw-management.c
585
fw_mgmt->timeout_jiffies = msecs_to_jiffies(FW_MGMT_TIMEOUT_MS);
drivers/staging/greybus/fw-management.c
586
fw_mgmt->connection = connection;
drivers/staging/greybus/fw-management.c
588
gb_connection_set_data(connection, fw_mgmt);
drivers/staging/greybus/fw-management.c
589
init_completion(&fw_mgmt->completion);
drivers/staging/greybus/fw-management.c
590
ida_init(&fw_mgmt->id_map);
drivers/staging/greybus/fw-management.c
591
mutex_init(&fw_mgmt->mutex);
drivers/staging/greybus/fw-management.c
592
kref_init(&fw_mgmt->kref);
drivers/staging/greybus/fw-management.c
595
list_add(&fw_mgmt->node, &fw_mgmt_list);
drivers/staging/greybus/fw-management.c
609
fw_mgmt->dev_num = MKDEV(MAJOR(fw_mgmt_dev_num), minor);
drivers/staging/greybus/fw-management.c
610
cdev_init(&fw_mgmt->cdev, &fw_mgmt_fops);
drivers/staging/greybus/fw-management.c
612
ret = cdev_add(&fw_mgmt->cdev, fw_mgmt->dev_num, 1);
drivers/staging/greybus/fw-management.c
617
fw_mgmt->class_device = device_create(&fw_mgmt_class, fw_mgmt->parent,
drivers/staging/greybus/fw-management.c
618
fw_mgmt->dev_num, NULL,
drivers/staging/greybus/fw-management.c
620
if (IS_ERR(fw_mgmt->class_device)) {
drivers/staging/greybus/fw-management.c
621
ret = PTR_ERR(fw_mgmt->class_device);
drivers/staging/greybus/fw-management.c
628
cdev_del(&fw_mgmt->cdev);
drivers/staging/greybus/fw-management.c
635
list_del(&fw_mgmt->node);
drivers/staging/greybus/fw-management.c
638
put_fw_mgmt(fw_mgmt);
drivers/staging/greybus/fw-management.c
645
struct fw_mgmt *fw_mgmt;
drivers/staging/greybus/fw-management.c
650
fw_mgmt = gb_connection_get_data(connection);
drivers/staging/greybus/fw-management.c
652
device_destroy(&fw_mgmt_class, fw_mgmt->dev_num);
drivers/staging/greybus/fw-management.c
653
cdev_del(&fw_mgmt->cdev);
drivers/staging/greybus/fw-management.c
654
ida_free(&fw_mgmt_minors_map, MINOR(fw_mgmt->dev_num));
drivers/staging/greybus/fw-management.c
660
mutex_lock(&fw_mgmt->mutex);
drivers/staging/greybus/fw-management.c
661
fw_mgmt->disabled = true;
drivers/staging/greybus/fw-management.c
662
mutex_unlock(&fw_mgmt->mutex);
drivers/staging/greybus/fw-management.c
665
gb_connection_disable(fw_mgmt->connection);
drivers/staging/greybus/fw-management.c
669
list_del(&fw_mgmt->node);
drivers/staging/greybus/fw-management.c
677
put_fw_mgmt(fw_mgmt);
drivers/staging/greybus/fw-management.c
69
struct fw_mgmt *fw_mgmt = container_of(kref, struct fw_mgmt, kref);
drivers/staging/greybus/fw-management.c
71
ida_destroy(&fw_mgmt->id_map);
drivers/staging/greybus/fw-management.c
72
kfree(fw_mgmt);
drivers/staging/greybus/fw-management.c
80
static void put_fw_mgmt(struct fw_mgmt *fw_mgmt)
drivers/staging/greybus/fw-management.c
82
kref_put(&fw_mgmt->kref, fw_mgmt_kref_release);
drivers/staging/greybus/fw-management.c
86
static struct fw_mgmt *get_fw_mgmt(struct cdev *cdev)
drivers/staging/greybus/fw-management.c
88
struct fw_mgmt *fw_mgmt;
drivers/staging/greybus/fw-management.c
92
list_for_each_entry(fw_mgmt, &fw_mgmt_list, node) {
drivers/staging/greybus/fw-management.c
93
if (&fw_mgmt->cdev == cdev) {
drivers/staging/greybus/fw-management.c
94
kref_get(&fw_mgmt->kref);
drivers/staging/greybus/fw-management.c
99
fw_mgmt = NULL;