1e5a26a40SBeau Belgrave /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2e5a26a40SBeau Belgrave /* 3e5a26a40SBeau Belgrave * Copyright (c) 2021-2022, Microsoft Corporation. 4e5a26a40SBeau Belgrave * 5e5a26a40SBeau Belgrave * Authors: 6e5a26a40SBeau Belgrave * Beau Belgrave <beaub@linux.microsoft.com> 7e5a26a40SBeau Belgrave */ 8e5a26a40SBeau Belgrave #ifndef _UAPI_LINUX_USER_EVENTS_H 9e5a26a40SBeau Belgrave #define _UAPI_LINUX_USER_EVENTS_H 10e5a26a40SBeau Belgrave 11e5a26a40SBeau Belgrave #include <linux/types.h> 12e5a26a40SBeau Belgrave #include <linux/ioctl.h> 13e5a26a40SBeau Belgrave 14e5a26a40SBeau Belgrave #define USER_EVENTS_SYSTEM "user_events" 15*64805e40SBeau Belgrave #define USER_EVENTS_MULTI_SYSTEM "user_events_multi" 16e5a26a40SBeau Belgrave #define USER_EVENTS_PREFIX "u:" 17e5a26a40SBeau Belgrave 18e5a26a40SBeau Belgrave /* Create dynamic location entry within a 32-bit value */ 19e5a26a40SBeau Belgrave #define DYN_LOC(offset, size) ((size) << 16 | (offset)) 20e5a26a40SBeau Belgrave 215dbd04edSBeau Belgrave /* List of supported registration flags */ 225dbd04edSBeau Belgrave enum user_reg_flag { 235dbd04edSBeau Belgrave /* Event will not delete upon last reference closing */ 245dbd04edSBeau Belgrave USER_EVENT_REG_PERSIST = 1U << 0, 255dbd04edSBeau Belgrave 26*64805e40SBeau Belgrave /* Event will be allowed to have multiple formats */ 27*64805e40SBeau Belgrave USER_EVENT_REG_MULTI_FORMAT = 1U << 1, 28*64805e40SBeau Belgrave 295dbd04edSBeau Belgrave /* This value or above is currently non-ABI */ 30*64805e40SBeau Belgrave USER_EVENT_REG_MAX = 1U << 2, 315dbd04edSBeau Belgrave }; 325dbd04edSBeau Belgrave 33e5a26a40SBeau Belgrave /* 34e5a26a40SBeau Belgrave * Describes an event registration and stores the results of the registration. 35e5a26a40SBeau Belgrave * This structure is passed to the DIAG_IOCSREG ioctl, callers at a minimum 36e5a26a40SBeau Belgrave * must set the size and name_args before invocation. 37e5a26a40SBeau Belgrave */ 38e5a26a40SBeau Belgrave struct user_reg { 39e5a26a40SBeau Belgrave 40e5a26a40SBeau Belgrave /* Input: Size of the user_reg structure being used */ 41e5a26a40SBeau Belgrave __u32 size; 42e5a26a40SBeau Belgrave 4372357590SBeau Belgrave /* Input: Bit in enable address to use */ 4472357590SBeau Belgrave __u8 enable_bit; 4572357590SBeau Belgrave 4672357590SBeau Belgrave /* Input: Enable size in bytes at address */ 4772357590SBeau Belgrave __u8 enable_size; 4872357590SBeau Belgrave 495dbd04edSBeau Belgrave /* Input: Flags to use, if any */ 5072357590SBeau Belgrave __u16 flags; 5172357590SBeau Belgrave 5272357590SBeau Belgrave /* Input: Address to update when enabled */ 5372357590SBeau Belgrave __u64 enable_addr; 5472357590SBeau Belgrave 55e5a26a40SBeau Belgrave /* Input: Pointer to string with event name, description and flags */ 56e5a26a40SBeau Belgrave __u64 name_args; 57e5a26a40SBeau Belgrave 58e5a26a40SBeau Belgrave /* Output: Index of the event to use when writing data */ 59e5a26a40SBeau Belgrave __u32 write_index; 60e5a26a40SBeau Belgrave } __attribute__((__packed__)); 61e5a26a40SBeau Belgrave 62dcb8177cSBeau Belgrave /* 63dcb8177cSBeau Belgrave * Describes an event unregister, callers must set the size, address and bit. 64dcb8177cSBeau Belgrave * This structure is passed to the DIAG_IOCSUNREG ioctl to disable bit updates. 65dcb8177cSBeau Belgrave */ 66dcb8177cSBeau Belgrave struct user_unreg { 67dcb8177cSBeau Belgrave /* Input: Size of the user_unreg structure being used */ 68dcb8177cSBeau Belgrave __u32 size; 69dcb8177cSBeau Belgrave 70dcb8177cSBeau Belgrave /* Input: Bit to unregister */ 71dcb8177cSBeau Belgrave __u8 disable_bit; 72dcb8177cSBeau Belgrave 73dcb8177cSBeau Belgrave /* Input: Reserved, set to 0 */ 74dcb8177cSBeau Belgrave __u8 __reserved; 75dcb8177cSBeau Belgrave 76dcb8177cSBeau Belgrave /* Input: Reserved, set to 0 */ 77dcb8177cSBeau Belgrave __u16 __reserved2; 78dcb8177cSBeau Belgrave 79dcb8177cSBeau Belgrave /* Input: Address to unregister */ 80dcb8177cSBeau Belgrave __u64 disable_addr; 81dcb8177cSBeau Belgrave } __attribute__((__packed__)); 82dcb8177cSBeau Belgrave 83e5a26a40SBeau Belgrave #define DIAG_IOC_MAGIC '*' 84e5a26a40SBeau Belgrave 85e5a26a40SBeau Belgrave /* Request to register a user_event */ 86e5a26a40SBeau Belgrave #define DIAG_IOCSREG _IOWR(DIAG_IOC_MAGIC, 0, struct user_reg *) 87e5a26a40SBeau Belgrave 88e5a26a40SBeau Belgrave /* Request to delete a user_event */ 89e5a26a40SBeau Belgrave #define DIAG_IOCSDEL _IOW(DIAG_IOC_MAGIC, 1, char *) 90e5a26a40SBeau Belgrave 91dcb8177cSBeau Belgrave /* Requests to unregister a user_event */ 92dcb8177cSBeau Belgrave #define DIAG_IOCSUNREG _IOW(DIAG_IOC_MAGIC, 2, struct user_unreg*) 93dcb8177cSBeau Belgrave 94e5a26a40SBeau Belgrave #endif /* _UAPI_LINUX_USER_EVENTS_H */ 95