tpmrm-dev.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (C) 2017 [email protected]
  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. .llseek = no_llseek,
  40. .open = tpmrm_open,
  41. .read = tpm_common_read,
  42. .write = tpm_common_write,
  43. .poll = tpm_common_poll,
  44. .release = tpmrm_release,
  45. };