proxy_dev 55 drivers/char/tpm/tpm_vtpm_proxy.c static void vtpm_proxy_delete_device(struct proxy_dev *proxy_dev); proxy_dev 75 drivers/char/tpm/tpm_vtpm_proxy.c struct proxy_dev *proxy_dev = filp->private_data; proxy_dev 79 drivers/char/tpm/tpm_vtpm_proxy.c sig = wait_event_interruptible(proxy_dev->wq, proxy_dev 80 drivers/char/tpm/tpm_vtpm_proxy.c proxy_dev->req_len != 0 || proxy_dev 81 drivers/char/tpm/tpm_vtpm_proxy.c !(proxy_dev->state & STATE_OPENED_FLAG)); proxy_dev 85 drivers/char/tpm/tpm_vtpm_proxy.c mutex_lock(&proxy_dev->buf_lock); proxy_dev 87 drivers/char/tpm/tpm_vtpm_proxy.c if (!(proxy_dev->state & STATE_OPENED_FLAG)) { proxy_dev 88 drivers/char/tpm/tpm_vtpm_proxy.c mutex_unlock(&proxy_dev->buf_lock); proxy_dev 92 drivers/char/tpm/tpm_vtpm_proxy.c len = proxy_dev->req_len; proxy_dev 95 drivers/char/tpm/tpm_vtpm_proxy.c mutex_unlock(&proxy_dev->buf_lock); proxy_dev 101 drivers/char/tpm/tpm_vtpm_proxy.c rc = copy_to_user(buf, proxy_dev->buffer, len); proxy_dev 102 drivers/char/tpm/tpm_vtpm_proxy.c memset(proxy_dev->buffer, 0, len); proxy_dev 103 drivers/char/tpm/tpm_vtpm_proxy.c proxy_dev->req_len = 0; proxy_dev 106 drivers/char/tpm/tpm_vtpm_proxy.c proxy_dev->state |= STATE_WAIT_RESPONSE_FLAG; proxy_dev 108 drivers/char/tpm/tpm_vtpm_proxy.c mutex_unlock(&proxy_dev->buf_lock); proxy_dev 130 drivers/char/tpm/tpm_vtpm_proxy.c struct proxy_dev *proxy_dev = filp->private_data; proxy_dev 132 drivers/char/tpm/tpm_vtpm_proxy.c mutex_lock(&proxy_dev->buf_lock); proxy_dev 134 drivers/char/tpm/tpm_vtpm_proxy.c if (!(proxy_dev->state & STATE_OPENED_FLAG)) { proxy_dev 135 drivers/char/tpm/tpm_vtpm_proxy.c mutex_unlock(&proxy_dev->buf_lock); proxy_dev 139 drivers/char/tpm/tpm_vtpm_proxy.c if (count > sizeof(proxy_dev->buffer) || proxy_dev 140 drivers/char/tpm/tpm_vtpm_proxy.c !(proxy_dev->state & STATE_WAIT_RESPONSE_FLAG)) { proxy_dev 141 drivers/char/tpm/tpm_vtpm_proxy.c mutex_unlock(&proxy_dev->buf_lock); proxy_dev 145 drivers/char/tpm/tpm_vtpm_proxy.c proxy_dev->state &= ~STATE_WAIT_RESPONSE_FLAG; proxy_dev 147 drivers/char/tpm/tpm_vtpm_proxy.c proxy_dev->req_len = 0; proxy_dev 149 drivers/char/tpm/tpm_vtpm_proxy.c if (copy_from_user(proxy_dev->buffer, buf, count)) { proxy_dev 150 drivers/char/tpm/tpm_vtpm_proxy.c mutex_unlock(&proxy_dev->buf_lock); proxy_dev 154 drivers/char/tpm/tpm_vtpm_proxy.c proxy_dev->resp_len = count; proxy_dev 156 drivers/char/tpm/tpm_vtpm_proxy.c mutex_unlock(&proxy_dev->buf_lock); proxy_dev 158 drivers/char/tpm/tpm_vtpm_proxy.c wake_up_interruptible(&proxy_dev->wq); proxy_dev 173 drivers/char/tpm/tpm_vtpm_proxy.c struct proxy_dev *proxy_dev = filp->private_data; proxy_dev 176 drivers/char/tpm/tpm_vtpm_proxy.c poll_wait(filp, &proxy_dev->wq, wait); proxy_dev 180 drivers/char/tpm/tpm_vtpm_proxy.c mutex_lock(&proxy_dev->buf_lock); proxy_dev 182 drivers/char/tpm/tpm_vtpm_proxy.c if (proxy_dev->req_len) proxy_dev 185 drivers/char/tpm/tpm_vtpm_proxy.c if (!(proxy_dev->state & STATE_OPENED_FLAG)) proxy_dev 188 drivers/char/tpm/tpm_vtpm_proxy.c mutex_unlock(&proxy_dev->buf_lock); proxy_dev 202 drivers/char/tpm/tpm_vtpm_proxy.c struct proxy_dev *proxy_dev = filp->private_data; proxy_dev 204 drivers/char/tpm/tpm_vtpm_proxy.c proxy_dev->state |= STATE_OPENED_FLAG; proxy_dev 213 drivers/char/tpm/tpm_vtpm_proxy.c static void vtpm_proxy_fops_undo_open(struct proxy_dev *proxy_dev) proxy_dev 215 drivers/char/tpm/tpm_vtpm_proxy.c mutex_lock(&proxy_dev->buf_lock); proxy_dev 217 drivers/char/tpm/tpm_vtpm_proxy.c proxy_dev->state &= ~STATE_OPENED_FLAG; proxy_dev 219 drivers/char/tpm/tpm_vtpm_proxy.c mutex_unlock(&proxy_dev->buf_lock); proxy_dev 222 drivers/char/tpm/tpm_vtpm_proxy.c wake_up_interruptible(&proxy_dev->wq); proxy_dev 235 drivers/char/tpm/tpm_vtpm_proxy.c struct proxy_dev *proxy_dev = filp->private_data; proxy_dev 239 drivers/char/tpm/tpm_vtpm_proxy.c vtpm_proxy_delete_device(proxy_dev); proxy_dev 269 drivers/char/tpm/tpm_vtpm_proxy.c struct proxy_dev *proxy_dev = dev_get_drvdata(&chip->dev); proxy_dev 273 drivers/char/tpm/tpm_vtpm_proxy.c mutex_lock(&proxy_dev->buf_lock); proxy_dev 275 drivers/char/tpm/tpm_vtpm_proxy.c if (!(proxy_dev->state & STATE_OPENED_FLAG)) { proxy_dev 276 drivers/char/tpm/tpm_vtpm_proxy.c mutex_unlock(&proxy_dev->buf_lock); proxy_dev 280 drivers/char/tpm/tpm_vtpm_proxy.c len = proxy_dev->resp_len; proxy_dev 289 drivers/char/tpm/tpm_vtpm_proxy.c memcpy(buf, proxy_dev->buffer, len); proxy_dev 290 drivers/char/tpm/tpm_vtpm_proxy.c proxy_dev->resp_len = 0; proxy_dev 293 drivers/char/tpm/tpm_vtpm_proxy.c mutex_unlock(&proxy_dev->buf_lock); proxy_dev 332 drivers/char/tpm/tpm_vtpm_proxy.c struct proxy_dev *proxy_dev = dev_get_drvdata(&chip->dev); proxy_dev 334 drivers/char/tpm/tpm_vtpm_proxy.c if (count > sizeof(proxy_dev->buffer)) { proxy_dev 337 drivers/char/tpm/tpm_vtpm_proxy.c count, sizeof(proxy_dev->buffer)); proxy_dev 341 drivers/char/tpm/tpm_vtpm_proxy.c if (!(proxy_dev->state & STATE_DRIVER_COMMAND) && proxy_dev 345 drivers/char/tpm/tpm_vtpm_proxy.c mutex_lock(&proxy_dev->buf_lock); proxy_dev 347 drivers/char/tpm/tpm_vtpm_proxy.c if (!(proxy_dev->state & STATE_OPENED_FLAG)) { proxy_dev 348 drivers/char/tpm/tpm_vtpm_proxy.c mutex_unlock(&proxy_dev->buf_lock); proxy_dev 352 drivers/char/tpm/tpm_vtpm_proxy.c proxy_dev->resp_len = 0; proxy_dev 354 drivers/char/tpm/tpm_vtpm_proxy.c proxy_dev->req_len = count; proxy_dev 355 drivers/char/tpm/tpm_vtpm_proxy.c memcpy(proxy_dev->buffer, buf, count); proxy_dev 357 drivers/char/tpm/tpm_vtpm_proxy.c proxy_dev->state &= ~STATE_WAIT_RESPONSE_FLAG; proxy_dev 359 drivers/char/tpm/tpm_vtpm_proxy.c mutex_unlock(&proxy_dev->buf_lock); proxy_dev 361 drivers/char/tpm/tpm_vtpm_proxy.c wake_up_interruptible(&proxy_dev->wq); proxy_dev 373 drivers/char/tpm/tpm_vtpm_proxy.c struct proxy_dev *proxy_dev = dev_get_drvdata(&chip->dev); proxy_dev 375 drivers/char/tpm/tpm_vtpm_proxy.c if (proxy_dev->resp_len) proxy_dev 383 drivers/char/tpm/tpm_vtpm_proxy.c struct proxy_dev *proxy_dev = dev_get_drvdata(&chip->dev); proxy_dev 386 drivers/char/tpm/tpm_vtpm_proxy.c mutex_lock(&proxy_dev->buf_lock); proxy_dev 388 drivers/char/tpm/tpm_vtpm_proxy.c ret = !(proxy_dev->state & STATE_OPENED_FLAG); proxy_dev 390 drivers/char/tpm/tpm_vtpm_proxy.c mutex_unlock(&proxy_dev->buf_lock); proxy_dev 400 drivers/char/tpm/tpm_vtpm_proxy.c struct proxy_dev *proxy_dev = dev_get_drvdata(&chip->dev); proxy_dev 412 drivers/char/tpm/tpm_vtpm_proxy.c proxy_dev->state |= STATE_DRIVER_COMMAND; proxy_dev 416 drivers/char/tpm/tpm_vtpm_proxy.c proxy_dev->state &= ~STATE_DRIVER_COMMAND; proxy_dev 453 drivers/char/tpm/tpm_vtpm_proxy.c struct proxy_dev *proxy_dev = container_of(work, struct proxy_dev, proxy_dev 457 drivers/char/tpm/tpm_vtpm_proxy.c rc = tpm_chip_register(proxy_dev->chip); proxy_dev 459 drivers/char/tpm/tpm_vtpm_proxy.c vtpm_proxy_fops_undo_open(proxy_dev); proxy_dev 461 drivers/char/tpm/tpm_vtpm_proxy.c proxy_dev->state |= STATE_REGISTERED_FLAG; proxy_dev 470 drivers/char/tpm/tpm_vtpm_proxy.c static void vtpm_proxy_work_stop(struct proxy_dev *proxy_dev) proxy_dev 472 drivers/char/tpm/tpm_vtpm_proxy.c vtpm_proxy_fops_undo_open(proxy_dev); proxy_dev 473 drivers/char/tpm/tpm_vtpm_proxy.c flush_work(&proxy_dev->work); proxy_dev 479 drivers/char/tpm/tpm_vtpm_proxy.c static inline void vtpm_proxy_work_start(struct proxy_dev *proxy_dev) proxy_dev 481 drivers/char/tpm/tpm_vtpm_proxy.c queue_work(workqueue, &proxy_dev->work); proxy_dev 487 drivers/char/tpm/tpm_vtpm_proxy.c static struct proxy_dev *vtpm_proxy_create_proxy_dev(void) proxy_dev 489 drivers/char/tpm/tpm_vtpm_proxy.c struct proxy_dev *proxy_dev; proxy_dev 493 drivers/char/tpm/tpm_vtpm_proxy.c proxy_dev = kzalloc(sizeof(*proxy_dev), GFP_KERNEL); proxy_dev 494 drivers/char/tpm/tpm_vtpm_proxy.c if (proxy_dev == NULL) proxy_dev 497 drivers/char/tpm/tpm_vtpm_proxy.c init_waitqueue_head(&proxy_dev->wq); proxy_dev 498 drivers/char/tpm/tpm_vtpm_proxy.c mutex_init(&proxy_dev->buf_lock); proxy_dev 499 drivers/char/tpm/tpm_vtpm_proxy.c INIT_WORK(&proxy_dev->work, vtpm_proxy_work); proxy_dev 506 drivers/char/tpm/tpm_vtpm_proxy.c dev_set_drvdata(&chip->dev, proxy_dev); proxy_dev 508 drivers/char/tpm/tpm_vtpm_proxy.c proxy_dev->chip = chip; proxy_dev 510 drivers/char/tpm/tpm_vtpm_proxy.c return proxy_dev; proxy_dev 513 drivers/char/tpm/tpm_vtpm_proxy.c kfree(proxy_dev); proxy_dev 521 drivers/char/tpm/tpm_vtpm_proxy.c static inline void vtpm_proxy_delete_proxy_dev(struct proxy_dev *proxy_dev) proxy_dev 523 drivers/char/tpm/tpm_vtpm_proxy.c put_device(&proxy_dev->chip->dev); /* frees chip */ proxy_dev 524 drivers/char/tpm/tpm_vtpm_proxy.c kfree(proxy_dev); proxy_dev 536 drivers/char/tpm/tpm_vtpm_proxy.c struct proxy_dev *proxy_dev; proxy_dev 543 drivers/char/tpm/tpm_vtpm_proxy.c proxy_dev = vtpm_proxy_create_proxy_dev(); proxy_dev 544 drivers/char/tpm/tpm_vtpm_proxy.c if (IS_ERR(proxy_dev)) proxy_dev 545 drivers/char/tpm/tpm_vtpm_proxy.c return ERR_CAST(proxy_dev); proxy_dev 547 drivers/char/tpm/tpm_vtpm_proxy.c proxy_dev->flags = vtpm_new_dev->flags; proxy_dev 556 drivers/char/tpm/tpm_vtpm_proxy.c file = anon_inode_getfile("[vtpms]", &vtpm_proxy_fops, proxy_dev, proxy_dev 567 drivers/char/tpm/tpm_vtpm_proxy.c if (proxy_dev->flags & VTPM_PROXY_FLAG_TPM2) proxy_dev 568 drivers/char/tpm/tpm_vtpm_proxy.c proxy_dev->chip->flags |= TPM_CHIP_FLAG_TPM2; proxy_dev 570 drivers/char/tpm/tpm_vtpm_proxy.c vtpm_proxy_work_start(proxy_dev); proxy_dev 573 drivers/char/tpm/tpm_vtpm_proxy.c vtpm_new_dev->major = MAJOR(proxy_dev->chip->dev.devt); proxy_dev 574 drivers/char/tpm/tpm_vtpm_proxy.c vtpm_new_dev->minor = MINOR(proxy_dev->chip->dev.devt); proxy_dev 575 drivers/char/tpm/tpm_vtpm_proxy.c vtpm_new_dev->tpm_num = proxy_dev->chip->dev_num; proxy_dev 583 drivers/char/tpm/tpm_vtpm_proxy.c vtpm_proxy_delete_proxy_dev(proxy_dev); proxy_dev 591 drivers/char/tpm/tpm_vtpm_proxy.c static void vtpm_proxy_delete_device(struct proxy_dev *proxy_dev) proxy_dev 593 drivers/char/tpm/tpm_vtpm_proxy.c vtpm_proxy_work_stop(proxy_dev); proxy_dev 600 drivers/char/tpm/tpm_vtpm_proxy.c vtpm_proxy_fops_undo_open(proxy_dev); proxy_dev 602 drivers/char/tpm/tpm_vtpm_proxy.c if (proxy_dev->state & STATE_REGISTERED_FLAG) proxy_dev 603 drivers/char/tpm/tpm_vtpm_proxy.c tpm_chip_unregister(proxy_dev->chip); proxy_dev 605 drivers/char/tpm/tpm_vtpm_proxy.c vtpm_proxy_delete_proxy_dev(proxy_dev);