Lines Matching defs:ibmvtpm
60 * The ibmvtpm crq is defined as follows:
107 struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
110 if (!ibmvtpm->rtce_buf) {
111 dev_err(ibmvtpm->dev, "ibmvtpm device is not ready\n");
115 len = ibmvtpm->res_len;
118 dev_err(ibmvtpm->dev,
124 spin_lock(&ibmvtpm->rtce_lock);
125 memcpy((void *)buf, (void *)ibmvtpm->rtce_buf, len);
126 memset(ibmvtpm->rtce_buf, 0, len);
127 ibmvtpm->res_len = 0;
128 spin_unlock(&ibmvtpm->rtce_lock);
134 * @ibmvtpm: vtpm device struct
140 static int ibmvtpm_crq_send_init(struct ibmvtpm_dev *ibmvtpm)
144 rc = ibmvtpm_send_crq_word(ibmvtpm->vdev, INIT_CRQ_CMD);
146 dev_err(ibmvtpm->dev,
162 struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
169 ibmvtpm->vdev->unit_address);
173 dev_err(dev, "Error enabling ibmvtpm rc=%d\n", rc);
177 rc = vio_enable_interrupts(ibmvtpm->vdev);
183 rc = ibmvtpm_crq_send_init(ibmvtpm);
202 struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
206 if (!ibmvtpm->rtce_buf) {
207 dev_err(ibmvtpm->dev, "ibmvtpm device is not ready\n");
211 if (count > ibmvtpm->rtce_size) {
212 dev_err(ibmvtpm->dev,
214 count, ibmvtpm->rtce_size);
218 if (ibmvtpm->tpm_processing_cmd) {
219 dev_info(ibmvtpm->dev,
222 sig = wait_event_interruptible(ibmvtpm->wq, !ibmvtpm->tpm_processing_cmd);
227 spin_lock(&ibmvtpm->rtce_lock);
228 ibmvtpm->res_len = 0;
229 memcpy((void *)ibmvtpm->rtce_buf, (void *)buf, count);
235 ibmvtpm->tpm_processing_cmd = 1;
238 rc = ibmvtpm_send_crq(ibmvtpm->vdev,
240 count, ibmvtpm->rtce_dma_handle);
248 tpm_ibmvtpm_resume(ibmvtpm->dev);
252 dev_err(ibmvtpm->dev, "tpm_ibmvtpm_send failed rc=%d\n", rc);
253 ibmvtpm->tpm_processing_cmd = 0;
256 spin_unlock(&ibmvtpm->rtce_lock);
267 struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
269 return ibmvtpm->tpm_processing_cmd;
275 * @ibmvtpm: vtpm device struct
281 static int ibmvtpm_crq_get_rtce_size(struct ibmvtpm_dev *ibmvtpm)
285 rc = ibmvtpm_send_crq(ibmvtpm->vdev,
288 dev_err(ibmvtpm->dev,
298 * @ibmvtpm: vtpm device struct
304 static int ibmvtpm_crq_get_version(struct ibmvtpm_dev *ibmvtpm)
308 rc = ibmvtpm_send_crq(ibmvtpm->vdev,
311 dev_err(ibmvtpm->dev,
319 * @ibmvtpm: vtpm device struct
325 static int ibmvtpm_crq_send_init_complete(struct ibmvtpm_dev *ibmvtpm)
329 rc = ibmvtpm_send_crq_word(ibmvtpm->vdev, INIT_CRQ_COMP_CMD);
331 dev_err(ibmvtpm->dev,
346 struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
351 free_irq(vdev->irq, ibmvtpm);
359 dma_unmap_single(ibmvtpm->dev, ibmvtpm->crq_dma_handle,
361 free_page((unsigned long)ibmvtpm->crq_queue.crq_addr);
363 if (ibmvtpm->rtce_buf) {
364 dma_unmap_single(ibmvtpm->dev, ibmvtpm->rtce_dma_handle,
365 ibmvtpm->rtce_size, DMA_BIDIRECTIONAL);
366 kfree(ibmvtpm->rtce_buf);
369 kfree(ibmvtpm);
384 struct ibmvtpm_dev *ibmvtpm;
387 * ibmvtpm initializes at probe time, so the data we are
392 ibmvtpm = dev_get_drvdata(&chip->dev);
396 return CRQ_RES_BUF_SIZE + ibmvtpm->rtce_size;
408 struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
411 rc = ibmvtpm_send_crq(ibmvtpm->vdev,
414 dev_err(ibmvtpm->dev,
423 * @ibmvtpm: ibm vtpm struct
429 static int ibmvtpm_reset_crq(struct ibmvtpm_dev *ibmvtpm)
437 ibmvtpm->vdev->unit_address);
440 memset(ibmvtpm->crq_queue.crq_addr, 0, CRQ_RES_BUF_SIZE);
441 ibmvtpm->crq_queue.index = 0;
443 return plpar_hcall_norets(H_REG_CRQ, ibmvtpm->vdev->unit_address,
444 ibmvtpm->crq_dma_handle, CRQ_RES_BUF_SIZE);
470 * @ibmvtpm: vtpm device struct
474 static struct ibmvtpm_crq *ibmvtpm_crq_get_next(struct ibmvtpm_dev *ibmvtpm)
476 struct ibmvtpm_crq_queue *crq_q = &ibmvtpm->crq_queue;
492 * @ibmvtpm: vtpm device struct
496 struct ibmvtpm_dev *ibmvtpm)
504 dev_info(ibmvtpm->dev, "CRQ initialized\n");
505 rc = ibmvtpm_crq_send_init_complete(ibmvtpm);
507 dev_err(ibmvtpm->dev, "Unable to send CRQ init complete rc=%d\n", rc);
510 dev_info(ibmvtpm->dev,
514 dev_err(ibmvtpm->dev, "Unknown crq message type: %d\n", crq->msg);
521 dev_err(ibmvtpm->dev, "Invalid rtce size\n");
524 ibmvtpm->rtce_size = be16_to_cpu(crq->len);
525 ibmvtpm->rtce_buf = kmalloc(ibmvtpm->rtce_size,
527 if (!ibmvtpm->rtce_buf) {
528 dev_err(ibmvtpm->dev, "Failed to allocate memory for rtce buffer\n");
532 ibmvtpm->rtce_dma_handle = dma_map_single(ibmvtpm->dev,
533 ibmvtpm->rtce_buf, ibmvtpm->rtce_size,
536 if (dma_mapping_error(ibmvtpm->dev,
537 ibmvtpm->rtce_dma_handle)) {
538 kfree(ibmvtpm->rtce_buf);
539 ibmvtpm->rtce_buf = NULL;
540 dev_err(ibmvtpm->dev, "Failed to dma map rtce buffer\n");
545 ibmvtpm->vtpm_version = be32_to_cpu(crq->data);
549 ibmvtpm->res_len = be16_to_cpu(crq->len);
550 ibmvtpm->tpm_processing_cmd = 0;
551 wake_up_interruptible(&ibmvtpm->wq);
571 struct ibmvtpm_dev *ibmvtpm = (struct ibmvtpm_dev *) vtpm_instance;
578 while ((crq = ibmvtpm_crq_get_next(ibmvtpm)) != NULL) {
579 ibmvtpm_crq_process(crq, ibmvtpm);
580 wake_up_interruptible(&ibmvtpm->crq_queue.wq);
601 struct ibmvtpm_dev *ibmvtpm;
611 ibmvtpm = kzalloc(sizeof(struct ibmvtpm_dev), GFP_KERNEL);
612 if (!ibmvtpm) {
613 dev_err(dev, "kzalloc for ibmvtpm failed\n");
617 ibmvtpm->dev = dev;
618 ibmvtpm->vdev = vio_dev;
620 crq_q = &ibmvtpm->crq_queue;
629 ibmvtpm->crq_dma_handle = dma_map_single(dev, crq_q->crq_addr,
633 if (dma_mapping_error(dev, ibmvtpm->crq_dma_handle)) {
639 ibmvtpm->crq_dma_handle, CRQ_RES_BUF_SIZE);
641 rc = ibmvtpm_reset_crq(ibmvtpm);
649 tpm_ibmvtpm_driver_name, ibmvtpm);
661 init_waitqueue_head(&ibmvtpm->wq);
665 dev_set_drvdata(&chip->dev, ibmvtpm);
667 spin_lock_init(&ibmvtpm->rtce_lock);
669 rc = ibmvtpm_crq_send_init(ibmvtpm);
673 rc = ibmvtpm_crq_get_version(ibmvtpm);
677 rc = ibmvtpm_crq_get_rtce_size(ibmvtpm);
681 if (!wait_event_timeout(ibmvtpm->crq_queue.wq,
682 ibmvtpm->rtce_buf != NULL,
709 dma_unmap_single(dev, ibmvtpm->crq_dma_handle, CRQ_RES_BUF_SIZE,
712 if (ibmvtpm) {
715 kfree(ibmvtpm);