Messages in this thread |  | | Date | Mon, 17 Feb 2020 16:26:44 +0100 | From | Boris Brezillon <> | 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@synopsys.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@synopsys.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
|  |