ibmvtpm 106 drivers/char/tpm/tpm_ibmvtpm.c struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev); ibmvtpm 110 drivers/char/tpm/tpm_ibmvtpm.c if (!ibmvtpm->rtce_buf) { ibmvtpm 111 drivers/char/tpm/tpm_ibmvtpm.c dev_err(ibmvtpm->dev, "ibmvtpm device is not ready\n"); ibmvtpm 115 drivers/char/tpm/tpm_ibmvtpm.c sig = wait_event_interruptible(ibmvtpm->wq, !ibmvtpm->tpm_processing_cmd); ibmvtpm 119 drivers/char/tpm/tpm_ibmvtpm.c len = ibmvtpm->res_len; ibmvtpm 122 drivers/char/tpm/tpm_ibmvtpm.c dev_err(ibmvtpm->dev, ibmvtpm 128 drivers/char/tpm/tpm_ibmvtpm.c spin_lock(&ibmvtpm->rtce_lock); ibmvtpm 129 drivers/char/tpm/tpm_ibmvtpm.c memcpy((void *)buf, (void *)ibmvtpm->rtce_buf, len); ibmvtpm 130 drivers/char/tpm/tpm_ibmvtpm.c memset(ibmvtpm->rtce_buf, 0, len); ibmvtpm 131 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->res_len = 0; ibmvtpm 132 drivers/char/tpm/tpm_ibmvtpm.c spin_unlock(&ibmvtpm->rtce_lock); ibmvtpm 144 drivers/char/tpm/tpm_ibmvtpm.c static int ibmvtpm_crq_send_init(struct ibmvtpm_dev *ibmvtpm) ibmvtpm 148 drivers/char/tpm/tpm_ibmvtpm.c rc = ibmvtpm_send_crq_word(ibmvtpm->vdev, INIT_CRQ_CMD); ibmvtpm 150 drivers/char/tpm/tpm_ibmvtpm.c dev_err(ibmvtpm->dev, ibmvtpm 166 drivers/char/tpm/tpm_ibmvtpm.c struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev); ibmvtpm 173 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->vdev->unit_address); ibmvtpm 181 drivers/char/tpm/tpm_ibmvtpm.c rc = vio_enable_interrupts(ibmvtpm->vdev); ibmvtpm 187 drivers/char/tpm/tpm_ibmvtpm.c rc = ibmvtpm_crq_send_init(ibmvtpm); ibmvtpm 206 drivers/char/tpm/tpm_ibmvtpm.c struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev); ibmvtpm 210 drivers/char/tpm/tpm_ibmvtpm.c if (!ibmvtpm->rtce_buf) { ibmvtpm 211 drivers/char/tpm/tpm_ibmvtpm.c dev_err(ibmvtpm->dev, "ibmvtpm device is not ready\n"); ibmvtpm 215 drivers/char/tpm/tpm_ibmvtpm.c if (count > ibmvtpm->rtce_size) { ibmvtpm 216 drivers/char/tpm/tpm_ibmvtpm.c dev_err(ibmvtpm->dev, ibmvtpm 218 drivers/char/tpm/tpm_ibmvtpm.c count, ibmvtpm->rtce_size); ibmvtpm 222 drivers/char/tpm/tpm_ibmvtpm.c if (ibmvtpm->tpm_processing_cmd) { ibmvtpm 223 drivers/char/tpm/tpm_ibmvtpm.c dev_info(ibmvtpm->dev, ibmvtpm 226 drivers/char/tpm/tpm_ibmvtpm.c sig = wait_event_interruptible(ibmvtpm->wq, !ibmvtpm->tpm_processing_cmd); ibmvtpm 231 drivers/char/tpm/tpm_ibmvtpm.c spin_lock(&ibmvtpm->rtce_lock); ibmvtpm 232 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->res_len = 0; ibmvtpm 233 drivers/char/tpm/tpm_ibmvtpm.c memcpy((void *)ibmvtpm->rtce_buf, (void *)buf, count); ibmvtpm 239 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->tpm_processing_cmd = true; ibmvtpm 242 drivers/char/tpm/tpm_ibmvtpm.c rc = ibmvtpm_send_crq(ibmvtpm->vdev, ibmvtpm 244 drivers/char/tpm/tpm_ibmvtpm.c count, ibmvtpm->rtce_dma_handle); ibmvtpm 252 drivers/char/tpm/tpm_ibmvtpm.c tpm_ibmvtpm_resume(ibmvtpm->dev); ibmvtpm 256 drivers/char/tpm/tpm_ibmvtpm.c dev_err(ibmvtpm->dev, "tpm_ibmvtpm_send failed rc=%d\n", rc); ibmvtpm 257 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->tpm_processing_cmd = false; ibmvtpm 260 drivers/char/tpm/tpm_ibmvtpm.c spin_unlock(&ibmvtpm->rtce_lock); ibmvtpm 283 drivers/char/tpm/tpm_ibmvtpm.c static int ibmvtpm_crq_get_rtce_size(struct ibmvtpm_dev *ibmvtpm) ibmvtpm 287 drivers/char/tpm/tpm_ibmvtpm.c rc = ibmvtpm_send_crq(ibmvtpm->vdev, ibmvtpm 290 drivers/char/tpm/tpm_ibmvtpm.c dev_err(ibmvtpm->dev, ibmvtpm 306 drivers/char/tpm/tpm_ibmvtpm.c static int ibmvtpm_crq_get_version(struct ibmvtpm_dev *ibmvtpm) ibmvtpm 310 drivers/char/tpm/tpm_ibmvtpm.c rc = ibmvtpm_send_crq(ibmvtpm->vdev, ibmvtpm 313 drivers/char/tpm/tpm_ibmvtpm.c dev_err(ibmvtpm->dev, ibmvtpm 327 drivers/char/tpm/tpm_ibmvtpm.c static int ibmvtpm_crq_send_init_complete(struct ibmvtpm_dev *ibmvtpm) ibmvtpm 331 drivers/char/tpm/tpm_ibmvtpm.c rc = ibmvtpm_send_crq_word(ibmvtpm->vdev, INIT_CRQ_COMP_CMD); ibmvtpm 333 drivers/char/tpm/tpm_ibmvtpm.c dev_err(ibmvtpm->dev, ibmvtpm 348 drivers/char/tpm/tpm_ibmvtpm.c struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev); ibmvtpm 353 drivers/char/tpm/tpm_ibmvtpm.c free_irq(vdev->irq, ibmvtpm); ibmvtpm 361 drivers/char/tpm/tpm_ibmvtpm.c dma_unmap_single(ibmvtpm->dev, ibmvtpm->crq_dma_handle, ibmvtpm 363 drivers/char/tpm/tpm_ibmvtpm.c free_page((unsigned long)ibmvtpm->crq_queue.crq_addr); ibmvtpm 365 drivers/char/tpm/tpm_ibmvtpm.c if (ibmvtpm->rtce_buf) { ibmvtpm 366 drivers/char/tpm/tpm_ibmvtpm.c dma_unmap_single(ibmvtpm->dev, ibmvtpm->rtce_dma_handle, ibmvtpm 367 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->rtce_size, DMA_BIDIRECTIONAL); ibmvtpm 368 drivers/char/tpm/tpm_ibmvtpm.c kfree(ibmvtpm->rtce_buf); ibmvtpm 371 drivers/char/tpm/tpm_ibmvtpm.c kfree(ibmvtpm); ibmvtpm 388 drivers/char/tpm/tpm_ibmvtpm.c struct ibmvtpm_dev *ibmvtpm; ibmvtpm 396 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm = dev_get_drvdata(&chip->dev); ibmvtpm 400 drivers/char/tpm/tpm_ibmvtpm.c return CRQ_RES_BUF_SIZE + ibmvtpm->rtce_size; ibmvtpm 412 drivers/char/tpm/tpm_ibmvtpm.c struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev); ibmvtpm 415 drivers/char/tpm/tpm_ibmvtpm.c rc = ibmvtpm_send_crq(ibmvtpm->vdev, ibmvtpm 418 drivers/char/tpm/tpm_ibmvtpm.c dev_err(ibmvtpm->dev, ibmvtpm 433 drivers/char/tpm/tpm_ibmvtpm.c static int ibmvtpm_reset_crq(struct ibmvtpm_dev *ibmvtpm) ibmvtpm 441 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->vdev->unit_address); ibmvtpm 444 drivers/char/tpm/tpm_ibmvtpm.c memset(ibmvtpm->crq_queue.crq_addr, 0, CRQ_RES_BUF_SIZE); ibmvtpm 445 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->crq_queue.index = 0; ibmvtpm 447 drivers/char/tpm/tpm_ibmvtpm.c return plpar_hcall_norets(H_REG_CRQ, ibmvtpm->vdev->unit_address, ibmvtpm 448 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->crq_dma_handle, CRQ_RES_BUF_SIZE); ibmvtpm 478 drivers/char/tpm/tpm_ibmvtpm.c static struct ibmvtpm_crq *ibmvtpm_crq_get_next(struct ibmvtpm_dev *ibmvtpm) ibmvtpm 480 drivers/char/tpm/tpm_ibmvtpm.c struct ibmvtpm_crq_queue *crq_q = &ibmvtpm->crq_queue; ibmvtpm 500 drivers/char/tpm/tpm_ibmvtpm.c struct ibmvtpm_dev *ibmvtpm) ibmvtpm 508 drivers/char/tpm/tpm_ibmvtpm.c dev_info(ibmvtpm->dev, "CRQ initialized\n"); ibmvtpm 509 drivers/char/tpm/tpm_ibmvtpm.c rc = ibmvtpm_crq_send_init_complete(ibmvtpm); ibmvtpm 511 drivers/char/tpm/tpm_ibmvtpm.c dev_err(ibmvtpm->dev, "Unable to send CRQ init complete rc=%d\n", rc); ibmvtpm 514 drivers/char/tpm/tpm_ibmvtpm.c dev_info(ibmvtpm->dev, ibmvtpm 518 drivers/char/tpm/tpm_ibmvtpm.c dev_err(ibmvtpm->dev, "Unknown crq message type: %d\n", crq->msg); ibmvtpm 525 drivers/char/tpm/tpm_ibmvtpm.c dev_err(ibmvtpm->dev, "Invalid rtce size\n"); ibmvtpm 528 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->rtce_size = be16_to_cpu(crq->len); ibmvtpm 529 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->rtce_buf = kmalloc(ibmvtpm->rtce_size, ibmvtpm 531 drivers/char/tpm/tpm_ibmvtpm.c if (!ibmvtpm->rtce_buf) { ibmvtpm 532 drivers/char/tpm/tpm_ibmvtpm.c dev_err(ibmvtpm->dev, "Failed to allocate memory for rtce buffer\n"); ibmvtpm 536 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->rtce_dma_handle = dma_map_single(ibmvtpm->dev, ibmvtpm 537 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->rtce_buf, ibmvtpm->rtce_size, ibmvtpm 540 drivers/char/tpm/tpm_ibmvtpm.c if (dma_mapping_error(ibmvtpm->dev, ibmvtpm 541 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->rtce_dma_handle)) { ibmvtpm 542 drivers/char/tpm/tpm_ibmvtpm.c kfree(ibmvtpm->rtce_buf); ibmvtpm 543 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->rtce_buf = NULL; ibmvtpm 544 drivers/char/tpm/tpm_ibmvtpm.c dev_err(ibmvtpm->dev, "Failed to dma map rtce buffer\n"); ibmvtpm 549 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->vtpm_version = be32_to_cpu(crq->data); ibmvtpm 553 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->res_len = be16_to_cpu(crq->len); ibmvtpm 554 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->tpm_processing_cmd = false; ibmvtpm 555 drivers/char/tpm/tpm_ibmvtpm.c wake_up_interruptible(&ibmvtpm->wq); ibmvtpm 575 drivers/char/tpm/tpm_ibmvtpm.c struct ibmvtpm_dev *ibmvtpm = (struct ibmvtpm_dev *) vtpm_instance; ibmvtpm 582 drivers/char/tpm/tpm_ibmvtpm.c while ((crq = ibmvtpm_crq_get_next(ibmvtpm)) != NULL) { ibmvtpm 583 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm_crq_process(crq, ibmvtpm); ibmvtpm 604 drivers/char/tpm/tpm_ibmvtpm.c struct ibmvtpm_dev *ibmvtpm; ibmvtpm 614 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm = kzalloc(sizeof(struct ibmvtpm_dev), GFP_KERNEL); ibmvtpm 615 drivers/char/tpm/tpm_ibmvtpm.c if (!ibmvtpm) { ibmvtpm 620 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->dev = dev; ibmvtpm 621 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->vdev = vio_dev; ibmvtpm 623 drivers/char/tpm/tpm_ibmvtpm.c crq_q = &ibmvtpm->crq_queue; ibmvtpm 631 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->crq_dma_handle = dma_map_single(dev, crq_q->crq_addr, ibmvtpm 635 drivers/char/tpm/tpm_ibmvtpm.c if (dma_mapping_error(dev, ibmvtpm->crq_dma_handle)) { ibmvtpm 641 drivers/char/tpm/tpm_ibmvtpm.c ibmvtpm->crq_dma_handle, CRQ_RES_BUF_SIZE); ibmvtpm 643 drivers/char/tpm/tpm_ibmvtpm.c rc = ibmvtpm_reset_crq(ibmvtpm); ibmvtpm 651 drivers/char/tpm/tpm_ibmvtpm.c tpm_ibmvtpm_driver_name, ibmvtpm); ibmvtpm 663 drivers/char/tpm/tpm_ibmvtpm.c init_waitqueue_head(&ibmvtpm->wq); ibmvtpm 667 drivers/char/tpm/tpm_ibmvtpm.c dev_set_drvdata(&chip->dev, ibmvtpm); ibmvtpm 669 drivers/char/tpm/tpm_ibmvtpm.c spin_lock_init(&ibmvtpm->rtce_lock); ibmvtpm 671 drivers/char/tpm/tpm_ibmvtpm.c rc = ibmvtpm_crq_send_init(ibmvtpm); ibmvtpm 675 drivers/char/tpm/tpm_ibmvtpm.c rc = ibmvtpm_crq_get_version(ibmvtpm); ibmvtpm 679 drivers/char/tpm/tpm_ibmvtpm.c rc = ibmvtpm_crq_get_rtce_size(ibmvtpm); ibmvtpm 689 drivers/char/tpm/tpm_ibmvtpm.c dma_unmap_single(dev, ibmvtpm->crq_dma_handle, CRQ_RES_BUF_SIZE, ibmvtpm 692 drivers/char/tpm/tpm_ibmvtpm.c if (ibmvtpm) { ibmvtpm 695 drivers/char/tpm/tpm_ibmvtpm.c kfree(ibmvtpm);