Thanks Jens,
Even though the code not necessarily has to be stored in a central
repository, we will very soon need to have the code "merged somewhere",
which reflects our common thoughts on the driver and a place where
patches sent on tee-dev mailing list will be merged after having them
discussed.
In principle we need a repository and a gatekeeper/integrator.
We have several options, but I have two suggestions, either ...
1) Put a tree at git.linaro.org
... or ...
2) Put a tree at a developer account at GitHub.
git.linaro.org requires some minor setup, but I can fix that. Having it
on a developer account is quick and easy. However I can imagine that not
everyone thinks that this is a good idea. Thoughts?
I just want to once again emphasize that this is just a temporary thing.
As soon as we start to get code upstreamed, the discussions should take
place there instead, likewise with the source code.
The updated patch itself is a good start that I'm OK with (even though I
still want to change a couple of names).
--
On Fri, Mar 13, 2015 at 11:19:26AM +0100, Jens Wiklander wrote:
> Hi,
>
> Thanks for the input on the previous patch. Here's version two of the
> patch.
>
> Changes:
> * Trimmed struct tee_version to what's needed to identify the specific driver
> * Renamed sechw to sec-hw
> * Added dma_buf stuff to struct tee_mem_share_data
>
> Regards,
> Jens
>
> Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
> ---
> Documentation/ioctl/ioctl-number.txt | 1 +
> include/linux/sec-hw/tee.h | 167 +++++++++++++++++++++++++++++++++++
> 2 files changed, 168 insertions(+)
> create mode 100644 include/linux/sec-hw/tee.h
>
> diff --git a/Documentation/ioctl/ioctl-number.txt b/Documentation/ioctl/ioctl-number.txt
> index 8136e1f..3d55d8c 100644
> --- a/Documentation/ioctl/ioctl-number.txt
> +++ b/Documentation/ioctl/ioctl-number.txt
> @@ -301,6 +301,7 @@ Code Seq#(hex) Include File Comments
> 0xA3 80-8F Port ACL in development:
> <mailto:tlewis@mindspring.com>
> 0xA3 90-9F linux/dtlk.h
> +0xA4 00-1F linux/sec-hw/tee.h Generic TEE driver
> 0xAB 00-1F linux/nbd.h
> 0xAC 00-1F linux/raw.h
> 0xAD 00 Netfilter device in development:
> diff --git a/include/linux/sec-hw/tee.h b/include/linux/sec-hw/tee.h
> new file mode 100644
> index 0000000..c8e749b
> --- /dev/null
> +++ b/include/linux/sec-hw/tee.h
> @@ -0,0 +1,167 @@
> +/*
> + * Copyright (c) 2015, Linaro Limited
> + *
> + * This software is licensed under the terms of the GNU General Public
> + * License version 2, as published by the Free Software Foundation, and
> + * may be copied, distributed, and modified under those terms.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + */
> +
> +#ifndef __TEE_H
> +#define __TEE_H
> +
> +#include <linux/ioctl.h>
> +#include <linux/types.h>
> +
> +/*
> + * This file describes the API provided by the generic TEE driver to user
> + * space
> + */
> +
> +#define TEE_GENDRV_VERSION 1
> +
> +/**
> + * struct tee_version - TEE versions
> + * @gen_version: Generic TEE driver version
> + * @spec_version: Specific TEE driver version
> + * @uuid: Specific TEE driver uuid, zero if not used
> + *
> + * Identifies the generic TEE driver, and the specific TEE driver.
> + */
> +struct tee_version {
> + uint32_t gen_version;
> + uint32_t spec_version;
> + uint8_t uuid[16];
> +};
> +
> +/**
> + * struct tee_cmd_data - Opaque command argument
> + * @buf_ptr: A __user pointer to a command buffer
> + * @buf_len: Length of the buffer above
> + *
> + * Opaque command data which is passed on to the specific driver. The command
> + * buffer doesn't have to reside in shared memory.
> + */
> +struct tee_cmd_data {
> + uint64_t buf_ptr;
> + uint64_t buf_len;
> +};
> +
> +/**
> + * struct tee_shm_alloc_data - Shared memory allocate argument
> + * @size: Size of shared memory to allocate
> + * @flags: Flags to/from allocation, currently zero
> + * @fd: dma_buf file descriptor of the shared memory
> + */
> +struct tee_shm_alloc_data {
> + uint64_t size;
> + uint32_t flags;
> + int32_t fd;
> +};
> +
> +/**
> + * struct tee_mem_buf - share user space memory with Secure OS
> + * @ptr: A __user pointer to memory to share
> + * @size: Size of the memory to share
> + */
> +struct tee_mem_buf {
> + uint64_t ptr;
> + uint64_t size;
> +};
> +
> +/**
> + * struct tee_mem_dma_buf - share foreign dma_buf memory
> + * @fd: dma_buf file descriptor
> + * @pad: padding, set to zero by caller
> + */
> +struct tee_mem_dma_buf {
> + int32_t fd;
> + uint32_t pad;
> +};
> +
> +
> +/*
> + * Bits in struct tee_mem_share_data.flags
> + */
> +#define TEE_MEM_SHARE_FLAG_FOREIGN_BUFFER 0x1 /* use dma_buf field */
> +
> +/**
> + * struct tee_mem_share_data - share memory with Secure OS
> + * @buf: share user space memory
> + * @dma_buf: share foreign dma_buf memory
> + * @flags: Flags to/from sharing, unused bits set to zero by caller
> + * @pad: Padding, set to zero by caller
> + *
> + * If TEE_MEM_SHARE_FLAG_FOREIGN_BUFFER is set use the dma_buf field, else
> + * the buf field in the union.
> + */
> +struct tee_mem_share_data {
> + union {
> + struct tee_mem_buf buf;
> + struct tee_mem_dma_buf dma_buf;
> + }
> + uint32_t flags;
> + uint32_t pad;
> +};
> +
> +#define TEE_IOC_MAGIC 0xa4
> +#define TEE_IOC_BASE 0
> +
> +#define _TEE_IOR(nr, size) _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + (nr), size)
> +#define _TEE_IOWR(nr, size) _IOWR(TEE_IOC_MAGIC, TEE_IOC_BASE + (nr), size)
> +
> +/**
> + * TEE_IOC_VERSION - query version of drivers
> + *
> + * Takes a tee_version struct and returns with the version numbers filled in.
> + */
> +#define TEE_IOC_VERSION _TEE_IOR(0, struct tee_version)
> +
> +/**
> + * TEE_IOC_CMD - pass a command to the specific TEE driver
> + *
> + * Takes tee_cmd_data struct which is passed to the specific TEE driver.
> + */
> +#define TEE_IOC_CMD _TEE_IOR(1, struct tee_cmd_data)
> +
> +/**
> + * TEE_IOC_SHM_ALLOC - allocate shared memory
> + *
> + * Allocates shared memory between the user space process and secure OS.
> + * The returned file descriptor is used to map the shared memory into user
> + * space. The shared memory is freed when the descriptor is closed and the
> + * memory is unmapped.
> + */
> +#define TEE_IOC_SHM_ALLOC _TEE_IOWR(2, struct tee_shm_alloc_data)
> +
> +/**
> + * TEE_IOC_MEM_SHARE - share a portion of user space memory with secure OS
> + *
> + * Shares a portion of user space memory with secure OS.
> + */
> +#define TEE_IOC_MEM_SHARE _TEE_IOWR(3, struct tee_mem_share_data)
> +
> +/**
> + * TEE_IOC_MEM_UNSHARE - unshares a portion shared user space memory
> + *
> + * Unshares a portion of previously shared user space memory.
> + */
> +#define TEE_IOC_MEM_UNSHARE _TEE_IOWR(4, struct tee_mem_share_data)
> +
> +/*
> + * Five syscalls are used when communicating with the generic TEE driver.
> + * open(): opens the device associated with the driver
> + * ioctl(): as described above operating on the file descripto from open()
> + * close(): two cases
> + * - closes the device file descriptor
> + * - closes a file descriptor connected to allocated shared memory
> + * mmap(): maps shared memory into user space
> + * munmap(): unmaps previously shared memory
> + */
> +
> +#endif /*__TEE_H*/
> --
> 1.9.1
>
>
> _______________________________________________
> Tee-dev mailing list
> Tee-dev@lists.linaro.org
> http://lists.linaro.org/mailman/listinfo/tee-dev
Regards,
Joakim B
_______________________________________________
Tee-dev mailing list
Tee-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/tee-dev