tpmrm-dev.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (C) 2017 James.Bottomley@HansenPartnership.com
  4. */
  5. #include <linux/slab.h>
  6. #include "tpm-dev.h"
  7. struct tpmrm_priv {
  8. struct file_priv priv;
  9. struct tpm_space space;
  10. };
  11. static int tpmrm_open(struct inode *inode, struct file *file)
  12. {
  13. struct tpm_chip *chip;
  14. struct tpmrm_priv *priv;
  15. int rc;
  16. chip = container_of(inode->i_cdev, struct tpm_chip, cdevs);
  17. priv = kzalloc(sizeof(*priv), GFP_KERNEL);
  18. if (priv == NULL)
  19. return -ENOMEM;
  20. rc = tpm2_init_space(&priv->space, TPM2_SPACE_BUFFER_SIZE);
  21. if (rc) {
  22. kfree(priv);
  23. return -ENOMEM;
  24. }
  25. tpm_common_open(file, chip, &priv->priv, &priv->space);
  26. return 0;
  27. }
  28. static int tpmrm_release(struct inode *inode, struct file *file)
  29. {
  30. struct file_priv *fpriv = file->private_data;
  31. struct tpmrm_priv *priv = container_of(fpriv, struct tpmrm_priv, priv);
  32. tpm_common_release(file, fpriv);
  33. tpm2_del_space(fpriv->chip, &priv->space);
  34. kfree(priv);
  35. return 0;
  36. }
  37. const struct file_operations tpmrm_fops = {
  38. .owner = THIS_MODULE,
  39. .open = tpmrm_open,
  40. .read = tpm_common_read,
  41. .write = tpm_common_write,
  42. .poll = tpm_common_poll,
  43. .release = tpmrm_release,
  44. };