/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
/*
 * Copyright (c) 2021-2022, Microsoft Corporation.
 *
 * Authors:
 *   Beau Belgrave <beaub@linux.microsoft.com>
 */
#ifndef _UAPI_LINUX_USER_EVENTS_H
#define _UAPI_LINUX_USER_EVENTS_H

#include <linux/types.h>
#include <linux/ioctl.h>

#define USER_EVENTS_SYSTEM "user_events"
#define USER_EVENTS_PREFIX "u:"

/* Create dynamic location entry within a 32-bit value */
#define DYN_LOC(offset, size) ((size) << 16 | (offset))

/* List of supported registration flags */
enum user_reg_flag {
	/* Event will not delete upon last reference closing */
	USER_EVENT_REG_PERSIST		= 1U << 0,

	/* This value or above is currently non-ABI */
	USER_EVENT_REG_MAX		= 1U << 1,
};

/*
 * Describes an event registration and stores the results of the registration.
 * This structure is passed to the DIAG_IOCSREG ioctl, callers at a minimum
 * must set the size and name_args before invocation.
 */
struct user_reg {

	/* Input: Size of the user_reg structure being used */
	__u32	size;

	/* Input: Bit in enable address to use */
	__u8	enable_bit;

	/* Input: Enable size in bytes at address */
	__u8	enable_size;

	/* Input: Flags to use, if any */
	__u16	flags;

	/* Input: Address to update when enabled */
	__u64	enable_addr;

	/* Input: Pointer to string with event name, description and flags */
	__u64	name_args;

	/* Output: Index of the event to use when writing data */
	__u32	write_index;
} __attribute__((__packed__));

/*
 * Describes an event unregister, callers must set the size, address and bit.
 * This structure is passed to the DIAG_IOCSUNREG ioctl to disable bit updates.
 */
struct user_unreg {
	/* Input: Size of the user_unreg structure being used */
	__u32	size;

	/* Input: Bit to unregister */
	__u8	disable_bit;

	/* Input: Reserved, set to 0 */
	__u8	__reserved;

	/* Input: Reserved, set to 0 */
	__u16	__reserved2;

	/* Input: Address to unregister */
	__u64	disable_addr;
} __attribute__((__packed__));

#define DIAG_IOC_MAGIC '*'

/* Request to register a user_event */
#define DIAG_IOCSREG _IOWR(DIAG_IOC_MAGIC, 0, struct user_reg *)

/* Request to delete a user_event */
#define DIAG_IOCSDEL _IOW(DIAG_IOC_MAGIC, 1, char *)

/* Requests to unregister a user_event */
#define DIAG_IOCSUNREG _IOW(DIAG_IOC_MAGIC, 2, struct user_unreg*)

#endif /* _UAPI_LINUX_USER_EVENTS_H */
