Jarkko Sakkinen <jarkko.sakki...@linux.intel.com> wrote on 11/02/2016 
12:01:56 PM:

> 
> Transitioned the tpm_vtpm_proxy documentation to the Sphinx
> infrastructure and removed parts from the documentation that are easier
> to pull from the sources. Restructured vtpm_proxy.h and tpm_vtpm_proxy.c
> to be compatible with this approach and wrote associated documentation
> comments.
> 
> Signed-off-by: Jarkko Sakkinen <jarkko.sakki...@linux.intel.com>
> ---
>  Documentation/index.rst                            |  1 +
>  Documentation/tpm/index.rst                        |  7 +++
>  .../tpm/{tpm_vtpm_proxy.txt => tpm_vtpm_proxy.rst} | 53 
+++++-----------
>  drivers/char/tpm/tpm_vtpm_proxy.c                  | 72 +++++++++++
> +++--------
>  include/uapi/linux/vtpm_proxy.h                    | 23 +++++--
>  5 files changed, 89 insertions(+), 67 deletions(-)
>  create mode 100644 Documentation/tpm/index.rst
>  rename Documentation/tpm/{tpm_vtpm_proxy.txt => tpm_vtpm_proxy.rst} 
(56%)
> 
> diff --git a/Documentation/index.rst b/Documentation/index.rst
> index e0fc729..0058b65 100644
> --- a/Documentation/index.rst
> +++ b/Documentation/index.rst
> @@ -19,6 +19,7 @@ Contents:
>     media/dvb-drivers/index
>     media/v4l-drivers/index
>     gpu/index
> +   tpm/index
> 
>  Indices and tables
>  ==================
> diff --git a/Documentation/tpm/index.rst b/Documentation/tpm/index.rst
> new file mode 100644
> index 0000000..316cdbb
> --- /dev/null
> +++ b/Documentation/tpm/index.rst
> @@ -0,0 +1,7 @@
> +=================
> +TPM documentation
> +=================
> +
> +.. toctree::
> +
> +   tpm_vtpm_proxy
> diff --git a/Documentation/tpm/tpm_vtpm_proxy.txt b/Documentation/
> tpm/tpm_vtpm_proxy.rst
> similarity index 56%
> rename from Documentation/tpm/tpm_vtpm_proxy.txt
> rename to Documentation/tpm/tpm_vtpm_proxy.rst
> index 30d1902..f991aff 100644
> --- a/Documentation/tpm/tpm_vtpm_proxy.txt
> +++ b/Documentation/tpm/tpm_vtpm_proxy.rst

[...]

>  To make an emulated software TPM available to each container, the 
container
>  management stack needs to create a device pair consisting of a client 
TPM
> -character device /dev/tpmX (with X=0,1,2...) and a 'server side' file
> +character device ``/dev/tpmX`` (with X=0,1,2...) and a 'server side' 
file
>  descriptor. The former is moved into the container by creating a 
character
>  device with the appropriate major and minor numbers while the file 
descriptor
>  is passed to the TPM emulator. Software inside the container can then 
send
>  TPM commands using the character device and the emulator will receive 
the
>  commands via the file descriptor and use it for sending back responses.
> 
> -To support this, the virtual TPM proxy driver provides a device 
/dev/vtpmx
> +To support this, the virtual TPM proxy driver provides a device ``/
> dev/vtpmx``
>  that is used to create device pairs using an ioctl. The ioctl takes as
>  an input flags for configuring the device. The flags  for example 
indicate
>  whether TPM 1.2 or TPM 2 functionality is supported by the TPM 
emulator.
>  The result of the ioctl are the file descriptor for the 'server side'
>  as well as the major and minor numbers of the character device that
> was created.
>  Besides that the number of the TPM character device is return. If for

Existing typo: return -> returned.

> -example /dev/tpm10 was created, the number (dev_num) 10 is returned.
> -
> -The following is the data structure of the TPM_PROXY_IOC_NEW_DEV ioctl:
> -
> -struct vtpm_proxy_new_dev {
> -   __u32 flags;         /* input */
> -   __u32 tpm_num;       /* output */
> -   __u32 fd;            /* output */
> -   __u32 major;         /* output */
> -   __u32 minor;         /* output */
> -};
> -
> -Note that if unsupported flags are passed to the device driver, 
theioctl will
> -fail and errno will be set to EOPNOTSUPP. Similarly, if an 
> unsupported ioctl is
> -called on the device driver, the ioctl will fail and errno will be set 
to
> -ENOTTY.


