Re: [PATCH 1/4] include/uapi/linux: add gxfp_ioctl.h for GXFP5130 fingerprint sensor
From: Greg KH
Date: Sat Jul 18 2026 - 05:09:18 EST
On Sat, Jul 18, 2026 at 11:14:28AM +0300, Metehan Günen wrote:
> Define the userspace ABI for the Goodix GXFP5130 eSPI fingerprint sensor
> driver:
>
> - struct gxfp_tap_hdr: header prepended to every read(2) record, carries
> payload length, MP protocol type and a ktime_get_ns() timestamp.
> - struct gxfp_tx_pkt_hdr: header that userspace prepends to write(2)
> payloads so the driver can wrap them in the eSPI frame format.
> - GXFP_IOCTL_FLUSH_RXQ: flush the kernel-side RX record queue.
>
> Signed-off-by: Metehan Günen <metehangnen@xxxxxxxxx>
> ---
> include/uapi/linux/gxfp_ioctl.h | 43 +++++++++++++++++++++++++++++++++
> 1 file changed, 43 insertions(+)
> create mode 100644 include/uapi/linux/gxfp_ioctl.h
>
> diff --git a/include/uapi/linux/gxfp_ioctl.h b/include/uapi/linux/gxfp_ioctl.h
> new file mode 100644
> index 000000000..c9c6c2d48
> --- /dev/null
> +++ b/include/uapi/linux/gxfp_ioctl.h
> @@ -0,0 +1,43 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +#ifndef __UAPI_GXFP_IOCTL_H
> +#define __UAPI_GXFP_IOCTL_H
> +
> +#include <linux/types.h>
> +#include <linux/ioctl.h>
> +
> +#define GXFP_IOCTL_MAGIC 'G'
> +
> +/*
> + * 4-byte MP header + payload must fit GXFP_TX_BUFFER_SIZE(512).
> + */
> +#define GXFP_IOCTL_TX_PAYLOAD_MAX 508u
> +
> +/* Maximum protocol payload bytes exported via read(2) records. */
> +#define GXFP_IOCTL_TAP_PAYLOAD_MAX (128u * 1024u)
> +
> +/*
> + * Stream tap (read/poll) record header.
> + * Followed by `len` bytes of protocol payload.
> + */
> +struct gxfp_tap_hdr {
> + __u32 len; /* protocol payload bytes */
> + __u32 type; /* MP type */
> + __u32 _rsvd0;
C variables do not start with _, this isn't rust :)
And are you checking this for 0?
> + __u64 ts_ns; /* ktime_get_ns() */
> + __u8 head16[16]; /* first 16 bytes of payload */
> +};
> +
> +/*
> + * write(2) packet header.
> + * Userspace writes: [gxfp_tx_pkt_hdr][payload bytes]
> + */
> +struct gxfp_tx_pkt_hdr {
> + __u8 mp_flags;
> + __u8 _pad0;
Are you checking this for 0?
> + __u16 payload_len;
> + __u32 flags;
No definition of what these flags are?
thanks,
greg k-h