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);
386 struct ibmvtpm_dev *ibmvtpm;
389 * ibmvtpm initializes at probe time, so the data we are
394 ibmvtpm = dev_get_drvdata(&chip->dev);
398 return CRQ_RES_BUF_SIZE + ibmvtpm->rtce_size;
410 struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
413 rc = ibmvtpm_send_crq(ibmvtpm->vdev,
416 dev_err(ibmvtpm->dev,
425 * @ibmvtpm: ibm vtpm struct
431 static int ibmvtpm_reset_crq(struct ibmvtpm_dev *ibmvtpm)
439 ibmvtpm->vdev->unit_address);
442 memset(ibmvtpm->crq_queue.crq_addr, 0, CRQ_RES_BUF_SIZE);
443 ibmvtpm->crq_queue.index = 0;
445 return plpar_hcall_norets(H_REG_CRQ, ibmvtpm->vdev->unit_address,
446 ibmvtpm->crq_dma_handle, CRQ_RES_BUF_SIZE);
472 * @ibmvtpm: vtpm device struct
476 static struct ibmvtpm_crq *ibmvtpm_crq_get_next(struct ibmvtpm_dev *ibmvtpm)
478 struct ibmvtpm_crq_queue *crq_q = &ibmvtpm->crq_queue;
494 * @ibmvtpm: vtpm device struct
498 struct ibmvtpm_dev *ibmvtpm)
506 dev_info(ibmvtpm->dev, "CRQ initialized\n");
507 rc = ibmvtpm_crq_send_init_complete(ibmvtpm);
509 dev_err(ibmvtpm->dev, "Unable to send CRQ init complete rc=%d\n", rc);
512 dev_info(ibmvtpm->dev,
516 dev_err(ibmvtpm->dev, "Unknown crq message type: %d\n", crq->msg);
523 dev_err(ibmvtpm->dev, "Invalid rtce size\n");
526 ibmvtpm->rtce_size = be16_to_cpu(crq->len);
527 ibmvtpm->rtce_buf = kmalloc(ibmvtpm->rtce_size,
529 if (!ibmvtpm->rtce_buf) {
530 dev_err(ibmvtpm->dev, "Failed to allocate memory for rtce buffer\n");
534 ibmvtpm->rtce_dma_handle = dma_map_single(ibmvtpm->dev,
535 ibmvtpm->rtce_buf, ibmvtpm->rtce_size,
538 if (dma_mapping_error(ibmvtpm->dev,
539 ibmvtpm->rtce_dma_handle)) {
540 kfree(ibmvtpm->rtce_buf);
541 ibmvtpm->rtce_buf = NULL;
542 dev_err(ibmvtpm->dev, "Failed to dma map rtce buffer\n");
547 ibmvtpm->vtpm_version = be32_to_cpu(crq->data);
551 ibmvtpm->res_len = be16_to_cpu(crq->len);
552 ibmvtpm->tpm_processing_cmd = 0;
553 wake_up_interruptible(&ibmvtpm->wq);
573 struct ibmvtpm_dev *ibmvtpm = (struct ibmvtpm_dev *) vtpm_instance;
580 while ((crq = ibmvtpm_crq_get_next(ibmvtpm)) != NULL) {
581 ibmvtpm_crq_process(crq, ibmvtpm);
582 wake_up_interruptible(&ibmvtpm->crq_queue.wq);
603 struct ibmvtpm_dev *ibmvtpm;
613 ibmvtpm = kzalloc(sizeof(struct ibmvtpm_dev), GFP_KERNEL);
614 if (!ibmvtpm) {
615 dev_err(dev, "kzalloc for ibmvtpm failed\n");
619 ibmvtpm->dev = dev;
620 ibmvtpm->vdev = vio_dev;
622 crq_q = &ibmvtpm->crq_queue;
631 ibmvtpm->crq_dma_handle = dma_map_single(dev, crq_q->crq_addr,
635 if (dma_mapping_error(dev, ibmvtpm->crq_dma_handle)) {
641 ibmvtpm->crq_dma_handle, CRQ_RES_BUF_SIZE);
643 rc = ibmvtpm_reset_crq(ibmvtpm);
651 tpm_ibmvtpm_driver_name, ibmvtpm);
663 init_waitqueue_head(&ibmvtpm->wq);
667 dev_set_drvdata(&chip->dev, ibmvtpm);
669 spin_lock_init(&ibmvtpm->rtce_lock);
671 rc = ibmvtpm_crq_send_init(ibmvtpm);
675 rc = ibmvtpm_crq_get_version(ibmvtpm);
679 rc = ibmvtpm_crq_get_rtce_size(ibmvtpm);
683 if (!wait_event_timeout(ibmvtpm->crq_queue.wq,
684 ibmvtpm->rtce_buf != NULL,
711 dma_unmap_single(dev, ibmvtpm->crq_dma_handle, CRQ_RES_BUF_SIZE,
714 if (ibmvtpm) {
717 kfree(ibmvtpm);