Lines Matching refs:ibmvtpm
82 struct ibmvtpm_dev *ibmvtpm; in tpm_ibmvtpm_recv() local
86 ibmvtpm = (struct ibmvtpm_dev *)TPM_VPRIV(chip); in tpm_ibmvtpm_recv()
88 if (!ibmvtpm->rtce_buf) { in tpm_ibmvtpm_recv()
89 dev_err(ibmvtpm->dev, "ibmvtpm device is not ready\n"); in tpm_ibmvtpm_recv()
93 sig = wait_event_interruptible(ibmvtpm->wq, ibmvtpm->res_len != 0); in tpm_ibmvtpm_recv()
97 len = ibmvtpm->res_len; in tpm_ibmvtpm_recv()
100 dev_err(ibmvtpm->dev, in tpm_ibmvtpm_recv()
106 spin_lock(&ibmvtpm->rtce_lock); in tpm_ibmvtpm_recv()
107 memcpy((void *)buf, (void *)ibmvtpm->rtce_buf, len); in tpm_ibmvtpm_recv()
108 memset(ibmvtpm->rtce_buf, 0, len); in tpm_ibmvtpm_recv()
109 ibmvtpm->res_len = 0; in tpm_ibmvtpm_recv()
110 spin_unlock(&ibmvtpm->rtce_lock); in tpm_ibmvtpm_recv()
125 struct ibmvtpm_dev *ibmvtpm; in tpm_ibmvtpm_send() local
130 ibmvtpm = (struct ibmvtpm_dev *)TPM_VPRIV(chip); in tpm_ibmvtpm_send()
132 if (!ibmvtpm->rtce_buf) { in tpm_ibmvtpm_send()
133 dev_err(ibmvtpm->dev, "ibmvtpm device is not ready\n"); in tpm_ibmvtpm_send()
137 if (count > ibmvtpm->rtce_size) { in tpm_ibmvtpm_send()
138 dev_err(ibmvtpm->dev, in tpm_ibmvtpm_send()
140 count, ibmvtpm->rtce_size); in tpm_ibmvtpm_send()
144 spin_lock(&ibmvtpm->rtce_lock); in tpm_ibmvtpm_send()
145 memcpy((void *)ibmvtpm->rtce_buf, (void *)buf, count); in tpm_ibmvtpm_send()
149 crq.data = cpu_to_be32(ibmvtpm->rtce_dma_handle); in tpm_ibmvtpm_send()
151 rc = ibmvtpm_send_crq(ibmvtpm->vdev, be64_to_cpu(word[0]), in tpm_ibmvtpm_send()
154 dev_err(ibmvtpm->dev, "tpm_ibmvtpm_send failed rc=%d\n", rc); in tpm_ibmvtpm_send()
159 spin_unlock(&ibmvtpm->rtce_lock); in tpm_ibmvtpm_send()
181 static int ibmvtpm_crq_get_rtce_size(struct ibmvtpm_dev *ibmvtpm) in ibmvtpm_crq_get_rtce_size() argument
190 rc = ibmvtpm_send_crq(ibmvtpm->vdev, cpu_to_be64(buf[0]), in ibmvtpm_crq_get_rtce_size()
193 dev_err(ibmvtpm->dev, in ibmvtpm_crq_get_rtce_size()
208 static int ibmvtpm_crq_get_version(struct ibmvtpm_dev *ibmvtpm) in ibmvtpm_crq_get_version() argument
217 rc = ibmvtpm_send_crq(ibmvtpm->vdev, cpu_to_be64(buf[0]), in ibmvtpm_crq_get_version()
220 dev_err(ibmvtpm->dev, in ibmvtpm_crq_get_version()
234 static int ibmvtpm_crq_send_init_complete(struct ibmvtpm_dev *ibmvtpm) in ibmvtpm_crq_send_init_complete() argument
238 rc = ibmvtpm_send_crq(ibmvtpm->vdev, INIT_CRQ_COMP_CMD, 0); in ibmvtpm_crq_send_init_complete()
240 dev_err(ibmvtpm->dev, in ibmvtpm_crq_send_init_complete()
254 static int ibmvtpm_crq_send_init(struct ibmvtpm_dev *ibmvtpm) in ibmvtpm_crq_send_init() argument
258 rc = ibmvtpm_send_crq(ibmvtpm->vdev, INIT_CRQ_CMD, 0); in ibmvtpm_crq_send_init()
260 dev_err(ibmvtpm->dev, in ibmvtpm_crq_send_init()
275 struct ibmvtpm_dev *ibmvtpm = ibmvtpm_get_data(&vdev->dev); in tpm_ibmvtpm_remove() local
276 struct tpm_chip *chip = dev_get_drvdata(ibmvtpm->dev); in tpm_ibmvtpm_remove()
281 free_irq(vdev->irq, ibmvtpm); in tpm_ibmvtpm_remove()
289 dma_unmap_single(ibmvtpm->dev, ibmvtpm->crq_dma_handle, in tpm_ibmvtpm_remove()
291 free_page((unsigned long)ibmvtpm->crq_queue.crq_addr); in tpm_ibmvtpm_remove()
293 if (ibmvtpm->rtce_buf) { in tpm_ibmvtpm_remove()
294 dma_unmap_single(ibmvtpm->dev, ibmvtpm->rtce_dma_handle, in tpm_ibmvtpm_remove()
295 ibmvtpm->rtce_size, DMA_BIDIRECTIONAL); in tpm_ibmvtpm_remove()
296 kfree(ibmvtpm->rtce_buf); in tpm_ibmvtpm_remove()
299 kfree(ibmvtpm); in tpm_ibmvtpm_remove()
313 struct ibmvtpm_dev *ibmvtpm = ibmvtpm_get_data(&vdev->dev); in tpm_ibmvtpm_get_desired_dma() local
319 if (!ibmvtpm) in tpm_ibmvtpm_get_desired_dma()
322 return CRQ_RES_BUF_SIZE + ibmvtpm->rtce_size; in tpm_ibmvtpm_get_desired_dma()
334 struct ibmvtpm_dev *ibmvtpm = ibmvtpm_get_data(dev); in tpm_ibmvtpm_suspend() local
342 rc = ibmvtpm_send_crq(ibmvtpm->vdev, cpu_to_be64(buf[0]), in tpm_ibmvtpm_suspend()
345 dev_err(ibmvtpm->dev, in tpm_ibmvtpm_suspend()
359 static int ibmvtpm_reset_crq(struct ibmvtpm_dev *ibmvtpm) in ibmvtpm_reset_crq() argument
367 ibmvtpm->vdev->unit_address); in ibmvtpm_reset_crq()
370 memset(ibmvtpm->crq_queue.crq_addr, 0, CRQ_RES_BUF_SIZE); in ibmvtpm_reset_crq()
371 ibmvtpm->crq_queue.index = 0; in ibmvtpm_reset_crq()
373 return plpar_hcall_norets(H_REG_CRQ, ibmvtpm->vdev->unit_address, in ibmvtpm_reset_crq()
374 ibmvtpm->crq_dma_handle, CRQ_RES_BUF_SIZE); in ibmvtpm_reset_crq()
386 struct ibmvtpm_dev *ibmvtpm = ibmvtpm_get_data(dev); in tpm_ibmvtpm_resume() local
393 ibmvtpm->vdev->unit_address); in tpm_ibmvtpm_resume()
401 rc = vio_enable_interrupts(ibmvtpm->vdev); in tpm_ibmvtpm_resume()
407 rc = ibmvtpm_crq_send_init(ibmvtpm); in tpm_ibmvtpm_resume()
441 static struct ibmvtpm_crq *ibmvtpm_crq_get_next(struct ibmvtpm_dev *ibmvtpm) in ibmvtpm_crq_get_next() argument
443 struct ibmvtpm_crq_queue *crq_q = &ibmvtpm->crq_queue; in ibmvtpm_crq_get_next()
464 struct ibmvtpm_dev *ibmvtpm) in ibmvtpm_crq_process() argument
472 dev_info(ibmvtpm->dev, "CRQ initialized\n"); in ibmvtpm_crq_process()
473 rc = ibmvtpm_crq_send_init_complete(ibmvtpm); in ibmvtpm_crq_process()
475 dev_err(ibmvtpm->dev, "Unable to send CRQ init complete rc=%d\n", rc); in ibmvtpm_crq_process()
478 dev_info(ibmvtpm->dev, in ibmvtpm_crq_process()
482 dev_err(ibmvtpm->dev, "Unknown crq message type: %d\n", crq->msg); in ibmvtpm_crq_process()
489 dev_err(ibmvtpm->dev, "Invalid rtce size\n"); in ibmvtpm_crq_process()
492 ibmvtpm->rtce_size = be16_to_cpu(crq->len); in ibmvtpm_crq_process()
493 ibmvtpm->rtce_buf = kmalloc(ibmvtpm->rtce_size, in ibmvtpm_crq_process()
495 if (!ibmvtpm->rtce_buf) { in ibmvtpm_crq_process()
496 dev_err(ibmvtpm->dev, "Failed to allocate memory for rtce buffer\n"); in ibmvtpm_crq_process()
500 ibmvtpm->rtce_dma_handle = dma_map_single(ibmvtpm->dev, in ibmvtpm_crq_process()
501 ibmvtpm->rtce_buf, ibmvtpm->rtce_size, in ibmvtpm_crq_process()
504 if (dma_mapping_error(ibmvtpm->dev, in ibmvtpm_crq_process()
505 ibmvtpm->rtce_dma_handle)) { in ibmvtpm_crq_process()
506 kfree(ibmvtpm->rtce_buf); in ibmvtpm_crq_process()
507 ibmvtpm->rtce_buf = NULL; in ibmvtpm_crq_process()
508 dev_err(ibmvtpm->dev, "Failed to dma map rtce buffer\n"); in ibmvtpm_crq_process()
513 ibmvtpm->vtpm_version = be32_to_cpu(crq->data); in ibmvtpm_crq_process()
517 ibmvtpm->res_len = be16_to_cpu(crq->len); in ibmvtpm_crq_process()
518 wake_up_interruptible(&ibmvtpm->wq); in ibmvtpm_crq_process()
537 struct ibmvtpm_dev *ibmvtpm = (struct ibmvtpm_dev *) vtpm_instance; in ibmvtpm_interrupt() local
544 while ((crq = ibmvtpm_crq_get_next(ibmvtpm)) != NULL) { in ibmvtpm_interrupt()
545 ibmvtpm_crq_process(crq, ibmvtpm); in ibmvtpm_interrupt()
565 struct ibmvtpm_dev *ibmvtpm; in tpm_ibmvtpm_probe() local
575 ibmvtpm = kzalloc(sizeof(struct ibmvtpm_dev), GFP_KERNEL); in tpm_ibmvtpm_probe()
576 if (!ibmvtpm) { in tpm_ibmvtpm_probe()
581 ibmvtpm->dev = dev; in tpm_ibmvtpm_probe()
582 ibmvtpm->vdev = vio_dev; in tpm_ibmvtpm_probe()
584 crq_q = &ibmvtpm->crq_queue; in tpm_ibmvtpm_probe()
592 ibmvtpm->crq_dma_handle = dma_map_single(dev, crq_q->crq_addr, in tpm_ibmvtpm_probe()
596 if (dma_mapping_error(dev, ibmvtpm->crq_dma_handle)) { in tpm_ibmvtpm_probe()
602 ibmvtpm->crq_dma_handle, CRQ_RES_BUF_SIZE); in tpm_ibmvtpm_probe()
604 rc = ibmvtpm_reset_crq(ibmvtpm); in tpm_ibmvtpm_probe()
612 tpm_ibmvtpm_driver_name, ibmvtpm); in tpm_ibmvtpm_probe()
624 init_waitqueue_head(&ibmvtpm->wq); in tpm_ibmvtpm_probe()
628 TPM_VPRIV(chip) = (void *)ibmvtpm; in tpm_ibmvtpm_probe()
630 spin_lock_init(&ibmvtpm->rtce_lock); in tpm_ibmvtpm_probe()
632 rc = ibmvtpm_crq_send_init(ibmvtpm); in tpm_ibmvtpm_probe()
636 rc = ibmvtpm_crq_get_version(ibmvtpm); in tpm_ibmvtpm_probe()
640 rc = ibmvtpm_crq_get_rtce_size(ibmvtpm); in tpm_ibmvtpm_probe()
650 dma_unmap_single(dev, ibmvtpm->crq_dma_handle, CRQ_RES_BUF_SIZE, in tpm_ibmvtpm_probe()
653 if (ibmvtpm) { in tpm_ibmvtpm_probe()
656 kfree(ibmvtpm); in tpm_ibmvtpm_probe()