Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Copyright (C) 2017 James.Bottomley@HansenPartnership.com
0004  */
0005 #include <linux/slab.h>
0006 #include "tpm-dev.h"
0007 
0008 struct tpmrm_priv {
0009     struct file_priv priv;
0010     struct tpm_space space;
0011 };
0012 
0013 static int tpmrm_open(struct inode *inode, struct file *file)
0014 {
0015     struct tpm_chip *chip;
0016     struct tpmrm_priv *priv;
0017     int rc;
0018 
0019     chip = container_of(inode->i_cdev, struct tpm_chip, cdevs);
0020     priv = kzalloc(sizeof(*priv), GFP_KERNEL);
0021     if (priv == NULL)
0022         return -ENOMEM;
0023 
0024     rc = tpm2_init_space(&priv->space, TPM2_SPACE_BUFFER_SIZE);
0025     if (rc) {
0026         kfree(priv);
0027         return -ENOMEM;
0028     }
0029 
0030     tpm_common_open(file, chip, &priv->priv, &priv->space);
0031 
0032     return 0;
0033 }
0034 
0035 static int tpmrm_release(struct inode *inode, struct file *file)
0036 {
0037     struct file_priv *fpriv = file->private_data;
0038     struct tpmrm_priv *priv = container_of(fpriv, struct tpmrm_priv, priv);
0039 
0040     tpm_common_release(file, fpriv);
0041     tpm2_del_space(fpriv->chip, &priv->space);
0042     kfree(priv);
0043 
0044     return 0;
0045 }
0046 
0047 const struct file_operations tpmrm_fops = {
0048     .owner = THIS_MODULE,
0049     .llseek = no_llseek,
0050     .open = tpmrm_open,
0051     .read = tpm_common_read,
0052     .write = tpm_common_write,
0053     .poll = tpm_common_poll,
0054     .release = tpmrm_release,
0055 };