[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200217162644.7f305d58@collabora.com>
Date: Mon, 17 Feb 2020 16:26:44 +0100
From: Boris Brezillon <boris.brezillon@...labora.com>
To: Vitor Soares <Vitor.Soares@...opsys.com>
Cc: linux-kernel@...r.kernel.org, linux-i3c@...ts.infradead.org,
Joao.Pinto@...opsys.com, Jose.Abreu@...opsys.com,
bbrezillon@...nel.org, gregkh@...uxfoundation.org,
wsa@...-dreams.de, arnd@...db.de, broonie@...nel.org
Subject: Re: [RFC v2 4/4] i3c: add i3cdev module to expose i3c dev in /dev
On Wed, 29 Jan 2020 13:17:35 +0100
Vitor Soares <Vitor.Soares@...opsys.com> wrote:
> diff --git a/include/uapi/linux/i3c/i3cdev.h b/include/uapi/linux/i3c/i3cdev.h
> new file mode 100644
> index 0000000..0897313
> --- /dev/null
> +++ b/include/uapi/linux/i3c/i3cdev.h
> @@ -0,0 +1,38 @@
> +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
> +/*
> + * Copyright (c) 2019 Synopsys, Inc. and/or its affiliates.
> + *
> + * Author: Vitor Soares <vitor.soares@...opsys.com>
> + */
> +
> +#ifndef _UAPI_I3C_DEV_H_
> +#define _UAPI_I3C_DEV_H_
> +
> +#include <linux/types.h>
> +#include <linux/ioctl.h>
> +
> +/* IOCTL commands */
> +#define I3C_DEV_IOC_MAGIC 0x07
I guess you already made sure there was no collision with other magic
values.
> +
> +/**
> + * struct i3c_ioc_priv_xfer - I3C SDR ioctl private transfer
> + * @data: Holds pointer to userspace buffer with transmit data.
> + * @len: Length of data buffer buffers, in bytes.
> + * @rnw: encodes the transfer direction. true for a read, false for a write
> + */
> +struct i3c_ioc_priv_xfer {
> + __u64 data;
> + __u16 len;
> + __u8 rnw;
> + __u8 pad[5];
> +};
> +
> +
> +#define I3C_PRIV_XFER_SIZE(N) \
> + ((((sizeof(struct i3c_ioc_priv_xfer)) * (N)) < (1 << _IOC_SIZEBITS)) \
> + ? ((sizeof(struct i3c_ioc_priv_xfer)) * (N)) : 0)
> +
> +#define I3C_IOC_PRIV_XFER(N) \
> + _IOC(_IOC_READ|_IOC_WRITE, I3C_DEV_IOC_MAGIC, 30, I3C_PRIV_XFER_SIZE(N))
Any reason for starting at 30 instead of 0x0 or 0x1?
Also, this ioctl definition is a bit unusual. Most of the time, when we
want to pass an array of elements we pass a struct that contains the
number of entries in this array, and a pointer to the array itself.
struct i3cdev_priv_xfers {
__u64 nxfers;
__u64 xfers; /*Use u64_to_user_ptr() to get the __user pointer*/
};
> +
> +#endif
Powered by blists - more mailing lists