Users would now have to look into the spec for this.


> -
> -See /usr/include/linux/vtpm_proxy.h for definitions related to the 
> public interface
> -of this vTPM device driver.
> +example ``/dev/tpm10`` was created, the number (``dev_num``) 10 is 
returned.
> 
>  Once the device has been created, the driver will immediately try to 
talk
>  to the TPM. All commands from the driver can be read from the file 
descriptor
>  returned by the ioctl. The commands should be responded to immediately.
> 
> -Depending on the version of TPM the following commands will be sent by 
the
> -driver:
> +UAPI
> +====
> 
> -- TPM 1.2:
> -  - the driver will send a TPM_Startup command to the TPM emulator
> -  - the driver will send commands to read the command durations and
> -    interface timeouts from the TPM emulator
> -- TPM 2:
> -  - the driver will send a TPM2_Startup command to the TPM emulator
> +.. kernel-doc:: include/uapi/linux/vtpm_proxy.h
> 
> -The TPM device /dev/tpmX will only appear if all of the relevant 
commands
> -were responded to properly.
> +.. kernel-doc:: drivers/char/tpm/tpm_vtpm_proxy.c
> +   :functions: vtpmx_ioc_new_dev
> diff --git a/drivers/char/tpm/tpm_vtpm_proxy.c b/drivers/char/tpm/
> tpm_vtpm_proxy.c
> index 9a94033..a85d258 100644
> --- a/drivers/char/tpm/tpm_vtpm_proxy.c
> +++ b/drivers/char/tpm/tpm_vtpm_proxy.c
> @@ -1,5 +1,6 @@
>  /*
>   * Copyright (C) 2015, 2016 IBM Corporation
> + * Copyright (C) 2016 Intel Corporation
>   *
>   * Author: Stefan Berger <stef...@us.ibm.com>
>   *
> @@ -524,6 +525,50 @@ static void vtpm_proxy_delete_device(struct 
> proxy_dev *proxy_dev)
>   * Code related to the control device /dev/vtpmx
>   */
> 
> +/**
> + * sgx_ioc_new_dev - handler for the %SGX_IOC_NEW_DEV ioctl

This does not correspond to the actual filename.


> + * @file:   /dev/vtpmx
> + * @ioctl:   the ioctl number
> + * @arg:   pointer to the struct vtpmx_proxy_new_dev
> + *
> + * Creates an anonymous file that is used by the process acting as a 
TPM to
> + * communicate with the client processes. The function will also 
> add a new TPM
> + * device through which data is proxied to this TPM acting process.The 
caller
> + * will be provided with a file descriptor to communicate with the 
> clients and
> + * major and minor numbers for the TPM device.
> + */
> +static long vtpmx_ioc_new_dev(struct file *file, unsigned int ioctl,
> +               unsigned long arg)
> +{
> +   void __user *argp = (void __user *)arg;
> +   struct vtpm_proxy_new_dev __user *vtpm_new_dev_p;
> +   struct vtpm_proxy_new_dev vtpm_new_dev;
> +   struct file *vtpm_file;
> +
> +   if (!capable(CAP_SYS_ADMIN))
> +      return -EPERM;
> +
> +   vtpm_new_dev_p = argp;
> +
> +   if (copy_from_user(&vtpm_new_dev, vtpm_new_dev_p,
> +            sizeof(vtpm_new_dev)))
> +      return -EFAULT;
> +
> +   vtpm_file = vtpm_proxy_create_device(&vtpm_new_dev);
> +   if (IS_ERR(vtpm_file))
> +      return PTR_ERR(vtpm_file);
> +
> +   if (copy_to_user(vtpm_new_dev_p, &vtpm_new_dev,
> +          sizeof(vtpm_new_dev))) {
> +      put_unused_fd(vtpm_new_dev.fd);
> +      fput(vtpm_file);
> +      return -EFAULT;
> +   }
> +
> +   fd_install(vtpm_new_dev.fd, vtpm_file);
> +   return 0;
> +}
> +
>  /*
>   * vtpmx_fops_ioctl: ioctl on /dev/vtpmx
>   *
> @@ -531,34 +576,11 @@ static void vtpm_proxy_delete_device(struct 
> proxy_dev *proxy_dev)
>   *      Returns 0 on success, a negative error code otherwise.
>   */
>  static long vtpmx_fops_ioctl(struct file *f, unsigned int ioctl,
> -               unsigned long arg)
> +              unsigned long arg)
>  {
> -   void __user *argp = (void __user *)arg;
> -   struct vtpm_proxy_new_dev __user *vtpm_new_dev_p;
> -   struct vtpm_proxy_new_dev vtpm_new_dev;
> -   struct file *file;
> -
>     switch (ioctl) {
>     case VTPM_PROXY_IOC_NEW_DEV:
> -      if (!capable(CAP_SYS_ADMIN))
> -         return -EPERM;
> -      vtpm_new_dev_p = argp;
> -      if (copy_from_user(&vtpm_new_dev, vtpm_new_dev_p,
> -               sizeof(vtpm_new_dev)))
> -         return -EFAULT;
> -      file = vtpm_proxy_create_device(&vtpm_new_dev);
> -      if (IS_ERR(file))
> -         return PTR_ERR(file);
> -      if (copy_to_user(vtpm_new_dev_p, &vtpm_new_dev,
> -             sizeof(vtpm_new_dev))) {
> -         put_unused_fd(vtpm_new_dev.fd);
> -         fput(file);
> -         return -EFAULT;
> -      }
> -
> -      fd_install(vtpm_new_dev.fd, file);
> -      return 0;
> -
> +      return vtpmx_ioc_new_dev(f, ioctl, arg);
>     default:
>        return -ENOIOCTLCMD;
>     }
> diff --git a/include/uapi/linux/vtpm_proxy.h 
b/include/uapi/linux/vtpm_proxy.h
> index 41e8e22..84c1e0a 100644
> --- a/include/uapi/linux/vtpm_proxy.h
> +++ b/include/uapi/linux/vtpm_proxy.h
> @@ -1,6 +1,7 @@
>  /*
>   * Definitions for the VTPM proxy driver
>   * Copyright (c) 2015, 2016, IBM Corporation
> + * Copyright (C) 2016 Intel Corporation
>   *
>   * This program is free software; you can redistribute it and/or modify 
it
>   * under the terms and conditions of the GNU General Public License,
> @@ -18,8 +19,23 @@
>  #include <linux/types.h>
>  #include <linux/ioctl.h>
> 
> -/* ioctls */
> +/**
> + * enum mipi_dsi_dcs_tear_mode - flags for the proxy TPM

mipi_dsi_tcs_tear_mode ?


> + * @VTPM_PROXY_FLAG_TPM2:   the proxy TPM uses TPM 2.0 protocol
> + */
> +enum vtpm_proxy_flags {
> +   VTPM_PROXY_FLAG_TPM2   = 1,
> +};
> 
> +/**
> + * struct vtpm_proxy_new_dev - parameter structure for the
> + *                             %VTPM_PROXY_IOC_NEW_DEV ioctl
> + * @flags:   flags for the proxy TPM
> + * @tpm_num:   index of the TPM device


The indentation for this one could be fixed.


> + * @fd:      the file descriptor used by the proxy TPM
> + * @major:   the major number of the TPM device
> + * @minor:   the minor number of the TPM device
> + */
>  struct vtpm_proxy_new_dev {
>     __u32 flags;         /* input */
>     __u32 tpm_num;       /* output */
> @@ -28,9 +44,6 @@ struct vtpm_proxy_new_dev {
>     __u32 minor;         /* output */
>  };
> 
> -/* above flags */
> -#define VTPM_PROXY_FLAG_TPM2  1  /* emulator is TPM 2 */
> -
> -#define VTPM_PROXY_IOC_NEW_DEV   _IOWR(0xa1, 0x00, struct 
vtpm_proxy_new_dev)
> +#define VTPM_PROXY_IOC_NEW_DEV   _IOWR(0xa1, 0x00, struct 
vtpm_proxy_new_dev)
> 
>  #endif /* _UAPI_LINUX_VTPM_PROXY_H */
> -- 
> 2.9.3
> 
> 
> 
------------------------------------------------------------------------------
> Developer Access Program for Intel Xeon Phi Processors
> Access to Intel Xeon Phi processor-based developer platforms.
> With one year of Intel Parallel Studio XE.
> Training and support from Colfax.
> Order your platform today. http://sdm.link/xeonphi
> _______________________________________________
> tpmdd-devel mailing list
> tpmdd-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/tpmdd-devel
> 


------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
_______________________________________________
tpmdd-devel mailing list
tpmdd-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tpmdd-devel

Reply via email to